Report Filing Service

<back to all web services

CreateDac6XmlAsync

Generate XMLDAC6Async

Represents a request to generate an ELMA-compatible XML content from a DAC6 data model in an asynchronous operation.

Requires Authentication
The following routes are available for this service:
POST/async/elma/dac6/xml
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


enum LanguageCode : string
{
    case AA = 'AA';
    case AB = 'AB';
    case AF = 'AF';
    case AK = 'AK';
    case SQ = 'SQ';
    case AM = 'AM';
    case AR = 'AR';
    case AN = 'AN';
    case HY = 'HY';
    case AS = 'AS';
    case AV = 'AV';
    case AE = 'AE';
    case AY = 'AY';
    case AZ = 'AZ';
    case BA = 'BA';
    case BM = 'BM';
    case EU = 'EU';
    case BE = 'BE';
    case BN = 'BN';
    case BH = 'BH';
    case BI = 'BI';
    case BS = 'BS';
    case BR = 'BR';
    case BG = 'BG';
    case MY = 'MY';
    case CA = 'CA';
    case CH = 'CH';
    case CE = 'CE';
    case ZH = 'ZH';
    case CU = 'CU';
    case CV = 'CV';
    case KW = 'KW';
    case CO = 'CO';
    case CR = 'CR';
    case CS = 'CS';
    case DA = 'DA';
    case DV = 'DV';
    case NL = 'NL';
    case DZ = 'DZ';
    case EN = 'EN';
    case EO = 'EO';
    case ET = 'ET';
    case EE = 'EE';
    case FO = 'FO';
    case FJ = 'FJ';
    case FI = 'FI';
    case FR = 'FR';
    case FY = 'FY';
    case FF = 'FF';
    case KA = 'KA';
    case DE = 'DE';
    case GD = 'GD';
    case GA = 'GA';
    case GL = 'GL';
    case GV = 'GV';
    case EL = 'EL';
    case GN = 'GN';
    case GU = 'GU';
    case HT = 'HT';
    case HA = 'HA';
    case HE = 'HE';
    case HZ = 'HZ';
    case HI = 'HI';
    case HO = 'HO';
    case HR = 'HR';
    case HU = 'HU';
    case IG = 'IG';
    case IS = 'IS';
    case IO = 'IO';
    case II = 'II';
    case IU = 'IU';
    case IE = 'IE';
    case IA = 'IA';
    case ID = 'ID';
    case IK = 'IK';
    case IT = 'IT';
    case JV = 'JV';
    case JA = 'JA';
    case KL = 'KL';
    case KN = 'KN';
    case KS = 'KS';
    case KR = 'KR';
    case KK = 'KK';
    case KM = 'KM';
    case KI = 'KI';
    case RW = 'RW';
    case KY = 'KY';
    case KV = 'KV';
    case KG = 'KG';
    case KO = 'KO';
    case KJ = 'KJ';
    case KU = 'KU';
    case LO = 'LO';
    case LA = 'LA';
    case LV = 'LV';
    case LI = 'LI';
    case LN = 'LN';
    case LT = 'LT';
    case LB = 'LB';
    case LU = 'LU';
    case LG = 'LG';
    case MK = 'MK';
    case MH = 'MH';
    case ML = 'ML';
    case MI = 'MI';
    case MR = 'MR';
    case MS = 'MS';
    case MG = 'MG';
    case MT = 'MT';
    case MN = 'MN';
    case NA = 'NA';
    case NV = 'NV';
    case NR = 'NR';
    case ND = 'ND';
    case NG = 'NG';
    case NE = 'NE';
    case NN = 'NN';
    case NB = 'NB';
    case NO = 'NO';
    case NY = 'NY';
    case OC = 'OC';
    case OJ = 'OJ';
    case OR = 'OR';
    case OM = 'OM';
    case OS = 'OS';
    case PA = 'PA';
    case FA = 'FA';
    case PI = 'PI';
    case PL = 'PL';
    case PT = 'PT';
    case PS = 'PS';
    case QU = 'QU';
    case RM = 'RM';
    case RO = 'RO';
    case RN = 'RN';
    case RU = 'RU';
    case SG = 'SG';
    case SA = 'SA';
    case SI = 'SI';
    case SK = 'SK';
    case SL = 'SL';
    case SE = 'SE';
    case SM = 'SM';
    case SN = 'SN';
    case SD = 'SD';
    case SO = 'SO';
    case ST = 'ST';
    case ES = 'ES';
    case SC = 'SC';
    case SR = 'SR';
    case SS = 'SS';
    case SU = 'SU';
    case SW = 'SW';
    case SV = 'SV';
    case TY = 'TY';
    case TA = 'TA';
    case TT = 'TT';
    case TE = 'TE';
    case TG = 'TG';
    case TL = 'TL';
    case TH = 'TH';
    case BO = 'BO';
    case TI = 'TI';
    case TO = 'TO';
    case TN = 'TN';
    case TS = 'TS';
    case TK = 'TK';
    case TR = 'TR';
    case TW = 'TW';
    case UG = 'UG';
    case UK = 'UK';
    case UR = 'UR';
    case UZ = 'UZ';
    case VE = 'VE';
    case VI = 'VI';
    case VO = 'VO';
    case CY = 'CY';
    case WA = 'WA';
    case WO = 'WO';
    case XH = 'XH';
    case YI = 'YI';
    case YO = 'YO';
    case ZA = 'ZA';
    case ZU = 'ZU';
}

/** @description Angaben zu den Kopfdaten */
// @Api(Description="Angaben zu den Kopfdaten")
class Dac6Header implements JsonSerializable
{
    public function __construct(
        /** @description Empfängerstaaten */
        // @ApiMember(Description="Empfängerstaaten", Name="ReceivingCountries")
        /** @var array<CountryCode>|null */
        public ?array $receivingCountries=null,

        /** @description MessageRefID Angabe im Format  DEMYYYYMMDDXXXXXX...XXX  <DE><M><Datum><Bezeichner><Kombination>  DE beinhaltet den ISO country code "DE"  M besteht aus dem Buchstaben "M" für MessageRefID  Datum an dem die MessageRefID ausgestellt wurde im Format YYYYMMDD  Bezeichner beinhaltet EOP/BOP-Nummer  eine Kombination aus Ziffern (0-9) und Großbuchstaben (AZ).  Der Bezeichner ist die EOP/BOP-Nummer, die übrigen Felder sind so zu befüllen, dass bei mehreren Lieferungen zu einem Datum jede MessageRefID eines Melders einzigartig ist.  Die Länge der MessageRefID ist durch eine Geschäftsregel auf 40 Zeichen beschränkt. */
        // @ApiMember(Description="MessageRefID Angabe im Format  DEMYYYYMMDDXXXXXX...XXX  <DE><M><Datum><Bezeichner><Kombination>  DE beinhaltet den ISO country code \"DE\"  M besteht aus dem Buchstaben \"M\" für MessageRefID  Datum an dem die MessageRefID ausgestellt wurde im Format YYYYMMDD  Bezeichner beinhaltet EOP/BOP-Nummer  eine Kombination aus Ziffern (0-9) und Großbuchstaben (AZ).  Der Bezeichner ist die EOP/BOP-Nummer, die übrigen Felder sind so zu befüllen, dass bei mehreren Lieferungen zu einem Datum jede MessageRefID eines Melders einzigartig ist.  Die Länge der MessageRefID ist durch eine Geschäftsregel auf 40 Zeichen beschränkt.", IsRequired=true, Name="MessageRefId")
        /** @var string */
        public string $messageRefId='',

        /** @description Zeitstempel Dieses Feld gibt das Datum und die Uhrzeit der Erstellung der Nachricht im XML DateTime Format (YYYY MM DD'Dac6RelevantTaxPayer'hh:mm:ss.mmm) gemäß CET an Sollte die Meldung aus einer abweichenden Zeitzone erfolgen, so ist eine Umrechnung auf CET vorzunehmen. */
        // @ApiMember(Description="Zeitstempel Dieses Feld gibt das Datum und die Uhrzeit der Erstellung der Nachricht im XML DateTime Format (YYYY MM DD'Dac6RelevantTaxPayer'hh:mm:ss.mmm) gemäß CET an Sollte die Meldung aus einer abweichenden Zeitzone erfolgen, so ist eine Umrechnung auf CET vorzunehmen.", IsRequired=true, Name="Timestamp")
        /** @var DateTime */
        public DateTime $timestamp=new DateTime()
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['receivingCountries'])) $this->receivingCountries = JsonConverters::fromArray('Nullable<CountryCode>', $o['receivingCountries']);
        if (isset($o['messageRefId'])) $this->messageRefId = $o['messageRefId'];
        if (isset($o['timestamp'])) $this->timestamp = JsonConverters::from('DateTime', $o['timestamp']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->receivingCountries)) $o['receivingCountries'] = JsonConverters::toArray('Nullable<CountryCode>', $this->receivingCountries);
        if (isset($this->messageRefId)) $o['messageRefId'] = $this->messageRefId;
        if (isset($this->timestamp)) $o['timestamp'] = JsonConverters::to('DateTime', $this->timestamp);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Stellt die Namensangaben dar. */
// @Api(Description="Stellt die Namensangaben dar.")
class Dac6NamePerson implements JsonSerializable
{
    public function __construct(
        /** @description Vorangestellter Titel */
        // @ApiMember(Description="Vorangestellter Titel", IsRequired=true, Name="PrecedingTitle")
        /** @var string */
        public string $precedingTitle='',

        /** @description Titel */
        // @ApiMember(Description="Titel", Name="Title")
        /** @var string|null */
        public ?string $title=null,

        /** @description Vorname */
        // @ApiMember(Description="Vorname", IsRequired=true, Name="FirstName")
        /** @var string */
        public string $firstName='',

        /** @description Zweitname (weitere Namen) */
        // @ApiMember(Description="Zweitname (weitere Namen)", Name="MiddleName")
        /** @var string|null */
        public ?string $middleName=null,

        /** @description Namenszusatz */
        // @ApiMember(Description="Namenszusatz", Name="NamePrefix")
        /** @var string|null */
        public ?string $namePrefix=null,

        /** @description Nachname */
        // @ApiMember(Description="Nachname", IsRequired=true, Name="LastName")
        /** @var string */
        public string $lastName='',

        /** @description Generationszusatz */
        // @ApiMember(Description="Generationszusatz", Name="GenerationIdentifier")
        /** @var string|null */
        public ?string $generationIdentifier=null,

        /** @description Titelzusatz */
        // @ApiMember(Description="Titelzusatz", Name="Suffix")
        /** @var string|null */
        public ?string $suffix=null,

        /** @description Allgemeiner Zusatz */
        // @ApiMember(Description="Allgemeiner Zusatz", Name="GeneralSuffix")
        /** @var string|null */
        public ?string $generalSuffix=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['precedingTitle'])) $this->precedingTitle = $o['precedingTitle'];
        if (isset($o['title'])) $this->title = $o['title'];
        if (isset($o['firstName'])) $this->firstName = $o['firstName'];
        if (isset($o['middleName'])) $this->middleName = $o['middleName'];
        if (isset($o['namePrefix'])) $this->namePrefix = $o['namePrefix'];
        if (isset($o['lastName'])) $this->lastName = $o['lastName'];
        if (isset($o['generationIdentifier'])) $this->generationIdentifier = $o['generationIdentifier'];
        if (isset($o['suffix'])) $this->suffix = $o['suffix'];
        if (isset($o['generalSuffix'])) $this->generalSuffix = $o['generalSuffix'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->precedingTitle)) $o['precedingTitle'] = $this->precedingTitle;
        if (isset($this->title)) $o['title'] = $this->title;
        if (isset($this->firstName)) $o['firstName'] = $this->firstName;
        if (isset($this->middleName)) $o['middleName'] = $this->middleName;
        if (isset($this->namePrefix)) $o['namePrefix'] = $this->namePrefix;
        if (isset($this->lastName)) $o['lastName'] = $this->lastName;
        if (isset($this->generationIdentifier)) $o['generationIdentifier'] = $this->generationIdentifier;
        if (isset($this->suffix)) $o['suffix'] = $this->suffix;
        if (isset($this->generalSuffix)) $o['generalSuffix'] = $this->generalSuffix;
        return empty($o) ? new class(){} : $o;
    }
}

