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
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"}}}]