Tax Filing Service

<back to all web services

CreateZm2023Xml

SyncUmsatzsteuerZusammenfassende Meldung

A synchronous service to create XML content that represents a recapitulative tax declaration for 2023.

Requires Authentication
The following routes are available for this service:
POST/CreateZm2023XmlA synchronous service to create xml content that represents a recapitulative tax declaration for 2023.
import 'package:servicestack/servicestack.dart';
import 'dart:typed_data';

/**
* Angaben zum Unternehmen
*/
// @Api(Description="Angaben zum Unternehmen")
class Anschrift implements IConvertible
{
    /**
    * Der Name des Unternehmers.
    */
    // @ApiMember(Description="Der Name des Unternehmers.", IsRequired=true, Name="Name")
    String? name;

    /**
    * Der Adresszusatz des Unternehmers.
    */
    // @ApiMember(Description="Der Adresszusatz des Unternehmers.", Name="Adresszusatz")
    String? adresszusatz;

    /**
    * Der Straßenname des Unternehmers.
    */
    // @ApiMember(Description="Der Straßenname des Unternehmers.", IsRequired=true, Name="Strasse")
    String? strasse;

    /**
    * Die Hausnummer des Unternehmers.
    */
    // @ApiMember(Description="Die Hausnummer des Unternehmers.", Name="Hausnr")
    String? hausnr;

    /**
    * Der Hausnummerzusatz des Unternehmers.
    */
    // @ApiMember(Description="Der Hausnummerzusatz des Unternehmers.", Name="Hausnrzusatz")
    String? hausnrzusatz;

    /**
    * Der Ort des Unternehmers.
    */
    // @ApiMember(Description="Der Ort des Unternehmers.", IsRequired=true, Name="Ort")
    String? ort;

    /**
    * Die Postleitzahl des Unternehmers.
    */
    // @ApiMember(Description="Die Postleitzahl des Unternehmers.", Name="PLZ")
    String? plz;

    /**
    * Übermittlung des ISO-3166-Alpha-2-Codes des Staates von Unternehmer.
    */
    // @ApiMember(Description="Übermittlung des ISO-3166-Alpha-2-Codes des Staates von Unternehmer.", IsRequired=true, Name="Staat")
    String? staat;

    /**
    * Die Telefonummer des Unternehmers.
    */
    // @ApiMember(Description="Die Telefonummer des Unternehmers.", Name="Telefon")
    String? telefon;

    Anschrift({this.name,this.adresszusatz,this.strasse,this.hausnr,this.hausnrzusatz,this.ort,this.plz,this.staat,this.telefon});
    Anschrift.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        name = json['name'];
        adresszusatz = json['adresszusatz'];
        strasse = json['strasse'];
        hausnr = json['hausnr'];
        hausnrzusatz = json['hausnrzusatz'];
        ort = json['ort'];
        plz = json['plz'];
        staat = json['staat'];
        telefon = json['telefon'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'name': name,
        'adresszusatz': adresszusatz,
        'strasse': strasse,
        'hausnr': hausnr,
        'hausnrzusatz': hausnrzusatz,
        'ort': ort,
        'plz': plz,
        'staat': staat,
        'telefon': telefon
    };

    getTypeName() => "Anschrift";
    TypeContext? context = _ctx;
}

/**
* Die Art der Währung
*/
enum Waehrung
{
    UNGUELTIG,
    EUR,
}

/**
* Art der Meldung
*/
enum Meldeart
{
    Nein,
    Ja,
}

/**
* Die Art des Quartals
*/
enum Quart
{
    Q1,
    Q2,
    Q3,
    Q4,
    JM,
    M11,
    M12,
    M13,
    M14,
    M21,
    M22,
    M23,
    M24,
    M25,
    M26,
    M27,
    M28,
    M29,
    M30,
    M31,
    M32,
}

/**
* Meldungszeitraum
*/
// @Api(Description="Meldungszeitraum")
class Mzr implements IConvertible
{
    /**
    * Quartal
    */
    // @ApiMember(Description="Quartal", IsRequired=true, Name="Quart")
    Quart? quart;

    /**
    * Die 4-stellige Jahreszahl, welche die Veranlagungszeitraum darstellt.
    */
    // @ApiMember(Description="Die 4-stellige Jahreszahl, welche die Veranlagungszeitraum darstellt.", IsRequired=true, Name="Jahr")
    int? jahr;