enum CountryCode : string
{
    case AF = 'AF';
    case AX = 'AX';
    case AL = 'AL';
    case DZ = 'DZ';
    case AS = 'AS';
    case AD = 'AD';
    case AO = 'AO';
    case AI = 'AI';
    case AQ = 'AQ';
    case AG = 'AG';
    case AR = 'AR';
    case AM = 'AM';
    case AW = 'AW';
    case AU = 'AU';
    case AT = 'AT';
    case AZ = 'AZ';
    case BS = 'BS';
    case BH = 'BH';
    case BD = 'BD';
    case BB = 'BB';
    case BY = 'BY';
    case BE = 'BE';
    case BZ = 'BZ';
    case BJ = 'BJ';
    case BM = 'BM';
    case BT = 'BT';
    case BO = 'BO';
    case BQ = 'BQ';
    case BA = 'BA';
    case BW = 'BW';
    case BV = 'BV';
    case BR = 'BR';
    case IO = 'IO';
    case BN = 'BN';
    case BG = 'BG';
    case BF = 'BF';
    case BI = 'BI';
    case KH = 'KH';
    case CM = 'CM';
    case CA = 'CA';
    case CV = 'CV';
    case KY = 'KY';
    case CF = 'CF';
    case TD = 'TD';
    case CL = 'CL';
    case CN = 'CN';
    case CX = 'CX';
    case CC = 'CC';
    case CO = 'CO';
    case KM = 'KM';
    case CG = 'CG';
    case CD = 'CD';
    case CK = 'CK';
    case CR = 'CR';
    case CI = 'CI';
    case HR = 'HR';
    case CU = 'CU';
    case CW = 'CW';
    case CY = 'CY';
    case CZ = 'CZ';
    case DK = 'DK';
    case DJ = 'DJ';
    case DM = 'DM';
    case DO = 'DO';
    case EC = 'EC';
    case EG = 'EG';
    case SV = 'SV';
    case GQ = 'GQ';
    case ER = 'ER';
    case EE = 'EE';
    case ET = 'ET';
    case FK = 'FK';
    case FO = 'FO';
    case FJ = 'FJ';
    case FI = 'FI';
    case FR = 'FR';
    case GF = 'GF';
    case PF = 'PF';
    case TF = 'TF';
    case GA = 'GA';
    case GM = 'GM';
    case GE = 'GE';
    case DE = 'DE';
    case GH = 'GH';
    case GI = 'GI';
    case GR = 'GR';
    case GL = 'GL';
    case GD = 'GD';
    case GP = 'GP';
    case GU = 'GU';
    case GT = 'GT';
    case GG = 'GG';
    case GN = 'GN';
    case GW = 'GW';
    case GY = 'GY';
    case HT = 'HT';
    case HM = 'HM';
    case VA = 'VA';
    case HN = 'HN';
    case HK = 'HK';
    case HU = 'HU';
    case IS = 'IS';
    case IN = 'IN';
    case ID = 'ID';
    case IR = 'IR';
    case IQ = 'IQ';
    case IE = 'IE';
    case IM = 'IM';
    case IL = 'IL';
    case IT = 'IT';
    case JM = 'JM';
    case JP = 'JP';
    case JE = 'JE';
    case JO = 'JO';
    case KZ = 'KZ';
    case KE = 'KE';
    case KI = 'KI';
    case KP = 'KP';
    case KR = 'KR';
    case KW = 'KW';
    case KG = 'KG';
    case LA = 'LA';
    case LV = 'LV';
    case LB = 'LB';
    case LS = 'LS';
    case LR = 'LR';
    case LY = 'LY';
    case LI = 'LI';
    case LT = 'LT';
    case LU = 'LU';
    case MO = 'MO';
    case MK = 'MK';
    case MG = 'MG';
    case MW = 'MW';
    case MY = 'MY';
    case MV = 'MV';
    case ML = 'ML';
    case MT = 'MT';
    case MH = 'MH';
    case MQ = 'MQ';
    case MR = 'MR';
    case MU = 'MU';
    case YT = 'YT';
    case MX = 'MX';
    case FM = 'FM';
    case MD = 'MD';
    case MC = 'MC';
    case MN = 'MN';
    case ME = 'ME';
    case MS = 'MS';
    case MA = 'MA';
    case MZ = 'MZ';
    case MM = 'MM';
    case NA = 'NA';
    case NR = 'NR';
    case NP = 'NP';
    case NL = 'NL';
    case NC = 'NC';
    case NZ = 'NZ';
    case NI = 'NI';
    case NE = 'NE';
    case NG = 'NG';
    case NU = 'NU';
    case NF = 'NF';
    case MP = 'MP';
    case NO = 'NO';
    case OM = 'OM';
    case PK = 'PK';
    case PW = 'PW';
    case PS = 'PS';
    case PA = 'PA';
    case PG = 'PG';
    case PY = 'PY';
    case PE = 'PE';
    case PH = 'PH';
    case PN = 'PN';
    case PL = 'PL';
    case PT = 'PT';
    case PR = 'PR';
    case QA = 'QA';
    case RE = 'RE';
    case RO = 'RO';
    case RU = 'RU';
    case RW = 'RW';
    case BL = 'BL';
    case SH = 'SH';
    case KN = 'KN';
    case LC = 'LC';
    case MF = 'MF';
    case PM = 'PM';
    case VC = 'VC';
    case WS = 'WS';
    case SM = 'SM';
    case ST = 'ST';
    case SA = 'SA';
    case SN = 'SN';
    case RS = 'RS';
    case SC = 'SC';
    case SL = 'SL';
    case SG = 'SG';
    case SX = 'SX';
    case SK = 'SK';
    case SI = 'SI';
    case SB = 'SB';
    case SO = 'SO';
    case ZA = 'ZA';
    case GS = 'GS';
    case SS = 'SS';
    case ES = 'ES';
    case LK = 'LK';
    case SD = 'SD';
    case SR = 'SR';
    case SJ = 'SJ';
    case SZ = 'SZ';
    case SE = 'SE';
    case CH = 'CH';
    case SY = 'SY';
    case TW = 'TW';
    case TJ = 'TJ';
    case TZ = 'TZ';
    case TH = 'TH';
    case TL = 'TL';
    case TG = 'TG';
    case TK = 'TK';
    case TO = 'TO';
    case TT = 'TT';
    case TN = 'TN';
    case TR = 'TR';
    case TM = 'TM';
    case TC = 'TC';
    case TV = 'TV';
    case UG = 'UG';
    case UA = 'UA';
    case AE = 'AE';
    case GB = 'GB';
    case US = 'US';
    case UM = 'UM';
    case UY = 'UY';
    case UZ = 'UZ';
    case VU = 'VU';
    case VE = 'VE';
    case VN = 'VN';
    case VG = 'VG';
    case VI = 'VI';
    case WF = 'WF';
    case EH = 'EH';
    case YE = 'YE';
    case ZM = 'ZM';
    case ZW = 'ZW';
    case XK = 'XK';
    case XX = 'XX';
}

/** @description Steueridentifikationsmerkmal Stellt die Angabe der Steuernummer dar. */
// @Api(Description="Steueridentifikationsmerkmal Stellt die Angabe der Steuernummer dar.")
class Dac6TIN implements JsonSerializable
{
    public function __construct(
        /** @description Ausstellender Staat */
        // @ApiMember(Description="Ausstellender Staat", Name="IssuedBy")
        /** @var CountryCode|null */
        public ?CountryCode $issuedBy=null,

        /** @description Steuernummer */
        // @ApiMember(Description="Steuernummer", IsRequired=true, Name="Value")
        /** @var string */
        public string $value=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['issuedBy'])) $this->issuedBy = JsonConverters::from('CountryCode', $o['issuedBy']);
        if (isset($o['value'])) $this->value = $o['value'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->issuedBy)) $o['issuedBy'] = JsonConverters::to('CountryCode', $this->issuedBy);
        if (isset($this->value)) $o['value'] = $this->value;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Stellt die Andressangaben dar. */
// @Api(Description="Stellt die Andressangaben dar.")
class Dac6Address implements JsonSerializable
{
    public function __construct(
        /** @description Straße */
        // @ApiMember(Description="Straße", Name="Street")
        /** @var string|null */
        public ?string $street=null,

        /** @description Hausnummer */
        // @ApiMember(Description="Hausnummer", Name="BuildingIdentifier")
        /** @var string|null */
        public ?string $buildingIdentifier=null,

        /** @description Wohnungsbezeichnung */
        // @ApiMember(Description="Wohnungsbezeichnung", Name="SuiteIdentifier")
        /** @var string|null */
        public ?string $suiteIdentifier=null,

        /** @description Etagenbezeichnung */
        // @ApiMember(Description="Etagenbezeichnung", Name="FloorIdentifier")
        /** @var string|null */
        public ?string $floorIdentifier=null,

        /** @description Verwaltungsbezirk */
        // @ApiMember(Description="Verwaltungsbezirk", Name="DistrictName")
        /** @var string|null */
        public ?string $districtName=null,

        /** @description Postfach */
        // @ApiMember(Description="Postfach", Name="POB")
        /** @var string|null */
        public ?string $pob=null,

        /** @description Postleitzahl */
        // @ApiMember(Description="Postleitzahl", Name="PostCode")
        /** @var string|null */
        public ?string $postCode=null,

        /** @description Ort */
        // @ApiMember(Description="Ort", IsRequired=true, Name="City")
        /** @var string */
        public string $city='',

        /** @description Staat Zweibuchstabiges Länderkürzel nach ISO Norm 3166-1 Alpha 2 */
        // @ApiMember(Description="Staat Zweibuchstabiges Länderkürzel nach ISO Norm 3166-1 Alpha 2", IsRequired=true, Name="Country")
        /** @var CountryCode|null */
        public ?CountryCode $country=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['street'])) $this->street = $o['street'];
        if (isset($o['buildingIdentifier'])) $this->buildingIdentifier = $o['buildingIdentifier'];
        if (isset($o['suiteIdentifier'])) $this->suiteIdentifier = $o['suiteIdentifier'];
        if (isset($o['floorIdentifier'])) $this->floorIdentifier = $o['floorIdentifier'];
        if (isset($o['districtName'])) $this->districtName = $o['districtName'];
        if (isset($o['pob'])) $this->pob = $o['pob'];
        if (isset($o['postCode'])) $this->postCode = $o['postCode'];
        if (isset($o['city'])) $this->city = $o['city'];
        if (isset($o['country'])) $this->country = JsonConverters::from('CountryCode', $o['country']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->street)) $o['street'] = $this->street;
        if (isset($this->buildingIdentifier)) $o['buildingIdentifier'] = $this->buildingIdentifier;
        if (isset($this->suiteIdentifier)) $o['suiteIdentifier'] = $this->suiteIdentifier;
        if (isset($this->floorIdentifier)) $o['floorIdentifier'] = $this->floorIdentifier;
        if (isset($this->districtName)) $o['districtName'] = $this->districtName;
        if (isset($this->pob)) $o['pob'] = $this->pob;
        if (isset($this->postCode)) $o['postCode'] = $this->postCode;
        if (isset($this->city)) $o['city'] = $this->city;
        if (isset($this->country)) $o['country'] = JsonConverters::to('CountryCode', $this->country);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Natürliche Person */
// @Api(Description="Natürliche Person")
class Dac6Person implements JsonSerializable
{
    public function __construct(
        /** @description Namensangaben */
        // @ApiMember(Description="Namensangaben", IsRequired=true, Name="IndividualName")
        /** @var Dac6NamePerson|null */
        public ?Dac6NamePerson $individualName=null,

        /** @description GeburtsdatumFormat: YYYY-MM-DD */
        // @ApiMember(Description="GeburtsdatumFormat: YYYY-MM-DD", IsRequired=true, Name="BirthDate")
        /** @var DateTime */
        public DateTime $birthDate=new DateTime(),

        /** @description Geburtsort */
        // @ApiMember(Description="Geburtsort", IsRequired=true, Name="BirthPlace")
        /** @var string */
        public string $birthPlace='',

        /** @description Steueridentifikationsmerkmale */
        // @ApiMember(Description="Steueridentifikationsmerkmale", IsRequired=true, Name="TINs")
        /** @var array<Dac6TIN>|null */
        public ?array $tiNs=null,

        /** @description Adressangaben */
        // @ApiMember(Description="Adressangaben", IsRequired=true, Name="Address")
        /** @var Dac6Address|null */
        public ?Dac6Address $address=null,

        /** @description E-Mailadresse */
        // @ApiMember(Description="E-Mailadresse", Name="EmailAddress")
        /** @var string|null */
        public ?string $emailAddress=null,

        /** @description Ansässigkeitsstaaten */
        // @ApiMember(Description="Ansässigkeitsstaaten", IsRequired=true, Name="ResCountryCodes")
        /** @var array<CountryCode>|null */
        public ?array $resCountryCodes=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['individualName'])) $this->individualName = JsonConverters::from('Dac6NamePerson', $o['individualName']);
        if (isset($o['birthDate'])) $this->birthDate = JsonConverters::from('DateTime', $o['birthDate']);
        if (isset($o['birthPlace'])) $this->birthPlace = $o['birthPlace'];
        if (isset($o['tiNs'])) $this->tiNs = JsonConverters::fromArray('Dac6TIN', $o['tiNs']);
        if (isset($o['address'])) $this->address = JsonConverters::from('Dac6Address', $o['address']);
        if (isset($o['emailAddress'])) $this->emailAddress = $o['emailAddress'];
        if (isset($o['resCountryCodes'])) $this->resCountryCodes = JsonConverters::fromArray('CountryCode', $o['resCountryCodes']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->individualName)) $o['individualName'] = JsonConverters::to('Dac6NamePerson', $this->individualName);
        if (isset($this->birthDate)) $o['birthDate'] = JsonConverters::to('DateTime', $this->birthDate);
        if (isset($this->birthPlace)) $o['birthPlace'] = $this->birthPlace;
        if (isset($this->tiNs)) $o['tiNs'] = JsonConverters::toArray('Dac6TIN', $this->tiNs);
        if (isset($this->address)) $o['address'] = JsonConverters::to('Dac6Address', $this->address);
        if (isset($this->emailAddress)) $o['emailAddress'] = $this->emailAddress;
        if (isset($this->resCountryCodes)) $o['resCountryCodes'] = JsonConverters::toArray('CountryCode', $this->resCountryCodes);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Stellt den Name der Organisation dar */
