Tax Filing Service

<back to all web services

BatchProtokollRequest17

SyncDatenabholungVerarbeitungsprotokolleBatch

Represents the service request to retrieve logs about tax statements.

Requires Authentication
The following routes are available for this service:
POST/datenabholungen/protokolle/17/verarbeitungsprotokoll/batch
import Foundation
import ServiceStack

/**
* Represents the service request to retrieve logs about tax statements.
*/
// @Api(Description="Represents the service request to retrieve logs about tax statements.")
public class BatchProtokollRequest17 : BatchProtokollRequestBase17
{
    /**
    * The tax assessements, whose processing records shall be obtained.
    */
    // @ApiMember(Description="The tax assessements, whose processing records shall be obtained.", Name="Bescheide")
    public var bescheide:[Abholung17] = []

    /**
    * The authentification certificate.
    */
    // @ApiMember(Description="The authentification certificate.", IsRequired=true, Name="Zertifikat")
    public var zertifikat:PortalCertificate

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case bescheide
        case zertifikat
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        bescheide = try container.decodeIfPresent([Abholung17].self, forKey: .bescheide) ?? []
        zertifikat = try container.decodeIfPresent(PortalCertificate.self, forKey: .zertifikat)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if bescheide.count > 0 { try container.encode(bescheide, forKey: .bescheide) }
        if zertifikat != nil { try container.encode(zertifikat, forKey: .zertifikat) }
    }
}

/**
* Represents a base service request to retrieve processing records from specified tax statements. Applicable to version 17..
*/
// @Api(Description="Represents a base service request to retrieve processing records from specified tax statements. Applicable to version 17..")
public class BatchProtokollRequestBase17 : BatchProtokollRequestBase
{
    /**
    * The tax assessements, whose processing records shall be obtained.
    */
    // @ApiMember(Description="The tax assessements, whose processing records shall be obtained.", Name="Bescheide")
    public var bescheide:[Abholung17] = []

    /**
    * The authentification certificate.
    */
    // @ApiMember(Description="The authentification certificate.", IsRequired=true, Name="Zertifikat")
    public var zertifikat:PortalCertificate

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case bescheide
        case zertifikat
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        bescheide = try container.decodeIfPresent([Abholung17].self, forKey: .bescheide) ?? []
        zertifikat = try container.decodeIfPresent(PortalCertificate.self, forKey: .zertifikat)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if bescheide.count > 0 { try container.encode(bescheide, forKey: .bescheide) }
        if zertifikat != nil { try container.encode(zertifikat, forKey: .zertifikat) }
    }
}

/**
* Represents a base service request to retrieve processing records from specified tax statements.
*/
// @Api(Description="Represents a base service request to retrieve processing records from specified tax statements.")
public class BatchProtokollRequestBase : IPost, Codable
{
    /**
    * The authentification certificate.
    */
    // @ApiMember(Description="The authentification certificate.", IsRequired=true, Name="Zertifikat")
    public var zertifikat:PortalCertificate

    required public init(){}
}

/**
* Represents a portal certificate that is protected by a password.
*/
// @Api(Description="Represents a portal certificate that is protected by a password.")
public class PortalCertificate : FileBase, ISecuredCertificate, IHasIndex
{
    /**
    * The unique identifier of the certificate.
    */
    // @ApiMember(Description="The unique identifier of the certificate.")
    public var id:String

    /**
    * The position of the certificate element in an indexed collection of certificates.
    */
    // @ApiMember(Description="The position of the certificate element in an indexed collection of certificates.")
    public var index:Int

    /**
    * The password to protect the certificate from unauthorized access.
    */
    // @StringLength(255)
    // @ApiMember(Description="The password to protect the certificate from unauthorized access.")
    public var pin:String

    /**
    * The description of the certificate.
    */
    // @StringLength(Int32.max)
    // @ApiMember(Description="The description of the certificate.")
    public var Description:String

    /**
    * Tags that can be used to label or identify the certificate.
    */
    // @ApiMember(Description="Tags that can be used to label or identify the certificate.")
    public var tags:[String] = []

    /**
    * Gets or sets the file name of the certificate.
    */
    // @ApiMember(Description="Gets or sets the file name of the certificate.")
    public var name:String