    Mzr({this.quart,this.jahr});
    Mzr.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        quart = JsonConverters.fromJson(json['quart'],'Quart',context!);
        jahr = json['jahr'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'quart': JsonConverters.toJson(quart,'Quart',context!),
        'jahr': jahr
    };

    getTypeName() => "Mzr";
    TypeContext? context = _ctx;
}

/**
* Die Art des Umsatzes.
*/
enum Umsatzart
{
    D,
    L,
    S,
}

/**
* Specifies an amount of money without cents with limits and a specialized string representation
*/
// @Api(Description="Specifies an amount of money without cents with limits and a specialized string representation")
abstract class GrossGeldBetragOhneCent
{
    /**
    * The intrinsic currency value.
    */
    // @ApiMember(Description="The intrinsic currency value.")
    int? wert;

    GrossGeldBetragOhneCent({this.wert});
    GrossGeldBetragOhneCent.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        wert = json['wert'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'wert': wert
    };

    getTypeName() => "GrossGeldBetragOhneCent";
    TypeContext? context = _ctx;
}

/**
* Represents an amount of money without cents whose value has a maximum length of 11 digits. That is, 1 to 11 digits. Minus sign allowed.
*/
// @Api(Description="Represents an amount of money without cents whose value has a maximum length of 11 digits. That is, 1 to 11 digits. Minus sign allowed.")
class GeldBetragOhneCent11EN extends GrossGeldBetragOhneCent implements IConvertible
{
    /**
    * The intrinsic currency value.
    */
    // @ApiMember(Description="The intrinsic currency value.")
    int? wert;

    GeldBetragOhneCent11EN({this.wert});
    GeldBetragOhneCent11EN.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        wert = json['wert'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'wert': wert
    });

    getTypeName() => "GeldBetragOhneCent11EN";
    TypeContext? context = _ctx;
}

/**
* Meldung der Warenlieferungen
*/
// @Api(Description="Meldung der Warenlieferungen")
class Zeile implements IConvertible
{
    /**
    * Umsatzart
    */
    // @ApiMember(Description="Umsatzart", IsRequired=true, Name="Umsatzart")
    Umsatzart? umsatzart;

    /**
    * Umsatzsteuer-Identifikationsnummer des Erwerbers / Unternehmers in einem anderen Mitgliedstaat
    */
    // @ApiMember(Description="Umsatzsteuer-Identifikationsnummer des Erwerbers / Unternehmers in einem anderen Mitgliedstaat", IsRequired=true, Name="Knre")
    String? knre;

    /**
    * Summe (Euro)
    */
    // @ApiMember(Description="Summe (Euro)", IsRequired=true, Name="Betrag")
    GeldBetragOhneCent11EN? betrag;

    Zeile({this.umsatzart,this.knre,this.betrag});
    Zeile.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        umsatzart = JsonConverters.fromJson(json['umsatzart'],'Umsatzart',context!);
        knre = json['knre'];
        betrag = JsonConverters.fromJson(json['betrag'],'GeldBetragOhneCent11EN',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'umsatzart': JsonConverters.toJson(umsatzart,'Umsatzart',context!),
        'knre': knre,
        'betrag': JsonConverters.toJson(betrag,'GeldBetragOhneCent11EN',context!)
    };

    getTypeName() => "Zeile";
    TypeContext? context = _ctx;
}

/**
* Allgemeine Daten
*/
// @Api(Description="Allgemeine Daten")
class ZmZeilen implements IConvertible
{
    /**
    * Währung
    */
    // @ApiMember(Description="Währung", IsRequired=true, Name="Waehrung")
    Waehrung? waehrung;

    /**
    * Berichtigte Meldung
    */
    // @ApiMember(Description="Berichtigte Meldung", IsRequired=true, Name="Meldeart")
    Meldeart? meldeart;

    /**
    * Die in § 18a Absatz 1 Satz 2 UStG enthaltene Regelung nehme ich nicht in Anspruch.  Ich gebe die Zusammenfassende Meldung künftig monatlich ab. Diese Anzeige bindet mich bis zum Zeitpunkt des Widerrufs, mindestens aber für die Dauer von 12 Kalendermonaten.
    */
    // @ApiMember(Description="Die in § 18a Absatz 1 Satz 2 UStG enthaltene Regelung nehme ich nicht in Anspruch.  Ich gebe die Zusammenfassende Meldung künftig monatlich ab. Diese Anzeige bindet mich bis zum Zeitpunkt des Widerrufs, mindestens aber für die Dauer von 12 Kalendermonaten.", IsRequired=true, Name="Meldeart")
    bool? anzeige;