// @Api(Description="Stellt den Name der Organisation dar")
class Dac6NameOrganisation implements JsonSerializable
{
    public function __construct(
        /** @description Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur "DE" oder "EN" gewählt werden. */
        // @ApiMember(Description="Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur \"DE\" oder \"EN\" gewählt werden.", IsRequired=true, Name="Language")
        /** @var LanguageCode|null */
        public ?LanguageCode $language=null,

        /** @description Namenswert der Organisation */
        // @ApiMember(Description="Namenswert der Organisation", IsRequired=true, Name="Value")
        /** @var string */
        public string $value=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['language'])) $this->language = JsonConverters::from('LanguageCode', $o['language']);
        if (isset($o['value'])) $this->value = $o['value'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->language)) $o['language'] = JsonConverters::to('LanguageCode', $this->language);
        if (isset($this->value)) $o['value'] = $this->value;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Organisation */
// @Api(Description="Organisation")
class Dac6Organisation implements JsonSerializable
{
    public function __construct(
        /** @description Die Name der Organisation */
        // @ApiMember(Description="Die Name der Organisation", IsRequired=true, Name="OrganisationNames")
        /** @var array<Dac6NameOrganisation>|null */
        public ?array $organisationNames=null,

        /** @description Steueridentifikationsmerkmale */
        // @ApiMember(Description="Steueridentifikationsmerkmale", IsRequired=true, Name="TINs")
        /** @var array<Dac6TIN>|null */
        public ?array $tiNs=null,

        /** @description Adressangaben */
        // @ApiMember(Description="Adressangaben", IsRequired=true, Name="Address")
        /** @var Dac6Address|null */
        public ?Dac6Address $address=null,

        /** @description E-Mailadresse */
        // @ApiMember(Description="E-Mailadresse", Name="EmailAddress")
        /** @var string|null */
        public ?string $emailAddress=null,

        /** @description Ansässigkeitsstaaten */
        // @ApiMember(Description="Ansässigkeitsstaaten", IsRequired=true, Name="ResCountryCodes")
        /** @var array<CountryCode>|null */
        public ?array $resCountryCodes=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['organisationNames'])) $this->organisationNames = JsonConverters::fromArray('Dac6NameOrganisation', $o['organisationNames']);
        if (isset($o['tiNs'])) $this->tiNs = JsonConverters::fromArray('Dac6TIN', $o['tiNs']);
        if (isset($o['address'])) $this->address = JsonConverters::from('Dac6Address', $o['address']);
        if (isset($o['emailAddress'])) $this->emailAddress = $o['emailAddress'];
        if (isset($o['resCountryCodes'])) $this->resCountryCodes = JsonConverters::fromArray('CountryCode', $o['resCountryCodes']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->organisationNames)) $o['organisationNames'] = JsonConverters::toArray('Dac6NameOrganisation', $this->organisationNames);
        if (isset($this->tiNs)) $o['tiNs'] = JsonConverters::toArray('Dac6TIN', $this->tiNs);
        if (isset($this->address)) $o['address'] = JsonConverters::to('Dac6Address', $this->address);
        if (isset($this->emailAddress)) $o['emailAddress'] = $this->emailAddress;
        if (isset($this->resCountryCodes)) $o['resCountryCodes'] = JsonConverters::toArray('CountryCode', $this->resCountryCodes);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Entweder Angabe von Individual oder Angabe von Organisation */
// @Api(Description="Entweder Angabe von Individual oder Angabe von Organisation")
class Dac6PersonOrganisation implements JsonSerializable
{
    public function __construct(
        /** @description Natürliche Person Zwingend anzugeben, wenn PersonOrganisation keine Organisation ist. Die Folgeeintragungen sind abhängig von dieser Auswahl. */
        // @ApiMember(Description="Natürliche Person Zwingend anzugeben, wenn PersonOrganisation keine Organisation ist. Die Folgeeintragungen sind abhängig von dieser Auswahl.", IsRequired=true, Name="Individual")
        /** @var Dac6Person|null */
        public ?Dac6Person $individual=null,

        /** @description Organisation Zwingend anzugeben, PersonOrganisation keine Person ist. Die Folgeeintragungen sind abhängig von dieser Auswahl. */
        // @ApiMember(Description="Organisation Zwingend anzugeben, PersonOrganisation keine Person ist. Die Folgeeintragungen sind abhängig von dieser Auswahl.", IsRequired=true, Name="Individual")
        /** @var Dac6Organisation|null */
        public ?Dac6Organisation $organisation=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['individual'])) $this->individual = JsonConverters::from('Dac6Person', $o['individual']);
        if (isset($o['organisation'])) $this->organisation = JsonConverters::from('Dac6Organisation', $o['organisation']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->individual)) $o['individual'] = JsonConverters::to('Dac6Person', $this->individual);
        if (isset($this->organisation)) $o['organisation'] = JsonConverters::to('Dac6Organisation', $this->organisation);
        return empty($o) ? new class(){} : $o;
    }
}

enum Dac6IntermediaryNexus : string
{
    case INEXa = 'INEXa';
    case INEXb = 'INEXb';
    case INEXc = 'INEXc';
    case INEXd = 'INEXd';
}

enum Dac6IntermediaryCapacity : string
{
    case DAC61101 = 'DAC61101';
    case DAC61102 = 'DAC61102';
}

/** @description Meldepflichtiger Intermediär */
// @Api(Description="Meldepflichtiger Intermediär")
class Dac6IntermediaryDiscloser implements JsonSerializable
{
    public function __construct(
        /** @description Verbindung des Intermediärs zu Deutschland INEXa - Der Intermediär ist in Deutschland steuerlich ansässig. INEXb - Der Intermediär hat in Deutschland eine Betriebstätte, durch die die Dienstleistungen im Zusammenhang mit der grenzüberschreitenden Steuergestaltung erbracht werden. INEXc - Der Intermediär ist in Deutschland in das Handelsregister oder ein öffentliches berufsrechtliches Register eingetragen. INEXd - Der Intermediär ist in Deutschland bei einem Berufsverband für juristische, steuerliche oder beratende Dienstleistungen registriert */
        // @ApiMember(Description="Verbindung des Intermediärs zu Deutschland INEXa - Der Intermediär ist in Deutschland steuerlich ansässig. INEXb - Der Intermediär hat in Deutschland eine Betriebstätte, durch die die Dienstleistungen im Zusammenhang mit der grenzüberschreitenden Steuergestaltung erbracht werden. INEXc - Der Intermediär ist in Deutschland in das Handelsregister oder ein öffentliches berufsrechtliches Register eingetragen. INEXd - Der Intermediär ist in Deutschland bei einem Berufsverband für juristische, steuerliche oder beratende Dienstleistungen registriert", IsRequired=true, Name="IntermediaryNexus")
        /** @var Dac6IntermediaryNexus|null */
        public ?Dac6IntermediaryNexus $intermediaryNexus=null,

        /** @description Rolle des Intermediärs DAC61101 – Entwicklung / Vertrieb /Umsetzungsunterstützung DAC61102 – Dienstleister (organisierende / verwaltendeTätigkeit */
        // @ApiMember(Description="Rolle des Intermediärs DAC61101 – Entwicklung / Vertrieb /Umsetzungsunterstützung DAC61102 – Dienstleister (organisierende / verwaltendeTätigkeit", IsRequired=true, Name="IntermediaryNexus")
        /** @var Dac6IntermediaryCapacity|null */
        public ?Dac6IntermediaryCapacity $capacity=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['intermediaryNexus'])) $this->intermediaryNexus = JsonConverters::from('Dac6IntermediaryNexus', $o['intermediaryNexus']);
        if (isset($o['capacity'])) $this->capacity = JsonConverters::from('Dac6IntermediaryCapacity', $o['capacity']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->intermediaryNexus)) $o['intermediaryNexus'] = JsonConverters::to('Dac6IntermediaryNexus', $this->intermediaryNexus);
        if (isset($this->capacity)) $o['capacity'] = JsonConverters::to('Dac6IntermediaryCapacity', $this->capacity);
        return empty($o) ? new class(){} : $o;
    }
}

enum Dac6RelevantTaxpayerNexus : string
{
    case RTNEXa = 'RTNEXa';
    case RTNEXb = 'RTNEXb';
    case RTNEXc = 'RTNEXc';
    case RTNEXd = 'RTNEXd';
}

enum Dac6TaxpayerCapacity : string
{
    case DAC61104 = 'DAC61104';
    case DAC61105 = 'DAC61105';
    case DAC61106 = 'DAC61106';
}

/** @description Meldepflichtiger Nutzer */
// @Api(Description="Meldepflichtiger Nutzer")
class Dac6RelevantTaxpayerDiscloser implements JsonSerializable
{
    public function __construct(
        /** @description Verbindung des Intermediärs zu Deutschland RTNEXa - Der Nutzer ist in Deutschland steuerlich ansässig. RTNEXb - Der Nutzer hat in Deutschland eine Betriebstätte, der durch die grenzüberschreitende Gestaltung ein Vorteilentsteht. RTNEXc - Der Nutzer erzielt Einkünfte oder Gewinne in Deutschland, obwohl er in keinem Mitgliedstaat steuerlichansässig ist oder eine Betriebstätte hat. RTNEXd - Der Nutzer übt in Deutschland eine Tätigkeit aus obwohl er in keinem Mitgliedstaat ansässig ist oder eine Betriebstätte hat. */
        // @ApiMember(Description="Verbindung des Intermediärs zu Deutschland RTNEXa - Der Nutzer ist in Deutschland steuerlich ansässig. RTNEXb - Der Nutzer hat in Deutschland eine Betriebstätte, der durch die grenzüberschreitende Gestaltung ein Vorteilentsteht. RTNEXc - Der Nutzer erzielt Einkünfte oder Gewinne in Deutschland, obwohl er in keinem Mitgliedstaat steuerlichansässig ist oder eine Betriebstätte hat. RTNEXd - Der Nutzer übt in Deutschland eine Tätigkeit aus obwohl er in keinem Mitgliedstaat ansässig ist oder eine Betriebstätte hat.", IsRequired=true, Name="RelevantTaxpayerNexus")
        /** @var Dac6RelevantTaxpayerNexus|null */
        public ?Dac6RelevantTaxpayerNexus $relevantTaxpayerNexus=null,

        /** @description Rolle des Intermediärs DAC61104 - Verschwiegenheitspflicht des Intermediärs DAC61105 - Intermediär aus Nicht-EU-Staat DAC61106 - Selbst konzipierte Gestaltung */
        // @ApiMember(Description="Rolle des Intermediärs DAC61104 - Verschwiegenheitspflicht des Intermediärs DAC61105 - Intermediär aus Nicht-EU-Staat DAC61106 - Selbst konzipierte Gestaltung", IsRequired=true, Name="Capacity")
        /** @var Dac6TaxpayerCapacity|null */
        public ?Dac6TaxpayerCapacity $capacity=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['relevantTaxpayerNexus'])) $this->relevantTaxpayerNexus = JsonConverters::from('Dac6RelevantTaxpayerNexus', $o['relevantTaxpayerNexus']);
        if (isset($o['capacity'])) $this->capacity = JsonConverters::from('Dac6TaxpayerCapacity', $o['capacity']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->relevantTaxpayerNexus)) $o['relevantTaxpayerNexus'] = JsonConverters::to('Dac6RelevantTaxpayerNexus', $this->relevantTaxpayerNexus);
        if (isset($this->capacity)) $o['capacity'] = JsonConverters::to('Dac6TaxpayerCapacity', $this->capacity);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angabe der Verbindung des Intermediärs zu Deutschland und des Meldegrunds. Die Angaben zum Meldepflichtigen sind durch eine Geschäftsregel verpflichtend vorzunehmen. */
// @Api(Description="Angabe der Verbindung des Intermediärs zu Deutschland und des Meldegrunds. Die Angaben zum Meldepflichtigen sind durch eine Geschäftsregel verpflichtend vorzunehmen.")
class Dac6Liability implements JsonSerializable
{
    public function __construct(
        /** @description Meldepflichtiger Intermediär Dieses Feld ist verpflichtend anzugeben, wenn Liability kein RelevantTaxpayerDiscloser ist. */
        // @ApiMember(Description="Meldepflichtiger Intermediär Dieses Feld ist verpflichtend anzugeben, wenn Liability kein RelevantTaxpayerDiscloser ist.", IsRequired=true, Name="IntermediaryDiscloser")
        /** @var Dac6IntermediaryDiscloser|null */
        public ?Dac6IntermediaryDiscloser $intermediaryDiscloser=null,

        /** @description Meldepflichtiger Nutzer Dieses Feld ist verpflichtend anzugeben, wenn Liability kein IntermediaryDiscloser ist. */
        // @ApiMember(Description="Meldepflichtiger Nutzer Dieses Feld ist verpflichtend anzugeben, wenn Liability kein IntermediaryDiscloser ist.", IsRequired=true, Name="RelevantTaxpayerDiscloser")
        /** @var Dac6RelevantTaxpayerDiscloser|null */
        public ?Dac6RelevantTaxpayerDiscloser $relevantTaxpayerDiscloser=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['intermediaryDiscloser'])) $this->intermediaryDiscloser = JsonConverters::from('Dac6IntermediaryDiscloser', $o['intermediaryDiscloser']);
        if (isset($o['relevantTaxpayerDiscloser'])) $this->relevantTaxpayerDiscloser = JsonConverters::from('Dac6RelevantTaxpayerDiscloser', $o['relevantTaxpayerDiscloser']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->intermediaryDiscloser)) $o['intermediaryDiscloser'] = JsonConverters::to('Dac6IntermediaryDiscloser', $this->intermediaryDiscloser);
        if (isset($this->relevantTaxpayerDiscloser)) $o['relevantTaxpayerDiscloser'] = JsonConverters::to('Dac6RelevantTaxpayerDiscloser', $this->relevantTaxpayerDiscloser);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angaben zum Meldepflichtigen */