    /**
    * The raw data content of the file.
    */
    // @ApiMember(Description="The raw data content of the file.", Name="Content")
    public var content:[UInt8] = []

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case id
        case index
        case pin
        case Description
        case tags
        case name
        case content
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        id = try container.decodeIfPresent(String.self, forKey: .id)
        index = try container.decodeIfPresent(Int.self, forKey: .index)
        pin = try container.decodeIfPresent(String.self, forKey: .pin)
        Description = try container.decodeIfPresent(String.self, forKey: .Description)
        tags = try container.decodeIfPresent([String].self, forKey: .tags) ?? []
        name = try container.decodeIfPresent(String.self, forKey: .name)
        content = try container.decodeIfPresent([UInt8].self, forKey: .content) ?? []
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if id != nil { try container.encode(id, forKey: .id) }
        if index != nil { try container.encode(index, forKey: .index) }
        if pin != nil { try container.encode(pin, forKey: .pin) }
        if Description != nil { try container.encode(Description, forKey: .Description) }
        if tags.count > 0 { try container.encode(tags, forKey: .tags) }
        if name != nil { try container.encode(name, forKey: .name) }
        if content.count > 0 { try container.encode(content, forKey: .content) }
    }
}

/**
* Represents a base class for a file with raw data.
*/
// @Api(Description="Represents a base class for a file with raw data.")
public class FileBase : Codable
{
    /**
    * The raw data content of the file.
    */
    // @ApiMember(Description="The raw data content of the file.", Name="Content")
    public var content:[UInt8] = []

    required public init(){}
}

/**
* Represents a request to retrieve data records by means of one or more IDs.
*/
// @Api(Description="Represents a request to retrieve data records by means of one or more IDs.")
public class Abholung17 : Abholung
{
    /**
    * The tax type (e.g. ESB) of the data record.
    */
    // @ApiMember(Description="The tax type (e.g. ESB) of the data record.")
    public var steuerart:Steuerart?

    /**
    * The meta information of the identifier.
    */
    // @ApiMember(Description="The meta information of the identifier.")
    public var metaInformationen:MetaInformationen17

    /**
    * Die Transfertickets der Datensaetze. Es duerfen max. 100 Bereitstellungstickets in einem Request angegeben werden.
    */
    // @ApiMember(Description="Die Transfertickets der Datensaetze. Es duerfen max. 100 Bereitstellungstickets in einem Request angegeben werden.")
    public var bereitstellungsticket:String

    /**
    * The attachments of the data records.
    */
    // @ApiMember(Description="The attachments of the data records.")
    public var anhaenge:Anhaenge17

    /**
    * The identifier of the data record.
    */
    // @ApiMember(Description="The identifier of the data record.")
    public var id:String

    /**
    * The ID number of the receipt owner. This attribute is only required for the tax type 'ElsterVaStDaten'.
    */
    // @ApiMember(Description="The ID number of the receipt owner. This attribute is only required for the tax type 'ElsterVaStDaten'.")
    public var idnr:String

    /**
    * The assessment year (YYYY) of the receipt. This attribute is only required for the tax type 'ElsterVaStDaten'.
    */
    // @ApiMember(Description="The assessment year (YYYY) of the receipt. This attribute is only required for the tax type 'ElsterVaStDaten'.")
    public var veranlagungsjahr:Int?

    /**
    * The transmission path used.
    */
    // @ApiMember(Description="The transmission path used.")
    public var uebertragungsweg:Uebertragungsweg?

    /**
    * The character encoding of the data record (e.g. ISO-8859-15). The exception is the data type ElsterVaStDaten, here we submit KEIN ENCODING.
    */
    // @ApiMember(Description="The character encoding of the data record (e.g. ISO-8859-15). The exception is the data type ElsterVaStDaten, here we submit KEIN ENCODING.")
    public var encoding:String

    /**
    * The client number; only applicable to the tax type 'ElsterDIVADaten'.
    */
    // @ApiMember(Description="The client number; only applicable to the tax type 'ElsterDIVADaten'.")
    public var mandantennummer:String

    /**
    * The tax number; only applicable to the tax type 'ElsterDIVADaten'.
    */
    // @ApiMember(Description="The tax number; only applicable to the tax type 'ElsterDIVADaten'.")
    public var steuernummer:String