    /**
    * Widerruf meiner Anzeige nach § 18a Absatz 1 UStG
    */
    // @ApiMember(Description="Widerruf meiner Anzeige nach § 18a Absatz 1 UStG", IsRequired=true, Name="Widerruf")
    bool? widerruf;

    /**
    * Meldungszeitraum
    */
    // @ApiMember(Description="Meldungszeitraum", IsRequired=true, Name="Mzr")
    Mzr? mzr;

    /**
    * Meldungen der Warenlieferungen
    */
    // @ApiMember(Description="Meldungen der Warenlieferungen", IsRequired=true, Name="Zeilen")
    List<Zeile>? zeilen;

    ZmZeilen({this.waehrung,this.meldeart,this.anzeige,this.widerruf,this.mzr,this.zeilen});
    ZmZeilen.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        waehrung = JsonConverters.fromJson(json['waehrung'],'Waehrung',context!);
        meldeart = JsonConverters.fromJson(json['meldeart'],'Meldeart',context!);
        anzeige = json['anzeige'];
        widerruf = json['widerruf'];
        mzr = JsonConverters.fromJson(json['mzr'],'Mzr',context!);
        zeilen = JsonConverters.fromJson(json['zeilen'],'List<Zeile>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'waehrung': JsonConverters.toJson(waehrung,'Waehrung',context!),
        'meldeart': JsonConverters.toJson(meldeart,'Meldeart',context!),
        'anzeige': anzeige,
        'widerruf': widerruf,
        'mzr': JsonConverters.toJson(mzr,'Mzr',context!),
        'zeilen': JsonConverters.toJson(zeilen,'List<Zeile>',context!)
    };

    getTypeName() => "ZmZeilen";
    TypeContext? context = _ctx;
}

/**
* Create XML content that represents a recapitulative tax declaration for 2023.
*/
// @Api(Description="Create XML content that represents a recapitulative tax declaration for 2023.")
abstract class CreateZm2023XmlBase implements IPost
{
    /**
    * Inländische Umsatzsteuer-Identifikationsnummer des Meldenden bestehend aus dem Länderkürzel 'DE' gefolgt von exakt 9 Ziffern.
    */
    // @ApiMember(Description="Inländische Umsatzsteuer-Identifikationsnummer des Meldenden bestehend aus dem Länderkürzel 'DE' gefolgt von exakt 9 Ziffern.", IsRequired=true)
    String? knri;

    /**
    * Angaben zum Unternehmer
    */
    // @ApiMember(Description="Angaben zum Unternehmer", IsRequired=true)
    Anschrift? anschrift;

    /**
    * Allgemeine Daten
    */
    // @ApiMember(Description="Allgemeine Daten", IsRequired=true)
    ZmZeilen? zmZeilen;

    /**
    * The details of the provider that submits the tax data.
    */
    // @ApiMember(Description="The details of the provider that submits the tax data.", IsRequired=true)
    String? datenLieferant;

    CreateZm2023XmlBase({this.knri,this.anschrift,this.zmZeilen,this.datenLieferant});
    CreateZm2023XmlBase.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        knri = json['knri'];
        anschrift = JsonConverters.fromJson(json['anschrift'],'Anschrift',context!);
        zmZeilen = JsonConverters.fromJson(json['zmZeilen'],'ZmZeilen',context!);
        datenLieferant = json['datenLieferant'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'knri': knri,
        'anschrift': JsonConverters.toJson(anschrift,'Anschrift',context!),
        'zmZeilen': JsonConverters.toJson(zmZeilen,'ZmZeilen',context!),
        'datenLieferant': datenLieferant
    };

    getTypeName() => "CreateZm2023XmlBase";
    TypeContext? context = _ctx;
}

/**
* Represents the response from a service that generates XML content.
*/
// @Api(Description="Represents the response from a service that generates XML content.")
class XmlResponse implements IConvertible
{
    /**
    * The XML-based content of the response.
    */
    // @ApiMember(Description="The XML-based content of the response.")
    String? content;

    /**
    * Metadata that contains structured error information on the XML response.
    */
    // @ApiMember(Description="Metadata that contains structured error information on the XML response.")
    ResponseStatus? responseStatus;