// @Api(Description="Angaben zum Meldepflichtigen")
class Dac6Discloser implements JsonSerializable
{
    public function __construct(
        /** @description Identifikationsdaten zum Meldepflichtigen */
        // @ApiMember(Description="Identifikationsdaten zum Meldepflichtigen", IsRequired=true, Name="ID")
        /** @var Dac6PersonOrganisation|null */
        public ?Dac6PersonOrganisation $id=null,

        /** @description Meldepflichtiger Angabe der Verbindung des Intermediärs zu Deutschland und des Meldegrunds. Die Angaben zum Meldepflichtigen sind durch eine Geschäftsregel verpflichtend vorzunehmen. */
        // @ApiMember(Description="Meldepflichtiger Angabe der Verbindung des Intermediärs zu Deutschland und des Meldegrunds. Die Angaben zum Meldepflichtigen sind durch eine Geschäftsregel verpflichtend vorzunehmen.", Name="Liability")
        /** @var Dac6Liability|null */
        public ?Dac6Liability $liability=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = JsonConverters::from('Dac6PersonOrganisation', $o['id']);
        if (isset($o['liability'])) $this->liability = JsonConverters::from('Dac6Liability', $o['liability']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = JsonConverters::to('Dac6PersonOrganisation', $this->id);
        if (isset($this->liability)) $o['liability'] = JsonConverters::to('Dac6Liability', $this->liability);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angabe aller bekannten Nutzer */
class Dac6RelevantTaxPayers implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angabe zum jeweiligen Intermediär */
class Dac6Intermediaries implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angaben zu allen in einem Mitgliedstaat der Europäischen Union ansässigen Personen,die von der grenzüberschreitenden Steuergestaltung wahrscheinlich unmittelbar betroffen sind,einschließlich Angaben darüber, zu welchen Mitgliedstaaten der Europäischen Union sie in Beziehung stehen. */
class Dac6AffectedPersons implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        return empty($o) ? new class(){} : $o;
    }
}

enum Dac6DisclosurerReason : string
{
    case DAC6701 = 'DAC6701';
    case DAC6702 = 'DAC6702';
    case DAC6703 = 'DAC6703';
}

/** @description Beschreibung der Gestaltung */
// @Api(Description="Beschreibung der Gestaltung")
class Dac6Disclosure_Description implements JsonSerializable
{
    public function __construct(
        /** @description Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur "DE" oder "EN" gewählt werden. */
        // @ApiMember(Description="Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur \"DE\" oder \"EN\" gewählt werden.", IsRequired=true, Name="Language")
        /** @var LanguageCode|null */
        public ?LanguageCode $language=null,

        /** @description Beschreibung */
        // @ApiMember(Description="Beschreibung", IsRequired=true, Name="Value")
        /** @var string */
        public string $value=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['language'])) $this->language = JsonConverters::from('LanguageCode', $o['language']);
        if (isset($o['value'])) $this->value = $o['value'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->language)) $o['language'] = JsonConverters::to('LanguageCode', $this->language);
        if (isset($this->value)) $o['value'] = $this->value;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Zusammenfassung der Gestaltung Angabe der Beschreibung und der Bezeichnung der Gestaltung */
// @Api(Description="Zusammenfassung der Gestaltung Angabe der Beschreibung und der Bezeichnung der Gestaltung")
class Dac6Summary implements JsonSerializable
{
    public function __construct(
        /** @description Name der Gestaltung */
        // @ApiMember(Description="Name der Gestaltung", IsRequired=true, Name="Disclosure_Name")
        /** @var string */
        public string $disclosure_Name='',

        /** @description Beschreibung der Gestaltung Zusammenfassung des Inhalts der grenzüberschreitendenSteuergestaltung einschließlich einer abstrakt gehaltenenBeschreibung der relevanten Geschäftstätigkeit oder Gestaltung des Nutzers, soweit dies nicht zur Offenlegung eines Handels-, Gewerbe- oder Berufsgeheimnisses odereines Geschäftsverfahrens oder von Informationen führt, deren Offenlegung die öffentliche Ordnung verletzen würde. */
        // @ApiMember(Description="Beschreibung der Gestaltung Zusammenfassung des Inhalts der grenzüberschreitendenSteuergestaltung einschließlich einer abstrakt gehaltenenBeschreibung der relevanten Geschäftstätigkeit oder Gestaltung des Nutzers, soweit dies nicht zur Offenlegung eines Handels-, Gewerbe- oder Berufsgeheimnisses odereines Geschäftsverfahrens oder von Informationen führt, deren Offenlegung die öffentliche Ordnung verletzen würde.", IsRequired=true, Name="Disclosure_Descriptions")
        /** @var array<Dac6Disclosure_Description>|null */
        public ?array $disclosure_Descriptions=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['disclosure_Name'])) $this->disclosure_Name = $o['disclosure_Name'];
        if (isset($o['disclosure_Descriptions'])) $this->disclosure_Descriptions = JsonConverters::fromArray('Dac6Disclosure_Description', $o['disclosure_Descriptions']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->disclosure_Name)) $o['disclosure_Name'] = $this->disclosure_Name;
        if (isset($this->disclosure_Descriptions)) $o['disclosure_Descriptions'] = JsonConverters::toArray('Dac6Disclosure_Description', $this->disclosure_Descriptions);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angabe der Rechtsvorschrift */
// @Api(Description="Angabe der Rechtsvorschrift")
class Dac6Text implements JsonSerializable
{
    public function __construct(
        /** @description Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur "DE" oder "EN" gewählt werden. */
        // @ApiMember(Description="Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur \"DE\" oder \"EN\" gewählt werden.", IsRequired=true, Name="Language")
        /** @var LanguageCode|null */
        public ?LanguageCode $language=null,

        /** @description Beschreibung */
        // @ApiMember(Description="Beschreibung", IsRequired=true, Name="Value")
        /** @var string */
        public string $value=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['language'])) $this->language = JsonConverters::from('LanguageCode', $o['language']);
        if (isset($o['value'])) $this->value = $o['value'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->language)) $o['language'] = JsonConverters::to('LanguageCode', $this->language);
        if (isset($this->value)) $o['value'] = $this->value;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Rechtsvorschrift */
// @Api(Description="Rechtsvorschrift")
class Dac6NationalProvision implements JsonSerializable
{
    public function __construct(
        /** @description Angabe der Rechtsvorschrift */
        // @ApiMember(Description="Angabe der Rechtsvorschrift", IsRequired=true, Name="Texts")
        /** @var array<Dac6Text>|null */
        public ?array $texts=null,

        /** @description Staat zur Rechtsvorschrift Angabe des Staates, der die angegebene Rechtsvorschrift erlassen hat. */
        // @ApiMember(Description="Staat zur Rechtsvorschrift Angabe des Staates, der die angegebene Rechtsvorschrift erlassen hat.", IsRequired=true, Name="Country")
        /** @var CountryCode|null */
        public ?CountryCode $country=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['texts'])) $this->texts = JsonConverters::fromArray('Dac6Text', $o['texts']);
        if (isset($o['country'])) $this->country = JsonConverters::from('CountryCode', $o['country']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->texts)) $o['texts'] = JsonConverters::toArray('Dac6Text', $this->texts);
        if (isset($this->country)) $o['country'] = JsonConverters::to('CountryCode', $this->country);
        return empty($o) ? new class(){} : $o;
    }
}

enum CurrencyCode : string
{
    case AED = 'AED';
    case AFN = 'AFN';
    case ALL = 'ALL';
    case AMD = 'AMD';
    case ANG = 'ANG';
    case AOA = 'AOA';
    case ARS = 'ARS';
    case AUD = 'AUD';
    case AWG = 'AWG';
    case AZN = 'AZN';
    case BAM = 'BAM';
    case BBD = 'BBD';
    case BDT = 'BDT';
    case BGN = 'BGN';
    case BHD = 'BHD';
    case BIF = 'BIF';
    case BMD = 'BMD';
    case BND = 'BND';
    case BOB = 'BOB';
    case BOV = 'BOV';
    case BRL = 'BRL';
    case BSD = 'BSD';
    case BTN = 'BTN';
    case BWP = 'BWP';
    case BYN = 'BYN';
    case BZD = 'BZD';
    case CAD = 'CAD';
    case CDF = 'CDF';
    case CHE = 'CHE';
    case CHF = 'CHF';
    case CHW = 'CHW';
    case CLF = 'CLF';
    case CLP = 'CLP';
    case CNY = 'CNY';
    case COP = 'COP';
    case COU = 'COU';
    case CRC = 'CRC';
    case CUC = 'CUC';
    case CUP = 'CUP';
    case CVE = 'CVE';
    case CZK = 'CZK';
    case DJF = 'DJF';
    case DKK = 'DKK';
    case DOP = 'DOP';
    case DZD = 'DZD';
    case EGP = 'EGP';
    case ERN = 'ERN';
    case ETB = 'ETB';
    case EUR = 'EUR';
    case FJD = 'FJD';
    case FKP = 'FKP';
    case GBP = 'GBP';
    case GEL = 'GEL';
    case GHS = 'GHS';
    case GIP = 'GIP';
    case GMD = 'GMD';
    case GNF = 'GNF';
    case GTQ = 'GTQ';
    case GYD = 'GYD';
    case HKD = 'HKD';
    case HNL = 'HNL';
    case HRK = 'HRK';
    case HTG = 'HTG';
    case HUF = 'HUF';
    case IDR = 'IDR';
    case ILS = 'ILS';
    case INR = 'INR';
    case IQD = 'IQD';
    case IRR = 'IRR';
    case ISK = 'ISK';
    case JMD = 'JMD';
    case JOD = 'JOD';
    case JPY = 'JPY';
    case KES = 'KES';
    case KGS = 'KGS';
    case KHR = 'KHR';
    case KMF = 'KMF';
    case KPW = 'KPW';
    case KRW = 'KRW';
    case KWD = 'KWD';
    case KYD = 'KYD';
    case KZT = 'KZT';
    case LAK = 'LAK';
    case LBP = 'LBP';
    case LKR = 'LKR';
    case LRD = 'LRD';
    case LSL = 'LSL';
    case LYD = 'LYD';
    case MAD = 'MAD';
    case MDL = 'MDL';
    case MGA = 'MGA';
    case MKD = 'MKD';
    case MMK = 'MMK';
    case MNT = 'MNT';
    case MOP = 'MOP';
    case MRU = 'MRU';
    case MUR = 'MUR';
    case MVR = 'MVR';
    case MWK = 'MWK';
    case MXN = 'MXN';
    case MXV = 'MXV';
    case MYR = 'MYR';
    case MZN = 'MZN';
    case NAD = 'NAD';
    case NGN = 'NGN';
    case NIO = 'NIO';
    case NOK = 'NOK';
    case NPR = 'NPR';
    case NZD = 'NZD';
    case OMR = 'OMR';
    case PAB = 'PAB';
    case PEN = 'PEN';
    case PGK = 'PGK';
    case PHP = 'PHP';
    case PKR = 'PKR';
    case PLN = 'PLN';
    case PYG = 'PYG';
    case QAR = 'QAR';
    case RON = 'RON';
    case RSD = 'RSD';
    case RUB = 'RUB';
    case RWF = 'RWF';
    case SAR = 'SAR';
    case SBD = 'SBD';
    case SCR = 'SCR';
    case SDG = 'SDG';
    case SEK = 'SEK';
    case SGD = 'SGD';
    case SHP = 'SHP';
    case SLL = 'SLL';
    case SOS = 'SOS';
    case SRD = 'SRD';
    case SSP = 'SSP';
    case STN = 'STN';
    case SVC = 'SVC';
    case SYP = 'SYP';
    case SZL = 'SZL';
    case THB = 'THB';
    case TJS = 'TJS';
    case TMT = 'TMT';
    case TND = 'TND';
    case TOP = 'TOP';
    case TRY = 'TRY';
    case TTD = 'TTD';
    case TWD = 'TWD';
    case TZS = 'TZS';
    case UAH = 'UAH';
    case UGX = 'UGX';
    case USD = 'USD';
    case USN = 'USN';
    case UYI = 'UYI';
    case UYU = 'UYU';
    case UYW = 'UYW';
    case UZS = 'UZS';
    case VES = 'VES';
    case VND = 'VND';
    case VUV = 'VUV';
    case WST = 'WST';
    case XAF = 'XAF';
    case XAG = 'XAG';
    case XAU = 'XAU';
    case XBA = 'XBA';
    case XBB = 'XBB';
    case XBC = 'XBC';
    case XBD = 'XBD';
    case XCD = 'XCD';
    case XDR = 'XDR';
    case XOF = 'XOF';
    case XPD = 'XPD';
    case XPF = 'XPF';
    case XPT = 'XPT';
    case XSU = 'XSU';
    case XUA = 'XUA';
    case XXX = 'XXX';
    case YER = 'YER';
    case ZAR = 'ZAR';
    case ZMW = 'ZMW';
    case ZWL = 'ZWL';
}