    /**
    * The asessment date; only applicable to the tax type 'ElsterDIVADaten'.
    */
    // @ApiMember(Description="The asessment date; only applicable to the tax type 'ElsterDIVADaten'.")
    public var bescheiddatum:Date?

    /**
    * Das Datenpaket angeforderter Datensaetze. Nur bei der Direktsendung ueber das ERiClet.
    */
    // @ApiMember(Description="Das Datenpaket angeforderter Datensaetze. Nur bei der Direktsendung ueber das ERiClet.")
    public var datenpaket:Datenpaket

    /**
    * Download requested data records.  Ensure the second payload data block  is empty for bulk retrieval operations.
    */
    // @ApiMember(Description="Download requested data records.  Ensure the second payload data block  is empty for bulk retrieval operations.")
    public var download:Download

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case steuerart
        case metaInformationen
        case bereitstellungsticket
        case anhaenge
        case id
        case idnr
        case veranlagungsjahr
        case uebertragungsweg
        case encoding
        case mandantennummer
        case steuernummer
        case bescheiddatum
        case datenpaket
        case download
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        steuerart = try container.decodeIfPresent(Steuerart.self, forKey: .steuerart)
        metaInformationen = try container.decodeIfPresent(MetaInformationen17.self, forKey: .metaInformationen)
        bereitstellungsticket = try container.decodeIfPresent(String.self, forKey: .bereitstellungsticket)
        anhaenge = try container.decodeIfPresent(Anhaenge17.self, forKey: .anhaenge)
        id = try container.decodeIfPresent(String.self, forKey: .id)
        idnr = try container.decodeIfPresent(String.self, forKey: .idnr)
        veranlagungsjahr = try container.decodeIfPresent(Int.self, forKey: .veranlagungsjahr)
        uebertragungsweg = try container.decodeIfPresent(Uebertragungsweg.self, forKey: .uebertragungsweg)
        encoding = try container.decodeIfPresent(String.self, forKey: .encoding)
        mandantennummer = try container.decodeIfPresent(String.self, forKey: .mandantennummer)
        steuernummer = try container.decodeIfPresent(String.self, forKey: .steuernummer)
        bescheiddatum = try container.decodeIfPresent(Date.self, forKey: .bescheiddatum)
        datenpaket = try container.decodeIfPresent(Datenpaket.self, forKey: .datenpaket)
        download = try container.decodeIfPresent(Download.self, forKey: .download)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if steuerart != nil { try container.encode(steuerart, forKey: .steuerart) }
        if metaInformationen != nil { try container.encode(metaInformationen, forKey: .metaInformationen) }
        if bereitstellungsticket != nil { try container.encode(bereitstellungsticket, forKey: .bereitstellungsticket) }
        if anhaenge != nil { try container.encode(anhaenge, forKey: .anhaenge) }
        if id != nil { try container.encode(id, forKey: .id) }
        if idnr != nil { try container.encode(idnr, forKey: .idnr) }
        if veranlagungsjahr != nil { try container.encode(veranlagungsjahr, forKey: .veranlagungsjahr) }
        if uebertragungsweg != nil { try container.encode(uebertragungsweg, forKey: .uebertragungsweg) }
        if encoding != nil { try container.encode(encoding, forKey: .encoding) }
        if mandantennummer != nil { try container.encode(mandantennummer, forKey: .mandantennummer) }
        if steuernummer != nil { try container.encode(steuernummer, forKey: .steuernummer) }
        if bescheiddatum != nil { try container.encode(bescheiddatum, forKey: .bescheiddatum) }
        if datenpaket != nil { try container.encode(datenpaket, forKey: .datenpaket) }
        if download != nil { try container.encode(download, forKey: .download) }
    }
}

/**
* Represents the request to retrieve tax assessments by means of a specfied ID.
*/
// @Api(Description="Represents the request to retrieve tax assessments by means of a specfied ID.")
public class Abholung : Codable
{
    /**
    * The identifier of the data record.
    */
    // @ApiMember(Description="The identifier of the data record.")
    public var id:String

    /**
    * The ID number of the receipt owner. This attribute is only required for the tax type 'ElsterVaStDaten'.
    */
    // @ApiMember(Description="The ID number of the receipt owner. This attribute is only required for the tax type 'ElsterVaStDaten'.")
    public var idnr:String