    XmlResponse({this.content,this.responseStatus});
    XmlResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        content = json['content'];
        responseStatus = JsonConverters.fromJson(json['responseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'content': content,
        'responseStatus': JsonConverters.toJson(responseStatus,'ResponseStatus',context!)
    };

    getTypeName() => "XmlResponse";
    TypeContext? context = _ctx;
}

/**
* A synchronous service to create XML content that represents a recapitulative tax declaration for 2023.
*/
// @Api(Description="A synchronous service to create XML content that represents a recapitulative tax declaration for 2023.")
class CreateZm2023Xml extends CreateZm2023XmlBase implements IConvertible
{
    /**
    * Inländische Umsatzsteuer-Identifikationsnummer des Meldenden bestehend aus dem Länderkürzel 'DE' gefolgt von exakt 9 Ziffern.
    */
    // @ApiMember(Description="Inländische Umsatzsteuer-Identifikationsnummer des Meldenden bestehend aus dem Länderkürzel 'DE' gefolgt von exakt 9 Ziffern.", IsRequired=true)
    String? knri;

    /**
    * Angaben zum Unternehmer
    */
    // @ApiMember(Description="Angaben zum Unternehmer", IsRequired=true)
    Anschrift? anschrift;

    /**
    * Allgemeine Daten
    */
    // @ApiMember(Description="Allgemeine Daten", IsRequired=true)
    ZmZeilen? zmZeilen;

    /**
    * The details of the provider that submits the tax data.
    */
    // @ApiMember(Description="The details of the provider that submits the tax data.", IsRequired=true)
    String? datenLieferant;

    CreateZm2023Xml({this.knri,this.anschrift,this.zmZeilen,this.datenLieferant});
    CreateZm2023Xml.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        knri = json['knri'];
        anschrift = JsonConverters.fromJson(json['anschrift'],'Anschrift',context!);
        zmZeilen = JsonConverters.fromJson(json['zmZeilen'],'ZmZeilen',context!);
        datenLieferant = json['datenLieferant'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'knri': knri,
        'anschrift': JsonConverters.toJson(anschrift,'Anschrift',context!),
        'zmZeilen': JsonConverters.toJson(zmZeilen,'ZmZeilen',context!),
        'datenLieferant': datenLieferant
    });

    getTypeName() => "CreateZm2023Xml";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'taxfiling.pwc.de', types: <String, TypeInfo> {
    'Anschrift': TypeInfo(TypeOf.Class, create:() => Anschrift()),
    'Waehrung': TypeInfo(TypeOf.Enum, enumValues:Waehrung.values),
    'Meldeart': TypeInfo(TypeOf.Enum, enumValues:Meldeart.values),
    'Quart': TypeInfo(TypeOf.Enum, enumValues:Quart.values),
    'Mzr': TypeInfo(TypeOf.Class, create:() => Mzr()),
    'Umsatzart': TypeInfo(TypeOf.Enum, enumValues:Umsatzart.values),
    'GrossGeldBetragOhneCent': TypeInfo(TypeOf.AbstractClass),
    'GeldBetragOhneCent11EN': TypeInfo(TypeOf.Class, create:() => GeldBetragOhneCent11EN()),
    'Zeile': TypeInfo(TypeOf.Class, create:() => Zeile()),
    'ZmZeilen': TypeInfo(TypeOf.Class, create:() => ZmZeilen()),
    'List<Zeile>': TypeInfo(TypeOf.Class, create:() => <Zeile>[]),
    'CreateZm2023XmlBase': TypeInfo(TypeOf.AbstractClass),
    'XmlResponse': TypeInfo(TypeOf.Class, create:() => XmlResponse()),
    'CreateZm2023Xml': TypeInfo(TypeOf.Class, create:() => CreateZm2023Xml()),
});

Dart CreateZm2023Xml DTOs

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

HTTP + X-MSGPACK

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

POST /CreateZm2023Xml HTTP/1.1 
Host: taxfiling.pwc.de 
Accept: application/x-msgpack
Content-Type: application/x-msgpack
Content-Length: length

{"knri":"String","anschrift":{"name":"String","adresszusatz":"String","strasse":"String","hausnr":"String","hausnrzusatz":"String","ort":"String","plz":"String","staat":"String","telefon":"String"},"zmZeilen":{"waehrung":"UNGUELTIG","meldeart":"Nein","anzeige":false,"widerruf":false,"mzr":{"quart":"Q1","jahr":0},"zeilen":[{"umsatzart":"D","knre":"String","betrag":{"wert":0}}]},"datenLieferant":"String"}
HTTP/1.1 200 OK
Content-Type: application/x-msgpack
Content-Length: length

{"content":"String","responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}}