/** @description Angabe des tatsächlichen oder voraussichtlichen wirtschaftlichen Werts der grenzüberschreitenden Steuergestaltung. */
// @Api(Description="Angabe des tatsächlichen oder voraussichtlichen wirtschaftlichen Werts der grenzüberschreitenden Steuergestaltung.")
class Dac6Amount implements JsonSerializable
{
    public function __construct(
        /** @description WährungAngabe des ISO-Währungscodes der Währung, in dem der Wert angegeben wurde. */
        // @ApiMember(Description="WährungAngabe des ISO-Währungscodes der Währung, in dem der Wert angegeben wurde.", IsRequired=true, Name="CurrCode")
        /** @var CurrencyCode|null */
        public ?CurrencyCode $currCode=null,

        /** @description Wirtschaftlicher Wert der Gestaltung */
        // @ApiMember(Description="Wirtschaftlicher Wert der Gestaltung", IsRequired=true, Name="Value")
        /** @var int */
        public int $value=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['currCode'])) $this->currCode = JsonConverters::from('CurrencyCode', $o['currCode']);
        if (isset($o['value'])) $this->value = $o['value'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->currCode)) $o['currCode'] = JsonConverters::to('CurrencyCode', $this->currCode);
        if (isset($this->value)) $o['value'] = $this->value;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Beteiligungsangaben Angabe der Rechts- und Vertragsbeziehungen zwischen den Unternehmen/natürlichen Personen. Darüber hinaus ist auch eine Angabe z.B. des Cash Flows oder die Verbindung derbeiden (z.B. Beteiligter o.Ä.) möglich. */
// @Api(Description="Beteiligungsangaben Angabe der Rechts- und Vertragsbeziehungen zwischen den Unternehmen/natürlichen Personen. Darüber hinaus ist auch eine Angabe z.B. des Cash Flows oder die Verbindung derbeiden (z.B. Beteiligter o.Ä.) möglich.")
class Dac6OtherInfo implements JsonSerializable
{
    public function __construct(
        /** @description Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur "DE" oder "EN" gewählt werden. */
        // @ApiMember(Description="Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur \"DE\" oder \"EN\" gewählt werden.", IsRequired=true, Name="Language")
        /** @var LanguageCode|null */
        public ?LanguageCode $language=null,

        /** @description Beschreibung */
        // @ApiMember(Description="Beschreibung", IsRequired=true, Name="Value")
        /** @var string */
        public string $value=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['language'])) $this->language = JsonConverters::from('LanguageCode', $o['language']);
        if (isset($o['value'])) $this->value = $o['value'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->language)) $o['language'] = JsonConverters::to('LanguageCode', $this->language);
        if (isset($this->value)) $o['value'] = $this->value;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Nächste Ebene Erfassung einer weiteren Ebene im Unternehmenschart */
class Dac6ListChilds implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Unternehmensstruktur Erstellung eines Unternehmenscharts über mehrere Ebenen.Durch die Erfassung einer/s Muttergesellschaft/er und die jeweiligen Untergesellschaften/er ist somit der Aufbau eines Unternehmschart möglich. */
// @Api(Description="Unternehmensstruktur Erstellung eines Unternehmenscharts über mehrere Ebenen.Durch die Erfassung einer/s Muttergesellschaft/er und die jeweiligen Untergesellschaften/er ist somit der Aufbau eines Unternehmschart möglich.")
class Dac6ArrangementChart implements JsonSerializable
{
    public function __construct(
        /** @description Identifikationsdaten */
        // @ApiMember(Description="Identifikationsdaten", IsRequired=true, Name="ID")
        /** @var Dac6PersonOrganisation|null */
        public ?Dac6PersonOrganisation $id=null,

        /** @description Die Beteiligungshöhe in Prozent Angabe der Beteiligungshöhe in Prozent. Der angegebene Wert muss mindestens 0 und darf maximal 100 sein. */
        // @ApiMember(Description="Die Beteiligungshöhe in Prozent Angabe der Beteiligungshöhe in Prozent. Der angegebene Wert muss mindestens 0 und darf maximal 100 sein.", Name="ID")
        /** @var int|null */
        public ?int $ownership=null,

        /** @description Die wertmäßige Beteiligungshöhe */
        // @ApiMember(Description="Die wertmäßige Beteiligungshöhe", Name="InvestAmount")
        /** @var Dac6Amount|null */
        public ?Dac6Amount $investAmount=null,

        /** @description Beteiligungsangaben */
        // @ApiMember(Description="Beteiligungsangaben", Name="OtherInfos")
        /** @var array<Dac6OtherInfo>|null */
        public ?array $otherInfos=null,

        /** @description Nächste Ebene Erfassung einer weiteren Ebene im Unternehmenschart */
        // @ApiMember(Description="Nächste Ebene Erfassung einer weiteren Ebene im Unternehmenschart", Name="ListChilds")
        /** @var Dac6ListChilds|null */
        public ?Dac6ListChilds $listChilds=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = JsonConverters::from('Dac6PersonOrganisation', $o['id']);
        if (isset($o['ownership'])) $this->ownership = $o['ownership'];
        if (isset($o['investAmount'])) $this->investAmount = JsonConverters::from('Dac6Amount', $o['investAmount']);
        if (isset($o['otherInfos'])) $this->otherInfos = JsonConverters::fromArray('Dac6OtherInfo', $o['otherInfos']);
        if (isset($o['listChilds'])) $this->listChilds = JsonConverters::from('Dac6ListChilds', $o['listChilds']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = JsonConverters::to('Dac6PersonOrganisation', $this->id);
        if (isset($this->ownership)) $o['ownership'] = $this->ownership;
        if (isset($this->investAmount)) $o['investAmount'] = JsonConverters::to('Dac6Amount', $this->investAmount);
        if (isset($this->otherInfos)) $o['otherInfos'] = JsonConverters::toArray('Dac6OtherInfo', $this->otherInfos);
        if (isset($this->listChilds)) $o['listChilds'] = JsonConverters::to('Dac6ListChilds', $this->listChilds);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Liste der betroffenen Mitgliedstaaten Angabe der Mitgliedstaaten der Europäischen Union, die wahrscheinlich von der grenzüberschreitenden Steuergestaltung betroffen sind. */
class Dac6ConcernedMSs implements JsonSerializable
{
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        return empty($o) ? new class(){} : $o;
    }
}

enum Dac6Hallmark : string
{
    case DAC6A1 = 'DAC6A1';
    case DAC6A2a = 'DAC6A2a';
    case DAC6A2b = 'DAC6A2b';
    case DAC6A3 = 'DAC6A3';
    case DAC6B1 = 'DAC6B1';
    case DAC6B2 = 'DAC6B2';
    case DAC6B3 = 'DAC6B3';
    case DAC6C1a = 'DAC6C1a';
    case DAC6C1bi = 'DAC6C1bi';
    case DAC6C1bii = 'DAC6C1bii';
    case DAC6C1c = 'DAC6C1c';
    case DAC6C1d = 'DAC6C1d';
    case DAC6C2 = 'DAC6C2';
    case DAC6C3 = 'DAC6C3';
    case DAC6C4 = 'DAC6C4';
    case DAC6D1Other = 'DAC6D1Other';
    case DAC6D1a = 'DAC6D1a';
    case DAC6D1b = 'DAC6D1b';
    case DAC6D1c = 'DAC6D1c';
    case DAC6D1d = 'DAC6D1d';
    case DAC6D1e = 'DAC6D1e';
    case DAC6D1f = 'DAC6D1f';
    case DAC6D2 = 'DAC6D2';
    case DAC6E1 = 'DAC6E1';
    case DAC6E2 = 'DAC6E2';
    case DAC6E3 = 'DAC6E3';
}

/** @description Angabe der Kennzeiche Angabe der Einzelheiten zu den nach § 138e zur Mitteilung verpflichtenden Kennzeichen */
// @Api(Description="Angabe der Kennzeiche Angabe der Einzelheiten zu den nach § 138e zur Mitteilung verpflichtenden Kennzeichen")
class Dac6ListHallmarks implements JsonSerializable
{
    public function __construct(
        /** @description Betroffene Kennzeichen */
        // @ApiMember(Description="Betroffene Kennzeichen", IsRequired=true, Name="Hallmarks")
        /** @var array<Dac6Hallmark>|null */
        public ?array $hallmarks=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['hallmarks'])) $this->hallmarks = JsonConverters::fromArray('Dac6Hallmark', $o['hallmarks']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->hallmarks)) $o['hallmarks'] = JsonConverters::toArray('Dac6Hallmark', $this->hallmarks);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Beschreibung des Kennzeichens Bei Auswahl des Kennzeichens "DAC6D1Other" muss über das freie Textfeld "OtherInfo" eine nähere Beschreibung des Kennzeichens erfolgen. Die beiden Elemente dürfen ausschließlich in Verbindung angegeben werden. */
// @Api(Description="Beschreibung des Kennzeichens Bei Auswahl des Kennzeichens \"DAC6D1Other\" muss über das freie Textfeld \"OtherInfo\" eine nähere Beschreibung des Kennzeichens erfolgen. Die beiden Elemente dürfen ausschließlich in Verbindung angegeben werden.")
class DAC6D1OtherInfo implements JsonSerializable
{
    public function __construct(
        /** @description Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur "DE" oder "EN" gewählt werden. */
        // @ApiMember(Description="Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt.Hier kann nur \"DE\" oder \"EN\" gewählt werden.", IsRequired=true, Name="Language")
        /** @var LanguageCode|null */
        public ?LanguageCode $language=null,

        /** @description Beschreibung */
        // @ApiMember(Description="Beschreibung", IsRequired=true, Name="Value")
        /** @var string */
        public string $value=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['language'])) $this->language = JsonConverters::from('LanguageCode', $o['language']);
        if (isset($o['value'])) $this->value = $o['value'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->language)) $o['language'] = JsonConverters::to('LanguageCode', $this->language);
        if (isset($this->value)) $o['value'] = $this->value;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Liste der Kennzeichen Auswahl der Kennzeichen der meldepflichtigen Gestaltung. Bestimmte Kennzeichen können nur ausgewählt werden, wenn der MainBenefitTest1 mit „true“ angegeben wird. Zusätzlich kann hier beim Kennzeichen "DAC6D1Other" über ein Freitextfeld eine Beschreibung des zusätzlichen */
// @Api(Description="Liste der Kennzeichen Auswahl der Kennzeichen der meldepflichtigen Gestaltung. Bestimmte Kennzeichen können nur ausgewählt werden, wenn der MainBenefitTest1 mit „true“ angegeben wird. Zusätzlich kann hier beim Kennzeichen \"DAC6D1Other\" über ein Freitextfeld eine Beschreibung des zusätzlichen")
class Dac6Hallmarks implements JsonSerializable
{
    public function __construct(
        /** @description Angabe der Kennzeichen */
        // @ApiMember(Description="Angabe der Kennzeichen", IsRequired=true, Name="ListHallmarks")
        /** @var Dac6ListHallmarks|null */
        public ?Dac6ListHallmarks $listHallmarks=null,

        /** @description Beschreibung des Kennzeichens */
        // @ApiMember(Description="Beschreibung des Kennzeichens", IsRequired=true, Name="DAC6D1OtherInfos")
        /** @var array<DAC6D1OtherInfo>|null */
        public ?array $daC6D1OtherInfos=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['listHallmarks'])) $this->listHallmarks = JsonConverters::from('Dac6ListHallmarks', $o['listHallmarks']);
        if (isset($o['daC6D1OtherInfos'])) $this->daC6D1OtherInfos = JsonConverters::fromArray('DAC6D1OtherInfo', $o['daC6D1OtherInfos']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->listHallmarks)) $o['listHallmarks'] = JsonConverters::to('Dac6ListHallmarks', $this->listHallmarks);
        if (isset($this->daC6D1OtherInfos)) $o['daC6D1OtherInfos'] = JsonConverters::toArray('DAC6D1OtherInfo', $this->daC6D1OtherInfos);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angabe der Informationen zur Steuergestaltung */