    /**
    * The assessment year (YYYY) of the receipt. This attribute is only required for the tax type 'ElsterVaStDaten'.
    */
    // @ApiMember(Description="The assessment year (YYYY) of the receipt. This attribute is only required for the tax type 'ElsterVaStDaten'.")
    public var veranlagungsjahr:Int?

    /**
    * The transmission path used.
    */
    // @ApiMember(Description="The transmission path used.")
    public var uebertragungsweg:Uebertragungsweg?

    /**
    * The character encoding of the data record (e.g. ISO-8859-15). The exception is the data type ElsterVaStDaten, here we submit KEIN ENCODING.
    */
    // @ApiMember(Description="The character encoding of the data record (e.g. ISO-8859-15). The exception is the data type ElsterVaStDaten, here we submit KEIN ENCODING.")
    public var encoding:String

    /**
    * The client number; only applicable to the tax type 'ElsterDIVADaten'.
    */
    // @ApiMember(Description="The client number; only applicable to the tax type 'ElsterDIVADaten'.")
    public var mandantennummer:String

    /**
    * The tax number; only applicable to the tax type 'ElsterDIVADaten'.
    */
    // @ApiMember(Description="The tax number; only applicable to the tax type 'ElsterDIVADaten'.")
    public var steuernummer:String

    /**
    * The asessment date; only applicable to the tax type 'ElsterDIVADaten'.
    */
    // @ApiMember(Description="The asessment date; only applicable to the tax type 'ElsterDIVADaten'.")
    public var bescheiddatum:Date?

    /**
    * Das Datenpaket angeforderter Datensaetze. Nur bei der Direktsendung ueber das ERiClet.
    */
    // @ApiMember(Description="Das Datenpaket angeforderter Datensaetze. Nur bei der Direktsendung ueber das ERiClet.")
    public var datenpaket:Datenpaket

    /**
    * Download requested data records.  Ensure the second payload data block  is empty for bulk retrieval operations.
    */
    // @ApiMember(Description="Download requested data records.  Ensure the second payload data block  is empty for bulk retrieval operations.")
    public var download:Download

    required public init(){}
}

/**
* Represents the transmission path.
*/
public enum Uebertragungsweg : String, Codable
{
    case direkt
    case link
    case sammellink
}

/**
* The data packet from the retrieval operation.
*/
// @Api(Description="The data packet from the retrieval operation.")
public class Datenpaket : Codable
{
    /**
    * Encoded (compressed and encrypted) requested data record
    */
    // @ApiMember(Description="Encoded (compressed and encrypted) requested data record")
    public var value:String

    required public init(){}
}

/**
* Represents the download of requested records. The downloaded content from the web server takes place: a) with https b) on port 443 c) on datenabholung1.elster.de or datenabholung2.elster.de. The HTTP Basic Authentication mechanism according to RFC 2617 is used for authentication.
*/
// @Api(Description="Represents the download of requested records. The downloaded content from the web server takes place: a) with https b) on port 443 c) on datenabholung1.elster.de or datenabholung2.elster.de. The HTTP Basic Authentication mechanism according to RFC 2617 is used for authentication.")
public class Download : Codable
{
    /**
    * The link to the data on the web server.
    */
    // @ApiMember(Description="The link to the data on the web server.")
    public var url:String

    /**
    * The user name for the web server.
    */
    // @ApiMember(Description="The user name for the web server.")
    public var benutzer:String

    /**
    * Password for the web server.
    */
    // @ApiMember(Description="Password for the web server.")
    public var passwort:String

    required public init(){}
}