// @Api(Description="Angabe der Informationen zur Steuergestaltung")
class Dac6DisclosureInformation implements JsonSerializable
{
    public function __construct(
        /** @description Datum der Umsetzung Format: YYYY-MM-DD Angabe des Datums, an dem der erste Schritt in der Umsetzung der mitteilungspflichtigen Gestaltung gemacht wurde oder wird. */
        // @ApiMember(Description="Datum der Umsetzung Format: YYYY-MM-DD Angabe des Datums, an dem der erste Schritt in der Umsetzung der mitteilungspflichtigen Gestaltung gemacht wurde oder wird.", Name="ImplementingDate")
        /** @var DateTime|null */
        public ?DateTime $implementingDate=null,

        /** @description Stand der Gestaltung DAC6701 – Die grenzüberschreitende Steuergestaltung wird zur Umsetzung bereitgestellt. DAC6702 – Der Nutzer ist zur Umsetzung der grenzüberschreitenden Steuergestaltung bereit. DAC6703 – Mindestens ein Nutzer hat den ersten Schritt der Umsetzung der grenzüberschreitenden Steuergestaltung */
        // @ApiMember(Description="Stand der Gestaltung DAC6701 – Die grenzüberschreitende Steuergestaltung wird zur Umsetzung bereitgestellt. DAC6702 – Der Nutzer ist zur Umsetzung der grenzüberschreitenden Steuergestaltung bereit. DAC6703 – Mindestens ein Nutzer hat den ersten Schritt der Umsetzung der grenzüberschreitenden Steuergestaltung", Name="Reason")
        /** @var Dac6DisclosurerReason|null */
        public ?Dac6DisclosurerReason $reason=null,

        /** @description Zusammenfassung der Gestaltung Angabe der Beschreibung und der Bezeichnung der Gestaltung. */
        // @ApiMember(Description="Zusammenfassung der Gestaltung Angabe der Beschreibung und der Bezeichnung der Gestaltung.", Name="Summary")
        /** @var Dac6Summary|null */
        public ?Dac6Summary $summary=null,

        /** @description Rechtsvorschrift */
        // @ApiMember(Description="Rechtsvorschrift", Name="NationalProvision")
        /** @var Dac6NationalProvision|null */
        public ?Dac6NationalProvision $nationalProvision=null,

        /** @description Angabe des tatsächlichen oder voraussichtlichen wirtschaftlichen Werts der grenzüberschreitenden Steuergestaltung. */
        // @ApiMember(Description="Angabe des tatsächlichen oder voraussichtlichen wirtschaftlichen Werts der grenzüberschreitenden Steuergestaltung.", Name="Amount")
        /** @var Dac6Amount|null */
        public ?Dac6Amount $amount=null,

        /** @description Unternehmensstruktur Erstellung eines Unternehmenscharts über mehrere Ebenen. Durch die Erfassung einer/s Muttergesellschaft/er und die jeweiligen Untergesellschaften/er ist somit der Aufbau eines Unternehmschart möglich. */
        // @ApiMember(Description="Unternehmensstruktur Erstellung eines Unternehmenscharts über mehrere Ebenen. Durch die Erfassung einer/s Muttergesellschaft/er und die jeweiligen Untergesellschaften/er ist somit der Aufbau eines Unternehmschart möglich.", Name="NationalProvision")
        /** @var Dac6ArrangementChart|null */
        public ?Dac6ArrangementChart $arrangementChart=null,

        /** @description Betroffenen Mitgliedstaaten */
        // @ApiMember(Description="Betroffenen Mitgliedstaaten", Name="ConcernedMSs")
        /** @var Dac6ConcernedMSs|null */
        public ?Dac6ConcernedMSs $concernedMSs=null,

        /** @description Steuerlicher Vorteil Angabe, ob ein steuerlicher Vorteil vorliegt oder nicht. true: ein steuerlicher Vorteil vorliegt false: ein steuerlicher Vorteil vorliegt nicht. */
        // @ApiMember(Description="Steuerlicher Vorteil Angabe, ob ein steuerlicher Vorteil vorliegt oder nicht. true: ein steuerlicher Vorteil vorliegt false: ein steuerlicher Vorteil vorliegt nicht.", Name="MainBenefitTest1")
        /** @var bool|null */
        public ?bool $mainBenefitTest1=null,

        /** @description Liste der Kennzeichen Auswahl der Kennzeichen der meldepflichtigen Gestaltung.Bestimmte Kennzeichen können nur ausgewählt werden, wenn der MainBenefitTest1 mit „true“ angegeben wird.Zusätzlich kann hier beim Kennzeichen "DAC6D1Other" überein Freitextfeld eine Beschreibung des zusätzlichen */
        // @ApiMember(Description="Liste der Kennzeichen Auswahl der Kennzeichen der meldepflichtigen Gestaltung.Bestimmte Kennzeichen können nur ausgewählt werden, wenn der MainBenefitTest1 mit „true“ angegeben wird.Zusätzlich kann hier beim Kennzeichen \"DAC6D1Other\" überein Freitextfeld eine Beschreibung des zusätzlichen", Name="Hallmarks")
        /** @var Dac6Hallmarks|null */
        public ?Dac6Hallmarks $hallmarks=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['implementingDate'])) $this->implementingDate = JsonConverters::from('DateTime', $o['implementingDate']);
        if (isset($o['reason'])) $this->reason = JsonConverters::from('Dac6DisclosurerReason', $o['reason']);
        if (isset($o['summary'])) $this->summary = JsonConverters::from('Dac6Summary', $o['summary']);
        if (isset($o['nationalProvision'])) $this->nationalProvision = JsonConverters::from('Dac6NationalProvision', $o['nationalProvision']);
        if (isset($o['amount'])) $this->amount = JsonConverters::from('Dac6Amount', $o['amount']);
        if (isset($o['arrangementChart'])) $this->arrangementChart = JsonConverters::from('Dac6ArrangementChart', $o['arrangementChart']);
        if (isset($o['concernedMSs'])) $this->concernedMSs = JsonConverters::from('Dac6ConcernedMSs', $o['concernedMSs']);
        if (isset($o['mainBenefitTest1'])) $this->mainBenefitTest1 = $o['mainBenefitTest1'];
        if (isset($o['hallmarks'])) $this->hallmarks = JsonConverters::from('Dac6Hallmarks', $o['hallmarks']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->implementingDate)) $o['implementingDate'] = JsonConverters::to('DateTime', $this->implementingDate);
        if (isset($this->reason)) $o['reason'] = JsonConverters::to('Dac6DisclosurerReason', $this->reason);
        if (isset($this->summary)) $o['summary'] = JsonConverters::to('Dac6Summary', $this->summary);
        if (isset($this->nationalProvision)) $o['nationalProvision'] = JsonConverters::to('Dac6NationalProvision', $this->nationalProvision);
        if (isset($this->amount)) $o['amount'] = JsonConverters::to('Dac6Amount', $this->amount);
        if (isset($this->arrangementChart)) $o['arrangementChart'] = JsonConverters::to('Dac6ArrangementChart', $this->arrangementChart);
        if (isset($this->concernedMSs)) $o['concernedMSs'] = JsonConverters::to('Dac6ConcernedMSs', $this->concernedMSs);
        if (isset($this->mainBenefitTest1)) $o['mainBenefitTest1'] = $this->mainBenefitTest1;
        if (isset($this->hallmarks)) $o['hallmarks'] = JsonConverters::to('Dac6Hallmarks', $this->hallmarks);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Angaben zur Offenlegung */
// @Api(Description="Angaben zur Offenlegung")
class Dac6Disclosure implements JsonSerializable
{
    public function __construct(
        /** @description Angabe im Format DEDYYYYMMDDXXXXXX <DE><D><YYYYMMDD><Bezeichner> DE enthält den ISO Staatencode von Deutschland D enthält den Buchstaben "D" (Disclosure/Datensatz) YYYYMMDD enthält das Ausgabedatum der Offenlegungsnummer XXXXXX ist eine Kombination aus Großbuchstaben (A-Z) und Ziffern (0-9) Dieses Feld darf nur für Korrekturen bei gleichzeitiger Angabe der dazugehörigen ArrangementID genutzt werden. Korrekturen für Meldungen mit einer DisclosureID, die nicht mit "DE" beginnt, sind nicht zulässig. */
        // @ApiMember(Description="Angabe im Format DEDYYYYMMDDXXXXXX <DE><D><YYYYMMDD><Bezeichner> DE enthält den ISO Staatencode von Deutschland D enthält den Buchstaben \"D\" (Disclosure/Datensatz) YYYYMMDD enthält das Ausgabedatum der Offenlegungsnummer XXXXXX ist eine Kombination aus Großbuchstaben (A-Z) und Ziffern (0-9) Dieses Feld darf nur für Korrekturen bei gleichzeitiger Angabe der dazugehörigen ArrangementID genutzt werden. Korrekturen für Meldungen mit einer DisclosureID, die nicht mit \"DE\" beginnt, sind nicht zulässig.", Name="DisclosureID")
        /** @var string|null */
        public ?string $disclosureID=null,

        /** @description Angabe im Format DEDYYYYMMDDXXXXXX <DE><D><YYYYMMDD><Bezeichner> DE entspricht dem ISO Staatencode, hier steht bei einer in Deutschland übermittelten Meldung stets "DE". D steht für "D" wie Disclosure. YYYYMMDD ist das Datum der Vergabe der DisclosureID Bezeichner - 6-stellig Dieses Feld darf nur für Nachmeldungen von Nutzerdaten und Korrekturen von Nachmeldungen verwendet werden, wenn der Intermediär nicht von der Verschwiegenheitspflicht entbunden wurde. Nachmeldungen und Korrekturen für Meldungen mit einer RefDisclosureID, die nicht mit "DE" beginnt, sind nicht zulässig. */
        // @ApiMember(Description="Angabe im Format DEDYYYYMMDDXXXXXX <DE><D><YYYYMMDD><Bezeichner> DE entspricht dem ISO Staatencode, hier steht bei einer in Deutschland übermittelten Meldung stets \"DE\". D steht für \"D\" wie Disclosure. YYYYMMDD ist das Datum der Vergabe der DisclosureID Bezeichner - 6-stellig Dieses Feld darf nur für Nachmeldungen von Nutzerdaten und Korrekturen von Nachmeldungen verwendet werden, wenn der Intermediär nicht von der Verschwiegenheitspflicht entbunden wurde. Nachmeldungen und Korrekturen für Meldungen mit einer RefDisclosureID, die nicht mit \"DE\" beginnt, sind nicht zulässig.", Name="RefDisclosureID")
        /** @var string|null */
        public ?string $refDisclosureID=null,

        /** @description Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt. Hier kann nur "DE" oder "EN" gewählt werden. */
        // @ApiMember(Description="Sprache Hier ist die Sprache als ISO Code anzugeben, in der die Meldung erfolgt. Hier kann nur \"DE\" oder \"EN\" gewählt werden.", Name="Language")
        /** @var LanguageCode|null */
        public ?LanguageCode $language=null,

        /** @description Meldepflichtiger */
        // @ApiMember(Description="Meldepflichtiger", IsRequired=true, Name="Disclosing")
        /** @var Dac6Discloser|null */
        public ?Dac6Discloser $disclosing=null,

        /** @description Initialmeldung In diesem Feld muss angegeben werden, ob es sich um dieerste Meldung zu einer marktfähigen Gestaltung (Arrangement) handelt. Default value = false */
        // @ApiMember(Description="Initialmeldung In diesem Feld muss angegeben werden, ob es sich um dieerste Meldung zu einer marktfähigen Gestaltung (Arrangement) handelt. Default value = false", IsRequired=true, Name="InitialDisclosureMA")
        /** @var bool|null */
        public ?bool $initialDisclosureMA=null,

        /** @description Angabe aller bekannten Nutzer */
        // @ApiMember(Description="Angabe aller bekannten Nutzer", Name="RelevantTaxPayers")
        /** @var Dac6RelevantTaxPayers|null */
        public ?Dac6RelevantTaxPayers $relevantTaxPayers=null,

        /** @description Angabe aller bekannten Nutzer */
        // @ApiMember(Description="Angabe aller bekannten Nutzer", Name="Intermediaries")
        /** @var Dac6Intermediaries|null */
        public ?Dac6Intermediaries $intermediaries=null,

        /** @description Angaben zu allen in einem Mitgliedstaat der Europäischen Union ansässigen Personen, die von der grenzüberschreitenden Steuergestaltung wahrscheinlich unmittelbar betroffen sind, einschließlich Angaben darüber, zu welchen Mitgliedstaaten der Europäischen Union sie in Beziehung stehen. */
        // @ApiMember(Description="Angaben zu allen in einem Mitgliedstaat der Europäischen Union ansässigen Personen, die von der grenzüberschreitenden Steuergestaltung wahrscheinlich unmittelbar betroffen sind, einschließlich Angaben darüber, zu welchen Mitgliedstaaten der Europäischen Union sie in Beziehung stehen.", Name="Intermediaries")
        /** @var Dac6AffectedPersons|null */
        public ?Dac6AffectedPersons $affectedPersons=null,

        /** @description Angabe der Informationen zur Steuergestaltung */
        // @ApiMember(Description="Angabe der Informationen zur Steuergestaltung", IsRequired=true, Name="DisclosureInformation")
        /** @var Dac6DisclosureInformation|null */
        public ?Dac6DisclosureInformation $disclosureInformation=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['disclosureID'])) $this->disclosureID = $o['disclosureID'];
        if (isset($o['refDisclosureID'])) $this->refDisclosureID = $o['refDisclosureID'];
        if (isset($o['language'])) $this->language = JsonConverters::from('LanguageCode', $o['language']);
        if (isset($o['disclosing'])) $this->disclosing = JsonConverters::from('Dac6Discloser', $o['disclosing']);
        if (isset($o['initialDisclosureMA'])) $this->initialDisclosureMA = $o['initialDisclosureMA'];
        if (isset($o['relevantTaxPayers'])) $this->relevantTaxPayers = JsonConverters::from('Dac6RelevantTaxPayers', $o['relevantTaxPayers']);
        if (isset($o['intermediaries'])) $this->intermediaries = JsonConverters::from('Dac6Intermediaries', $o['intermediaries']);
        if (isset($o['affectedPersons'])) $this->affectedPersons = JsonConverters::from('Dac6AffectedPersons', $o['affectedPersons']);
        if (isset($o['disclosureInformation'])) $this->disclosureInformation = JsonConverters::from('Dac6DisclosureInformation', $o['disclosureInformation']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->disclosureID)) $o['disclosureID'] = $this->disclosureID;
        if (isset($this->refDisclosureID)) $o['refDisclosureID'] = $this->refDisclosureID;
        if (isset($this->language)) $o['language'] = JsonConverters::to('LanguageCode', $this->language);
        if (isset($this->disclosing)) $o['disclosing'] = JsonConverters::to('Dac6Discloser', $this->disclosing);
        if (isset($this->initialDisclosureMA)) $o['initialDisclosureMA'] = $this->initialDisclosureMA;
        if (isset($this->relevantTaxPayers)) $o['relevantTaxPayers'] = JsonConverters::to('Dac6RelevantTaxPayers', $this->relevantTaxPayers);
        if (isset($this->intermediaries)) $o['intermediaries'] = JsonConverters::to('Dac6Intermediaries', $this->intermediaries);
        if (isset($this->affectedPersons)) $o['affectedPersons'] = JsonConverters::to('Dac6AffectedPersons', $this->affectedPersons);
        if (isset($this->disclosureInformation)) $o['disclosureInformation'] = JsonConverters::to('Dac6DisclosureInformation', $this->disclosureInformation);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Gruppiert die Nutzdaten - Angabe dieser Elemente erfolgt sowohl bei der Nutzung vom BZSt Online Portal über das Formular sowie bei Lieferung über die ELMA Schnittstelle */
// @Api(Description="Gruppiert die Nutzdaten - Angabe dieser Elemente erfolgt sowohl bei der Nutzung vom BZSt Online Portal über das Formular sowie bei Lieferung über die ELMA Schnittstelle")
class Dac6Arrangement implements JsonSerializable
{
    public function __construct(
        /** @description Versionsangabe */
        // @ApiMember(Description="Versionsangabe", IsRequired=true, Name="Version")
        /** @var string */
        public string $version='',

        /** @description Angaben zu den Kopfdaten */
        // @ApiMember(Description="Angaben zu den Kopfdaten", IsRequired=true, Name="Header")
        /** @var Dac6Header|null */
        public ?Dac6Header $header=null,

        /** @description RegistriernummerAngabe im Format CCAYYYYMMDDXXXXXX <CC><A><YYYYMMDD><Bezeichner> CC enthält den ISO Staatencode des Mitgliedstaates in dem die erste Mitteilung zur Gestaltung erfolgt ist. Zulässige Werte sind: AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK A enthält den Buchstaben "A" (Arrangement/Gestaltung) YYYYMMDD enthält das Ausgabedatum der Registriernummer XXXXXX ist eine Kombination aus Großbuchstaben (A-Z) und Ziffern (0-9) */
        // @ApiMember(Description="RegistriernummerAngabe im Format CCAYYYYMMDDXXXXXX <CC><A><YYYYMMDD><Bezeichner> CC enthält den ISO Staatencode des Mitgliedstaates in dem die erste Mitteilung zur Gestaltung erfolgt ist. Zulässige Werte sind: AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK A enthält den Buchstaben \"A\" (Arrangement/Gestaltung) YYYYMMDD enthält das Ausgabedatum der Registriernummer XXXXXX ist eine Kombination aus Großbuchstaben (A-Z) und Ziffern (0-9)", Name="ArrangementID")
        /** @var string|null */
        public ?string $arrangementID=null,

        /** @description Angaben zur Offenlegung */
        // @ApiMember(Description="Angaben zur Offenlegung", IsRequired=true, Name="Dac6Disclosure")
        /** @var Dac6Disclosure|null */
        public ?Dac6Disclosure $dac6Disclosure=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['version'])) $this->version = $o['version'];
        if (isset($o['header'])) $this->header = JsonConverters::from('Dac6Header', $o['header']);
        if (isset($o['arrangementID'])) $this->arrangementID = $o['arrangementID'];
        if (isset($o['dac6Disclosure'])) $this->dac6Disclosure = JsonConverters::from('Dac6Disclosure', $o['dac6Disclosure']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->version)) $o['version'] = $this->version;
        if (isset($this->header)) $o['header'] = JsonConverters::to('Dac6Header', $this->header);
        if (isset($this->arrangementID)) $o['arrangementID'] = $this->arrangementID;
        if (isset($this->dac6Disclosure)) $o['dac6Disclosure'] = JsonConverters::to('Dac6Disclosure', $this->dac6Disclosure);
        return empty($o) ? new class(){} : $o;
    }
}

enum Dac6Verfahren : string
{
    case DAC6 = 'DAC6';
    case ISG = 'ISG';
}

/** @description Represents statistical information on a delivery. */
// @Api(Description="Represents statistical information on a delivery.")
class Lieferungsdetails implements JsonSerializable
{
    public function __construct(
        /** @description Indicates whether the reported tax arrangement is domestic or cross-border. */
        // @ApiMember(Description="Indicates whether the reported tax arrangement is domestic or cross-border.", Name="Verfahren")
        /** @var Dac6Verfahren|null */
        public ?Dac6Verfahren $verfahren=null,

        /** @description Disclosure-ID e.g. DED20190718UVWXYZ */
        // @ApiMember(Description="Disclosure-ID e.g. DED20190718UVWXYZ", Name="Version")
        /** @var string|null */
        public ?string $offenlegungsnummer=null,

        /** @var string|null */
        public ?string $registriernummer=null,
        /** @description Disclosure ID of the report, which this report refers to. */
        // @ApiMember(Description="Disclosure ID of the report, which this report refers to.", Name="Bezugsoffenlegung")
        /** @var string|null */
        public ?string $bezugsoffenlegung=null,

        /** @description File name of the delivery file submitted to ELAN. Example: m5_d6_bz123456789_1004557331_shawarma133.xml */
        // @ApiMember(Description="File name of the delivery file submitted to ELAN. Example: m5_d6_bz123456789_1004557331_shawarma133.xml", Name="Eingabedateiname")
        /** @var string|null */
        public ?string $eingabedateiname=null,

        /** @description Time stamp at which the message was created. */
        // @ApiMember(Description="Time stamp at which the message was created.", Name="Erstellungsdatum")
        /** @var DateTime|null */
        public ?DateTime $erstellungsdatum=null,

        /** @var string|null */
        public ?string $messageRefId=null,
        /** @description File name of the file returned by ELAN. Example: m5_d6_bz123456789_1004557331_shawarma133_da5b42ce-9d27-4255-920e-1a089eeb0ec8.xml */
        // @ApiMember(Description="File name of the file returned by ELAN. Example: m5_d6_bz123456789_1004557331_shawarma133_da5b42ce-9d27-4255-920e-1a089eeb0ec8.xml", Name="Version")
        /** @var string|null */
        public ?string $ausgabedateiname=null,

        /** @description Time stamp of the completion process protocol. */
        // @ApiMember(Description="Time stamp of the completion process protocol.", Name="Protokollerstellungsdatum")
        /** @var DateTime|null */
        public ?DateTime $protokollerstellungsdatum=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['verfahren'])) $this->verfahren = JsonConverters::from('Dac6Verfahren', $o['verfahren']);
        if (isset($o['offenlegungsnummer'])) $this->offenlegungsnummer = $o['offenlegungsnummer'];
        if (isset($o['registriernummer'])) $this->registriernummer = $o['registriernummer'];
        if (isset($o['bezugsoffenlegung'])) $this->bezugsoffenlegung = $o['bezugsoffenlegung'];
        if (isset($o['eingabedateiname'])) $this->eingabedateiname = $o['eingabedateiname'];
        if (isset($o['erstellungsdatum'])) $this->erstellungsdatum = JsonConverters::from('DateTime', $o['erstellungsdatum']);
        if (isset($o['messageRefId'])) $this->messageRefId = $o['messageRefId'];
        if (isset($o['ausgabedateiname'])) $this->ausgabedateiname = $o['ausgabedateiname'];
        if (isset($o['protokollerstellungsdatum'])) $this->protokollerstellungsdatum = JsonConverters::from('DateTime', $o['protokollerstellungsdatum']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->verfahren)) $o['verfahren'] = JsonConverters::to('Dac6Verfahren', $this->verfahren);
        if (isset($this->offenlegungsnummer)) $o['offenlegungsnummer'] = $this->offenlegungsnummer;
        if (isset($this->registriernummer)) $o['registriernummer'] = $this->registriernummer;
        if (isset($this->bezugsoffenlegung)) $o['bezugsoffenlegung'] = $this->bezugsoffenlegung;
        if (isset($this->eingabedateiname)) $o['eingabedateiname'] = $this->eingabedateiname;
        if (isset($this->erstellungsdatum)) $o['erstellungsdatum'] = JsonConverters::to('DateTime', $this->erstellungsdatum);
        if (isset($this->messageRefId)) $o['messageRefId'] = $this->messageRefId;
        if (isset($this->ausgabedateiname)) $o['ausgabedateiname'] = $this->ausgabedateiname;
        if (isset($this->protokollerstellungsdatum)) $o['protokollerstellungsdatum'] = JsonConverters::to('DateTime', $this->protokollerstellungsdatum);
        return empty($o) ? new class(){} : $o;
    }
}

enum Dac6EintragArt : string
{
    case HINWEIS = 'HINWEIS';
    case FEHLER = 'FEHLER';
}

/** @description Represents a protocol entry */
// @Api(Description="Represents a protocol entry")
class Protokolleintrag implements JsonSerializable
{
    public function __construct(
        /** @description The type of entry. */
        // @ApiMember(Description="The type of entry.", Name="EintragArt")
        /** @var Dac6EintragArt|null */
        public ?Dac6EintragArt $eintragArt=null,

        /** @description Code value of the entry type - error code or information code. */
        // @ApiMember(Description="Code value of the entry type - error code or information code.", Name="Version")
        /** @var string|null */
        public ?string $eintragCode=null,

        /** @description Text (in German) of the protocol entry. */
        // @ApiMember(Description="Text (in German) of the protocol entry.", Name="EintragText")
        /** @var string|null */
        public ?string $eintragText=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['eintragArt'])) $this->eintragArt = JsonConverters::from('Dac6EintragArt', $o['eintragArt']);
        if (isset($o['eintragCode'])) $this->eintragCode = $o['eintragCode'];
        if (isset($o['eintragText'])) $this->eintragText = $o['eintragText'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->eintragArt)) $o['eintragArt'] = JsonConverters::to('Dac6EintragArt', $this->eintragArt);
        if (isset($this->eintragCode)) $o['eintragCode'] = $this->eintragCode;
        if (isset($this->eintragText)) $o['eintragText'] = $this->eintragText;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Represents an overview result of a DAC6 or ISG delivery process. */
// @Api(Description="Represents an overview result of a DAC6 or ISG delivery process.")
class Dac6Verarbeitungsprotokoll implements JsonSerializable
{
    public function __construct(
        /** @description The version of the process protocol. */
        // @ApiMember(Description="The version of the process protocol.", Name="Version")
        /** @var string|null */
        public ?string $version=null,

        /** @description The type of message. */
        // @ApiMember(Description="The type of message.", Name="MessageType")
        /** @var string|null */
        public ?string $messageType=null,

        /** @description The statistical information on the delivery. */
        // @ApiMember(Description="The statistical information on the delivery.", Name="Lieferungsdetails")
        /** @var Lieferungsdetails|null */
        public ?Lieferungsdetails $lieferungsdetails=null,

        /** @description Contains protocol entries for the delivery. */
        // @ApiMember(Description="Contains protocol entries for the delivery.", Name="Protokolleintraege")
        /** @var array<Protokolleintrag>|null */
        public ?array $protokolleintraege=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['version'])) $this->version = $o['version'];
        if (isset($o['messageType'])) $this->messageType = $o['messageType'];
        if (isset($o['lieferungsdetails'])) $this->lieferungsdetails = JsonConverters::from('Lieferungsdetails', $o['lieferungsdetails']);
        if (isset($o['protokolleintraege'])) $this->protokolleintraege = JsonConverters::fromArray('Protokolleintrag', $o['protokolleintraege']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->version)) $o['version'] = $this->version;
        if (isset($this->messageType)) $o['messageType'] = $this->messageType;
        if (isset($this->lieferungsdetails)) $o['lieferungsdetails'] = JsonConverters::to('Lieferungsdetails', $this->lieferungsdetails);
        if (isset($this->protokolleintraege)) $o['protokolleintraege'] = JsonConverters::toArray('Protokolleintrag', $this->protokolleintraege);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Stellt grenzüberschreitende Steuergestaltungen dar. */