/**
* Represents the various tax types for the retrieval of data.
*/
public enum Steuerart : String, Codable
{
    case ESB
    case GSB
    case USB
    case EPBescheid
    case EPMitteilung
    case Gewerbesteuerbescheid
    case Gewerbesteuermitteilung
    case GEWMB
    case DIVAAnzeigeEinerLotterie
    case DIVABescheid
    case DivaBescheidESt
    case DIVABuchmachersteuer
    case DIVALotteriesteuerEinmal
    case DIVALotteriesteuerMehr
    case DIVASportwettensteuer
    case DIVATotalisator
    case OZGBescheid
    case VerbindlicheAuskunft
    case VerbindlicheZusage
    case DivaSonstigerVA
    case DivaBescheidErbSt
    case DivaBescheidFEIN
    case DivaBescheidGewSt
    case DivaBescheidKSt
    case DivaBescheidUSt
    case DivaBescheidSchenkSt
    case DIVATroncabgabe
    case DIVAVirtuelleAutomatenStB
    case DIVAOnlinePokerStB
    case LStHVVMRM
    case EinlagenrueckgewaehrVA
    case FTTMeldungVA
    case StatusInvStGVA
    case UStVEUVA
    case VERSVA
    case AltZertVA
    case KapEStEntlastungVA
    case PostUDLVA
    case StAb50aVA
    case StAbEntlastungVA
    case KassenangelegenheitenVA
    case KStOptVA
    case SteueroasenabwehrVA
    case KDBVollmachtRM
    case STBKE
    case VDBKDBRueckmeldungLief
    case AnhangRueckmeldung
    case DivaEinwilligungRM
    case GlueckspielF
    case OZGMitteilung
    case VerbindlicheAuskunftInfoF
    case ELOProtokoll
}

/**
* Represents meta information.
*/
// @Api(Description="Represents meta information.")
public class MetaInformationen17 : Codable
{
    /**
    * List of metadata.
    */
    // @ApiMember(Description="List of metadata.")
    public var meta:[Meta17] = []

    /**
    * List of meta infomation maps.
    */
    // @ApiMember(Description="List of meta infomation maps.")
    public var metaInfoMaps:MetaInfoMaps17

    required public init(){}
}

/**
* Represents the metadata of a data record.
*/
// @Api(Description="Represents the metadata of a data record.")
public class Meta17 : Codable
{
    /**
    * The type of metadata, e.g. datei [file]
    */
    // @ApiMember(Description="The type of metadata, e.g. datei [file]")
    public var name:String

    /**
    * The encoding of the metadata (text or base64)
    */
    // @ApiMember(Description="The encoding of the metadata (text or base64)")
    public var coding:Coding?

    /**
    * The content of the metadata
    */
    // @ApiMember(Description="The content of the metadata")
    public var value:String

    required public init(){}
}

/**
* Specifies the encoding of the metadata.
*/
public enum Coding : String, Codable
{
    case text
    case base64
}

/**
* Represents a list of meta information maps.
*/
public class MetaInfoMaps17 : Codable
{
    required public init(){}
}

/**
* Represents a list of attachments.
*/
public class Anhaenge17 : Codable
{
    required public init(){}
}


Swift BatchProtokollRequest17 DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv

HTTP + CSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /datenabholungen/protokolle/17/verarbeitungsprotokoll/batch HTTP/1.1 
Host: taxfiling.pwc.de 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"bescheide":[{"steuerart":"ESB","metaInformationen":{"meta":[{"name":"String","coding":"text","value":"String"}],"metaInfoMaps":[{"typ":"String","meta":[{"name":"String","coding":"text","value":"String"}]}]},"bereitstellungsticket":"String","anhaenge":[{"metadatenAnhang":[{"schluesselAnhang":{"dateibezeichnungID":"String","dateibezeichnungKurz":"String","value":"String"},"wertAnhang":{"dateibezeichnungID":"String","dateibezeichnungKurz":"String","value":"String"}}],"dateibezeichnung":"String","dateityp":"String","dateiinhalt":"String"}],"id":"String","idnr":"String","veranlagungsjahr":0,"uebertragungsweg":"direkt","encoding":"String","mandantennummer":"String","steuernummer":"String","bescheiddatum":"\/Date(-62135596800000-0000)\/","datenpaket":{"value":"String"},"download":{"url":"String","benutzer":"String","passwort":"String"}}],"zertifikat":{"id":"00000000000000000000000000000000","index":0,"pin":"String","description":"String","tags":["String"],"name":"String","content":"AA=="}}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

[{"protokoll":{"version":0,"zeitStempel":"\/Date(-62135596800000-0000)\/","datenTeil":{"transferTicket":"String","code":0,"text":"String","nutzdatenbloecke":[{"nutzdatenTicket":"String","code":0,"text":"String","verarbeiteteNds":0,"nichtverarbeiteteNds":0,"ndSFehler":[{"lfdNr":"String","kmId":"String","ordnungsMerkmal":"String","fehlerNummer":0,"fehlerText":"String"}]}]}},"id":"String","index":0,"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}}]