// @Api(Description="Stellt grenzüberschreitende Steuergestaltungen dar.")
class DAC6 implements JsonSerializable
{
    public function __construct(
        /** @description Dient dazu, spätere Aktualisierungen des Schemas zu ermöglichen. Hier ist nur der feste Wert 000001 zulässig. */
        // @ApiMember(Description="Dient dazu, spätere Aktualisierungen des Schemas zu ermöglichen. Hier ist nur der feste Wert 000001 zulässig.", IsRequired=true, Name="Version")
        /** @var string */
        public string $version='',

        /** @description Wird verwendet, um die Sprache der Inhalte des Datenteils zu kennzeichnen. Zulässige Werte sind Sprachcodes aus 2 Kleinbuchstaben nach ISO 639-1. */
        // @ApiMember(Description="Wird verwendet, um die Sprache der Inhalte des Datenteils zu kennzeichnen. Zulässige Werte sind Sprachcodes aus 2 Kleinbuchstaben nach ISO 639-1.", IsRequired=true, Name="Sprache")
        /** @var LanguageCode|null */
        public ?LanguageCode $sprache=null,

        /** @description Gestaltung Gruppiert die Nutzdaten - Angabe dieser Elemente erfolgt sowohl bei der Nutzung vom BZSt Online Portal über das Formular sowie bei Lieferung über die ELMA Schnittstelle */
        // @ApiMember(Description="Gestaltung Gruppiert die Nutzdaten - Angabe dieser Elemente erfolgt sowohl bei der Nutzung vom BZSt Online Portal über das Formular sowie bei Lieferung über die ELMA Schnittstelle", IsRequired=true, Name="Dac6Arrangement")
        /** @var Dac6Arrangement|null */
        public ?Dac6Arrangement $dac6Arrangement=null,

        /** @description Enthält eine Übersicht über das Verarbeitungsergebnis einer DAC6- oder ISG-Lieferung. */
        // @ApiMember(Description="Enthält eine Übersicht über das Verarbeitungsergebnis einer DAC6- oder ISG-Lieferung.", IsRequired=true, Name="Dac6Verarbeitungsprotokoll")
        /** @var Dac6Verarbeitungsprotokoll|null */
        public ?Dac6Verarbeitungsprotokoll $dac6Verarbeitungsprotokoll=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['version'])) $this->version = $o['version'];
        if (isset($o['sprache'])) $this->sprache = JsonConverters::from('LanguageCode', $o['sprache']);
        if (isset($o['dac6Arrangement'])) $this->dac6Arrangement = JsonConverters::from('Dac6Arrangement', $o['dac6Arrangement']);
        if (isset($o['dac6Verarbeitungsprotokoll'])) $this->dac6Verarbeitungsprotokoll = JsonConverters::from('Dac6Verarbeitungsprotokoll', $o['dac6Verarbeitungsprotokoll']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->version)) $o['version'] = $this->version;
        if (isset($this->sprache)) $o['sprache'] = JsonConverters::to('LanguageCode', $this->sprache);
        if (isset($this->dac6Arrangement)) $o['dac6Arrangement'] = JsonConverters::to('Dac6Arrangement', $this->dac6Arrangement);
        if (isset($this->dac6Verarbeitungsprotokoll)) $o['dac6Verarbeitungsprotokoll'] = JsonConverters::to('Dac6Verarbeitungsprotokoll', $this->dac6Verarbeitungsprotokoll);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Specifies a request to generate a DAC6 ELMA-compatible XML content from a DAC6 data model. */
// @Api(Description="Specifies a request to generate a DAC6 ELMA-compatible XML content from a DAC6 data model.")
class CreateDac6XmlBase implements IPost, IStageableRequest, JsonSerializable
{
    public function __construct(
        /** @description The BZSt (Bundeszentralamt für Steuern) - tax number of the user. 11-character text field that may only consist of two capital letters and 9 digits (0-9). The fiscal authority BZSt provides this number during registration at the BOP (BZSt-Online Portal - https://www.elster.de/bportal/start). The number is available in the private area of the BOP user account under "My BOP" under the "Registration Information" */
        // @ApiMember(Description="The BZSt (Bundeszentralamt für Steuern) - tax number of the user. 11-character text field that may only consist of two capital letters and 9 digits (0-9). The fiscal authority BZSt provides this number during registration at the BOP (BZSt-Online Portal - https://www.elster.de/bportal/start). The number is available in the private area of the BOP user account under \"My BOP\" under the \"Registration Information\"", IsRequired=true)
        /** @var string */
        public string $authSteuernummer='',

        /** @description The account identifier of a BZSt-Online Portal (BOP) user. 10-character text field that may only contain numbers (0-9). */
        // @ApiMember(Description="The account identifier of a BZSt-Online Portal (BOP) user. 10-character text field that may only contain numbers (0-9).", IsRequired=true)
        /** @var string */
        public string $accountId='',

        /** @description User custom ID. This field can be filled with internal reference information of the user. */
        // @ApiMember(Description="User custom ID. This field can be filled with internal reference information of the user.")
        /** @var string|null */
        public ?string $kundeneigeneId=null,

        /** @description The version number of the ELMAKOM definition. */
        // @ApiMember(Description="The version number of the ELMAKOM definition.", IsRequired=true)
        /** @var string */
        public string $elmakomVersion='',

        /** @description Should operations be staged on the ELMA server? true: operations are executed on the Test ELMA server. false: operations are executed on the Live (Production) ELMA server. */
        // @ApiMember(Description="Should operations be staged on the ELMA server? true: operations are executed on the Test ELMA server. false: operations are executed on the Live (Production) ELMA server.")
        /** @var bool|null */
        public ?bool $stagingEnabled=null,

        /** @description The data model that represents the DAC6 content. */
        // @ApiMember(Description="The data model that represents the DAC6 content.")
        /** @var DAC6|null */
        public ?DAC6 $dataModel=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['authSteuernummer'])) $this->authSteuernummer = $o['authSteuernummer'];
        if (isset($o['accountId'])) $this->accountId = $o['accountId'];
        if (isset($o['kundeneigeneId'])) $this->kundeneigeneId = $o['kundeneigeneId'];
        if (isset($o['elmakomVersion'])) $this->elmakomVersion = $o['elmakomVersion'];
        if (isset($o['stagingEnabled'])) $this->stagingEnabled = $o['stagingEnabled'];
        if (isset($o['dataModel'])) $this->dataModel = JsonConverters::from('DAC6', $o['dataModel']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->authSteuernummer)) $o['authSteuernummer'] = $this->authSteuernummer;
        if (isset($this->accountId)) $o['accountId'] = $this->accountId;
        if (isset($this->kundeneigeneId)) $o['kundeneigeneId'] = $this->kundeneigeneId;
        if (isset($this->elmakomVersion)) $o['elmakomVersion'] = $this->elmakomVersion;
        if (isset($this->stagingEnabled)) $o['stagingEnabled'] = $this->stagingEnabled;
        if (isset($this->dataModel)) $o['dataModel'] = JsonConverters::to('DAC6', $this->dataModel);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Represents a request to generate an ELMA-compatible XML content from a DAC6 data model in an asynchronous operation. */
// @Api(Description="Represents a request to generate an ELMA-compatible XML content from a DAC6 data model in an asynchronous operation.")
class CreateDac6XmlAsync extends CreateDac6XmlBase implements JsonSerializable
{
    /**
     * @param string $authSteuernummer
     * @param string $accountId
     * @param string|null $kundeneigeneId
     * @param string $elmakomVersion
     * @param bool|null $stagingEnabled
     * @param DAC6|null $dataModel
     */
    public function __construct(
        string $authSteuernummer='',
        string $accountId='',
        ?string $kundeneigeneId=null,
        string $elmakomVersion='',
        ?bool $stagingEnabled=null,
        ?DAC6 $dataModel=null
    ) {
        parent::__construct($authSteuernummer,$accountId,$kundeneigeneId,$elmakomVersion,$stagingEnabled,$dataModel);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['authSteuernummer'])) $this->authSteuernummer = $o['authSteuernummer'];
        if (isset($o['accountId'])) $this->accountId = $o['accountId'];
        if (isset($o['kundeneigeneId'])) $this->kundeneigeneId = $o['kundeneigeneId'];
        if (isset($o['elmakomVersion'])) $this->elmakomVersion = $o['elmakomVersion'];
        if (isset($o['stagingEnabled'])) $this->stagingEnabled = $o['stagingEnabled'];
        if (isset($o['dataModel'])) $this->dataModel = JsonConverters::from('DAC6', $o['dataModel']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->authSteuernummer)) $o['authSteuernummer'] = $this->authSteuernummer;
        if (isset($this->accountId)) $o['accountId'] = $this->accountId;
        if (isset($this->kundeneigeneId)) $o['kundeneigeneId'] = $this->kundeneigeneId;
        if (isset($this->elmakomVersion)) $o['elmakomVersion'] = $this->elmakomVersion;
        if (isset($this->stagingEnabled)) $o['stagingEnabled'] = $this->stagingEnabled;
        if (isset($this->dataModel)) $o['dataModel'] = JsonConverters::to('DAC6', $this->dataModel);
        return empty($o) ? new class(){} : $o;
    }
}

PHP CreateDac6XmlAsync DTOs

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

HTTP + OTHER

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

POST /async/elma/dac6/xml HTTP/1.1 
Host: reportfiling.staging.pwc.de 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"authSteuernummer":"String","accountId":"String","kundeneigeneId":"String","elmakomVersion":"String","stagingEnabled":false,"dataModel":{"version":"String","sprache":"AA","dac6Arrangement":{"version":"String","header":{"receivingCountries":["AF"],"messageRefId":"String","timestamp":"\/Date(-62135596800000-0000)\/"},"arrangementID":"String","dac6Disclosure":{"disclosureID":"String","refDisclosureID":"String","language":"AA","disclosing":{"id":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"liability":{"intermediaryDiscloser":{"intermediaryNexus":"INEXa","capacity":"DAC61101"},"relevantTaxpayerDiscloser":{"relevantTaxpayerNexus":"RTNEXa","capacity":"DAC61104"}}},"initialDisclosureMA":false,"relevantTaxPayers":[{"id":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"taxpayerImplementingDate":"\/Date(-62135596800000-0000)\/","associatedEnterprises":[{"associatedEnterpriseID":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"affectedPerson":false}]}],"intermediaries":[{"id":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"capacity":"DAC61101","nationalExemption":{"exemption":false,"countryExemptions":{"countryExemptions":["AF"]}}}],"affectedPersons":[{"affectedPersonID":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}}}],"disclosureInformation":{"implementingDate":"\/Date(-62135596800000-0000)\/","reason":"DAC6701","summary":{"disclosure_Name":"String","disclosure_Descriptions":[{"language":"AA","value":"String"}]},"nationalProvision":{"texts":[{"language":"AA","value":"String"}],"country":"AF"},"amount":{"currCode":"AED","value":0},"arrangementChart":{"id":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"ownership":0,"investAmount":{"currCode":"AED","value":0},"otherInfos":[{"language":"AA","value":"String"}],"listChilds":[{"id":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"ownership":0,"investAmount":{"currCode":"AED","value":0},"otherInfos":[{"language":"AA","value":"String"}],"listChilds":[{"id":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"ownership":0,"investAmount":{"currCode":"AED","value":0},"otherInfos":[{"language":"AA","value":"String"}],"listChilds":[{"id":{"individual":{"individualName":{"precedingTitle":"String","title":"String","firstName":"String","middleName":"String","namePrefix":"String","lastName":"String","generationIdentifier":"String","suffix":"String","generalSuffix":"String"},"birthDate":"\/Date(-62135596800000-0000)\/","birthPlace":"String","tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]},"organisation":{"organisationNames":[{"language":"AA","value":"String"}],"tiNs":[{"issuedBy":"AF","value":"String"}],"address":{"street":"String","buildingIdentifier":"String","suiteIdentifier":"String","floorIdentifier":"String","districtName":"String","pob":"String","postCode":"String","city":"String","country":"AF"},"emailAddress":"String","resCountryCodes":["AF"]}},"ownership":0,"investAmount":{"currCode":"AED","value":0},"otherInfos":[{"language":"AA","value":"String"}]}]}]}]},"concernedMSs":["AT"],"mainBenefitTest1":false,"hallmarks":{"listHallmarks":{"hallmarks":["DAC6A1"]},"daC6D1OtherInfos":[{"language":"AA","value":"String"}]}}}},"dac6Verarbeitungsprotokoll":{"version":"String","messageType":"DAC6","lieferungsdetails":{"verfahren":"DAC6","offenlegungsnummer":"String","registriernummer":"String","bezugsoffenlegung":"String","eingabedateiname":"String","erstellungsdatum":"\/Date(-62135596800000-0000)\/","messageRefId":"String","ausgabedateiname":"String","protokollerstellungsdatum":"\/Date(-62135596800000-0000)\/"},"protokolleintraege":[{"eintragArt":"HINWEIS","eintragCode":"String","eintragText":"String"}]}}}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

(string)