{
    "title": "Kassenabschluss Schema",
    "$schema": "http://json-schema.org/draft-04/schema#",
    "description": "Version 0.9 Stand 04.08.2017 16:07",
    "definitions": {
        "name": {
            "type": "string",
            "description": "Hier ist der aktuelle offizielle (Unternehmens)name anzugeben.",
            "minLength": 1,
            "maxLength": 60
        },
        "address": {
            "properties": {
                "street": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 41
                },
                "postal_code": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10
                },
                "city": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 62
                },
                "country_code": {
                    "enum": [
                        "ALA",
                        "AFG",
                        "ALB",
                        "DZA",
                        "ASM",
                        "AND",
                        "AGO",
                        "AIA",
                        "ATA",
                        "ATG",
                        "ARG",
                        "ARM",
                        "ABW",
                        "AUS",
                        "AUT",
                        "AZE",
                        "BHS",
                        "BHR",
                        "BGD",
                        "BRB",
                        "BLR",
                        "BEL",
                        "BLZ",
                        "BEN",
                        "BMU",
                        "BTN",
                        "BOL",
                        "BIH",
                        "BWA",
                        "BVT",
                        "BRA",
                        "IOT",
                        "BRN",
                        "BGR",
                        "BFA",
                        "BDI",
                        "KHM",
                        "CMR",
                        "CAN",
                        "CPV",
                        "CYM",
                        "CAF",
                        "TCD",
                        "CHL",
                        "CHN",
                        "CXR",
                        "CCK",
                        "COL",
                        "COM",
                        "COD",
                        "COG",
                        "COK",
                        "CRI",
                        "CIV",
                        "HRV",
                        "CUB",
                        "CYP",
                        "CZE",
                        "DNK",
                        "DJI",
                        "DMA",
                        "DOM",
                        "ECU",
                        "EGY",
                        "SLV",
                        "GNQ",
                        "ERI",
                        "EST",
                        "ETH",
                        "FLK",
                        "FRO",
                        "FJI",
                        "FIN",
                        "FRA",
                        "GUF",
                        "PYF",
                        "ATF",
                        "GAB",
                        "GMB",
                        "GEO",
                        "DEU",
                        "GHA",
                        "GIB",
                        "GRC",
                        "GRL",
                        "GRD",
                        "GLP",
                        "GUM",
                        "GTM",
                        "GIN",
                        "GNB",
                        "GUY",
                        "HTI",
                        "HMD",
                        "HND",
                        "HKG",
                        "HUN",
                        "ISL",
                        "IND",
                        "IDN",
                        "IRN",
                        "IRQ",
                        "IRL",
                        "ISR",
                        "ITA",
                        "JAM",
                        "JPN",
                        "JOR",
                        "KAZ",
                        "KEN",
                        "KIR",
                        "PRK",
                        "KOR",
                        "KWT",
                        "KGZ",
                        "LAO",
                        "LVA",
                        "LBN",
                        "LSO",
                        "LBR",
                        "LBY",
                        "LIE",
                        "LTU",
                        "LUX",
                        "MAC",
                        "MKD",
                        "MDG",
                        "MWI",
                        "MYS",
                        "MDV",
                        "MLI",
                        "MLT",
                        "MHL",
                        "MTQ",
                        "MRT",
                        "MUS",
                        "MYT",
                        "MEX",
                        "FSM",
                        "MDA",
                        "MCO",
                        "MNG",
                        "MSR",
                        "MAR",
                        "MOZ",
                        "MMR",
                        "NAM",
                        "NRU",
                        "NPL",
                        "NLD",
                        "ANT",
                        "NCL",
                        "NZL",
                        "NIC",
                        "NER",
                        "NGA",
                        "NIU",
                        "NFK",
                        "MNP",
                        "NOR",
                        "OMN",
                        "PAK",
                        "PLW",
                        "PSE",
                        "PAN",
                        "PNG",
                        "PRY",
                        "PER",
                        "PHL",
                        "PCN",
                        "POL",
                        "PRT",
                        "PRI",
                        "QAT",
                        "REU",
                        "ROU",
                        "RUS",
                        "RWA",
                        "SHN",
                        "KNA",
                        "LCA",
                        "SPM",
                        "VCT",
                        "WSM",
                        "SMR",
                        "STP",
                        "SAU",
                        "SEN",
                        "SCG",
                        "SYC",
                        "SLE",
                        "SGP",
                        "SVK",
                        "SVN",
                        "SLB",
                        "SOM",
                        "ZAF",
                        "SGS",
                        "ESP",
                        "LKA",
                        "SDN",
                        "SUR",
                        "SJM",
                        "SWZ",
                        "SWE",
                        "CHE",
                        "SYR",
                        "TWN",
                        "TJK",
                        "TZA",
                        "THA",
                        "TLS",
                        "TGO",
                        "TKL",
                        "TON",
                        "TTO",
                        "TUN",
                        "TUR",
                        "TKM",
                        "TCA",
                        "TUV",
                        "UGA",
                        "UKR",
                        "ARE",
                        "GBR",
                        "USA",
                        "UMI",
                        "URY",
                        "UZB",
                        "VUT",
                        "VAT",
                        "VEN",
                        "VNM",
                        "VGB",
                        "VIR",
                        "WLF",
                        "ESH",
                        "YEM",
                        "ZMB",
                        "ZWE"
                    ],
                    "description": "Ländercode nach ISO 3166 alpha-3"
                }
            }
        },
        "timestamp": {
            "type": "string",
            "description": "Zeitstempel nach ISO 8601 und RFC3339 z.B. 2016-09-27T17:00:01+01:00 (Lokale Zeitangabe)",
            "format": "date-time"
        },
        "tax_number": {
            "type": "string",
            "description": "Steuernummer",
            "minLength": 1,
            "maxLength": 20
        },
        "vat_id_number": {
            "type": "string",
            "description": "Umsatzsteuer-Identifikationsnummer",
            "minLength": 1,
            "maxLength": 15
        },
        "vat_amount": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9999999999
                },
                "incl_vat": {
                    "type": "number",
                    "minimum": -9999999999.99999,
                    "maximum": 9999999999.99999,
                    "exclusiveMinimum": false,
                    "exclusiveMaximum": false,
                    "multipleOf": 0.00001
                },
                "excl_vat": {
                    "type": "number",
                    "minimum": -9999999999.99999,
                    "maximum": 9999999999.99999,
                    "exclusiveMinimum": false,
                    "exclusiveMaximum": false,
                    "multipleOf": 0.00001
                },
                "vat": {
                    "type": "number",
                    "minimum": -9999999999.99999,
                    "maximum": 9999999999.99999,
                    "exclusiveMinimum": false,
                    "exclusiveMaximum": false,
                    "multipleOf": 0.00001
                }
            },
            "required": ["id"]
        },
        "vat_amounts": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/vat_amount"
            }
        },
        "amount": {
            "type": "number",
            "minimum": -9999999999.99,
            "maximum": 9999999999.99,
            "exclusiveMinimum": true,
            "exclusiveMaximum": false,
            "multipleOf": 0.01
        },
        "quantity": {
            "type": "number",
            "minimum": -9999999999.999,
            "maximum": 9999999999.999,
            "multipleOf": 0.001
        },
        "percentage": {
            "type": "number",
            "minimum": 0.00,
            "maximum": 100.00,
            "multipleOf": 0.01,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
        },
        "currency": {
            "enum": [
                "AED",
                "AFN",
                "ALL",
                "AMD",
                "ANG",
                "AOA",
                "ARS",
                "AUD",
                "AWG",
                "AZN",
                "BAM",
                "BBD",
                "BDT",
                "BGN",
                "BHD",
                "BIF",
                "BMD",
                "BND",
                "BOB",
                "BOV",
                "BRL",
                "BSD",
                "BTN",
                "BWP",
                "BYN",
                "BYR",
                "BZD",
                "CAD",
                "CDF",
                "CHE",
                "CHF",
                "CHW",
                "CLF",
                "CLP",
                "CN",
                "COP",
                "COU",
                "CRC",
                "CUC",
                "CUP",
                "CVE",
                "CZK",
                "DJF",
                "DKK",
                "DOP",
                "DZD",
                "EGP",
                "ERN",
                "ETB",
                "EUR",
                "FJD",
                "FKP",
                "GBP",
                "GEL",
                "GHS",
                "GIP",
                "GMD",
                "GNF",
                "GTQ",
                "GYD",
                "HKD",
                "HNL",
                "HRK",
                "HTG",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "IQD",
                "IRR",
                "ISK",
                "JMD",
                "JOD",
                "JPY",
                "KES",
                "KGS",
                "KHR",
                "KMF",
                "KPW",
                "KRW",
                "KWD",
                "KYD",
                "KZT",
                "LAK",
                "LBP",
                "LKR",
                "LRD",
                "LSL",
                "LYD",
                "MAD",
                "MDL",
                "MGA",
                "MKD",
                "MMK",
                "MNT",
                "MOP",
                "MRO",
                "MUR",
                "MVR",
                "MWK",
                "MXN",
                "MXV",
                "MYR",
                "MZN",
                "NAD",
                "NGN",
                "NIO",
                "NOK",
                "NPR",
                "NZD",
                "OMR",
                "PAB",
                "PEN",
                "PGK",
                "PHP",
                "PKR",
                "PLN",
                "PYG",
                "QAR",
                "RON",
                "RSD",
                "RUB",
                "RWF",
                "SAR",
                "SBD",
                "SCR",
                "SDG",
                "SSP",
                "SEK",
                "SGD",
                "SHP",
                "SLL",
                "SOS",
                "SRD",
                "STD",
                "SVC",
                "SYP",
                "SZL",
                "THB",
                "TJS",
                "TMT",
                "TND",
                "TOP",
                "TRY",
                "TTD",
                "TWD",
                "TZS",
                "UAH",
                "UGX",
                "USD",
                "UYI",
                "UYU",
                "UZS",
                "VEF",
                "VND",
                "VUV",
                "WST",
                "XAF",
                "XCD",
                "XOF",
                "XPF",
                "XSU",
                "YER",
                "ZAR",
                "ZMW",
                "ZWL"
            ],
            "description": "Jeder Kassenabschluss hat ausschließlich eine Basiswährung. Die Angabe der Basiswährung bezieht sich auf die Basiswährung der Kasse. Die Basiswährung wird dargestellt nach ISO 4217 (Spalte: ISO-Code) Bsp.: Euro = EUR; Alle Zahlungen in Fremdwährung werden in die Basiswährung umgerechnet."
        },
        "transaction_type": {
            "enum": [
                "Zwischenrechnung",
                "Lieferschein",
                "Rechnung",
                "Gutschrift",
                "Korrekturrechnung",
                "Bestellung",
                "Andere Vorgänge"
            ],
            "description": "Der Transaktionstyp kann Lieferschein, Gutschrift, Rechnung sein. Es ist eine globale Einstellung die sich auf den gesamten Einzelbeleg bezieht. Bei der Erstellung des Kassenabschlusses fließen diese einfach mit korrektem Vorzeichen in die entsprechenden Positionen für Business Cases und Payment Types mit ein. Beispiel: Das Stornieren eines Umsatzes führt im kassenabschluss lediglich zu einem negativem Umsatz mit einer negativen Zahlung. Auf diesem Weg ist es auch möglich, nicht zahlungswirksame Einzelbelege zu stornieren."
        },
        "payment_type": {
            "oneOf": [
                {
                    "enum": [
                        "Bar",
                        "Unbar",
                        "EC-Karte",
                        "Kreditkarte",
                        "El.Zahlungsdienstleister",
                        "Kredit",
                        "Anzahlung",
                        "Couponing",
                        "Mehrzweckgutschein",
                        "Einzweckgutschein",
                        "Transfer"
                    ]
                },
                {
                    "type": "string",
                    "pattern": "^Ind-[a-zA-Z0-9_]{1,15}$"
                }
            ]
        },
        "bc_type": {
            "description": "Beim bc_type handelt es sich um Geschäftsvorfälle mit unterschiedlichen Ausprägungen. Ein Geschäftsvorfall kann ein Umsatz oder auch eine Privatentnahme sein. Individuelle Geschäftsvorfälle werden mit dem Prefix 'Ind-' und einem max. 15-stelligen Bezeichner gekennzeichnet.",
            "oneOf": [
                {
                    "enum": [
                        "Anfangsbestand",
                        "Umsatz",
                        "UmsatzPfand",
                        "PfandRückzahlung",
                        "Mehrzweckgutschein",
                        "Einzweckgutschein",
                        "Kredit",
                        "Rechnung",
                        "Anzahlung",
                        "Versand",
                        "Privateinlage",
                        "Privatentnahme",
                        "WechselgeldEinlage",
                        "Geldtransit",
                        "Abschöpfung",
                        "DifferenzSollIst",
                        "TrinkgeldAG",
                        "TrinkgeldAN",
                        "TrinkgeldAGanAN",
                        "Auszahlung",
                        "Einzahlung",
                        "Rabatt",
                        "Aufschlag",
                        "Lohnzahlung"
                    ]
                },
                {
                    "type": "string",
                    "pattern": "^Ind-[a-zA-Z0-9_]{1,15}$"
                }
            ]
        }
    },
    "type": "object",
    "required": [
        "cash_point_closing"
    ],
    "properties": {
        "cash_point_closing": {
            "type": "object",
            "description": "Der Kassenabschluss wird ein-, mehrmals oder kalendertagübergreifend für eine Kasse erstellt.",
            "properties": {
                "number": {
                    "type": "number",
                    "description": "Jede Kasse besitzt eine Kassenabschlussnummer. Diese ist aufsteigend, fortlaufend, nicht zurücksetzbar. Sie kann sich innerhalb einer Kasse nicht wiederholen. ",
                    "minimum": 1
                },
                "taxonomy_version": {
                    "type": "string",
                    "description": "Taxonomieversion",
                    "pattern": "^[0-9]+(\\.[0-9]{1,2})?$"
                },
                "head": {
                    "type": "object",
                    "description": "In dieser Klammer werden die zentralen Stammdaten des Kassenabschlusses dargestellt.",
                    "properties": {
                        "creation_date": {
                            "$ref": "#/definitions/timestamp"
                        },
                        "start_sequence_number": {
                            "type": "number",
                            "description": "Die Startsequenznummer ist die Sequenznummer der ersten Transaktion die in einen Kassenabschluss fließt.",
                            "minimum": 1,
                            "maximum": 99999999999999999
                        },
                        "end_sequence_number": {
                            "type": "number",
                            "description": "Die Endsequenznummer ist die Sequenznummer der letzten Transaktion die in einen Kassenabschluss fließt.",
                            "minimum": 1,
                            "maximum": 99999999999999999
                        },
                        "company": {
                            "type": "object",
                            "description": "Bildet die Klammer bezüglich aller Informationen zum Unternehmen.",
                            "properties": {
                                "name": {
                                    "$ref": "#/definitions/name"
                                },
                                "address": {
                                    "$ref": "#/definitions/address"
                                },
                                "tax_number": {
                                    "$ref": "#/definitions/tax_number"
                                },
                                "vat_id_number": {
                                    "$ref": "#/definitions/vat_id_number"
                                },
                                "location": {
                                    "type": "object",
                                    "description": "Unter dem Klammerbegriff Abrechnungsort werden alle Daten zum Abrechnungsort vorgehalten. Der Abrechnungsort kann eine Abteilungsbezeichnung, eine Filiale oder ein variabler Punkt sein.",
                                    "properties": {
                                        "name": {
                                            "$ref": "#/definitions/name"
                                        },
                                        "address": {
                                            "$ref": "#/definitions/address"
                                        },
                                        "tax_number": {
                                            "$ref": "#/definitions/tax_number"
                                        },
                                        "vat_id_number": {
                                            "$ref": "#/definitions/vat_id_number"
                                        },
                                        "cash_register": {
                                            "type": "object",
                                            "description": "Die Klammer um alle Angaben zur jeweiligen Kasse.",
                                            "properties": {
                                                "id": {
                                                    "type": "string",
                                                    "description": "Die id ist die Identifikationsnummer, die der Hersteller an eine Kasse vergibt um diese eindeutig zu identifizieren. Falls vorhanden wird hier die Id erwartet, die ab dem 01.01.2020 der Finanzverwaltung zu melden ist. Alternativ die Seriennummer. Wichtig: Eine Kassen-Id. darf nicht zweimal vergeben sein! Ebenfalls zu beachten: Falls mehrere Kassen über eine zentrale Kasse abgerechnet werden, so ist bei dieser ID immer die ID des addierenden und meldenden Systems anzugeben.",
                                                    "minLength": 1,
                                                    "maxLength": 255
                                                },
                                                "brand": {
                                                    "type": "string",
                                                    "description": "Bezeichnet die Marke des Kassenherstellers.",
                                                    "minLength": 1,
                                                    "maxLength": 255
                                                },
                                                "model": {
                                                    "type": "string",
                                                    "description": "Bezeichnet das Modell der jeweiligen Kasse.",
                                                    "minLength": 1,
                                                    "maxLength": 255
                                                },
                                                "serial_number": {
                                                    "type": "string",
                                                    "description": "Seriennumer der jeweiligen Kasse.",
                                                    "minLength": 1,
                                                    "maxLength": 50
                                                },
                                                "software": {
                                                    "type": "object",
                                                    "properties": {
                                                        "brand": {
                                                            "type": "string",
                                                            "description": "Hier wird der Hersteller der jeweiligen Kassensoftware aufgeführt.",
                                                            "minLength": 1,
                                                            "maxLength": 255
                                                        },
                                                        "version": {
                                                            "type": "string",
                                                            "description": "Hier erfolgt die Versionsangabe der jeweiligen Software.",
                                                            "minLength": 1,
                                                            "maxLength": 255
                                                        }
                                                    }
                                                },
                                                "slaves": {
                                                    "type": "array",
                                                    "description": "Die Klammer um alle Angaben zur jeweiligen Kasse.",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "slave_id": {
                                                                "type": "string",
                                                                "description": "Die slave_id ist zwingend anzugeben, wenn mehr als ein Terminal über eine id abgerechnet werden. Alle kassierenden Kassen müssen hier mit Ihrer id der abrechnenden Kasse zugeordnet werden.",
                                                                "minLength": 1,
                                                                "maxLength": 255
                                                            },
                                                            "brand": {
                                                                "type": "string",
                                                                "description": "Bezeichnet die Marke des Kassenherstellers.",
                                                                "minLength": 1,
                                                                "maxLength": 255
                                                            },
                                                            "model": {
                                                                "type": "string",
                                                                "description": "Bezeichnet das Modell der jeweiligen Kasse.",
                                                                "minLength": 1,
                                                                "maxLength": 255
                                                            },
                                                            "serial_number": {
                                                                "type": "string",
                                                                "description": "Seriennumer der jeweiligen Slave-Kasse.",
                                                                "minLength": 1,
                                                                "maxLength": 50
                                                            },
                                                            "software": {
                                                                "type": "object",
                                                                "properties": {
                                                                    "brand": {
                                                                        "type": "string",
                                                                        "description": "Hier wird der Hersteller der jeweiligen Kassensoftware aufgeführt.",
                                                                        "minLength": 1,
                                                                        "maxLength": 255
                                                                    },
                                                                    "version": {
                                                                        "type": "string",
                                                                        "description": "Hier erfolgt die Versionsangabe der jeweiligen Software.",
                                                                        "minLength": 1,
                                                                        "maxLength": 255
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                },
                                                "purchaser_agencies": {
                                                    "type": "array",
                                                    "description": "Diese Klammer beinhaltet Name und Adresse des Auftraggebers für Agenturumsätze",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "type": "number",
                                                                "description": "Die Referenzierung aller Daten eines Auftraggebers für Agenturumsätze auf eine ID wird an dieser Position durchgeführt. Für die ID werden die Zahlen 1 - 255 akzeptiert. Es werden nur ganze Zahlen akzeptiert. Die Reihenfolge muss in 1-er Schritten aufsteigend sein.",
                                                                "minimum": 1,
                                                                "maximum": 999999999999,
                                                                "multipleOf": 1
                                                            },
                                                            "name": {
                                                                "$ref": "#/definitions/name"
                                                            },
                                                            "address": {
                                                                "$ref": "#/definitions/address"
                                                            },
                                                            "tax_number": {
                                                                "$ref": "#/definitions/tax_number"
                                                            },
                                                            "vat_id_number": {
                                                                "$ref": "#/definitions/vat_id_number"
                                                            }
                                                        }
                                                    }
                                                },
                                                "vat_definitions": {
                                                    "type": "array",
                                                    "description": "Hier werden feste umsatzsteuerliche Referenzierungen vergeben. Die Steuersätze 1-7 sind fest vorgegeben, 8-999 sind reserviert und 1000-9999999999 stehen zur freien Verfügung",
                                                    "items": {
                                                        "type": "object",
                                                        "properties": {
                                                            "id": {
                                                                "oneOf": [
                                                                    {
                                                                        "type": "integer",
                                                                        "minimum": 1,
                                                                        "maximum": 7
                                                                    },
                                                                    {
                                                                        "type": "integer",
                                                                        "minimum": 1000,
                                                                        "maximum": 9999999999
                                                                    }
                                                                ]
                                                            },
                                                            "percentage": {
                                                                "$ref": "#/definitions/percentage"
                                                            },
                                                            "description": {
                                                                "type": "string",
                                                                "minLength": 1,
                                                                "maxLength": 255
                                                            }
                                                        }
                                                    }
                                                },
                                                "base_currency_code": {
                                                    "$ref": "#/definitions/currency"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "cash_statement": {
                    "type": "object",
                    "description": "Alle Bewegungen einer Kasse werden im CashStatement dargestellt. Das Cashstatement einer Kasse stellt in einem Block die Geschäftsvorfälle und in einem zweiten Block die Zahlungsströme dar.",
                    "properties": {
                        "business_cases": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "bc_type": {
                                        "description": "Der Geschäftsvorfall qualifiziert den saldierten Kassenvorgang im Kassenabschluss fachlich und inhaltlich. So kann beispielsweise zwischen Umsatz und Privatentnahme strikt unterschieden werden. BusinessCases mit der Zahlart [keine] werden hier nicht angezeigt. Die weiteren Erläuterungen sind unter PaymentType [keine] zu finden. Es können vom Kassenhersteller bzw. Kassenhändler individuelle Geschäftsvorfälle angelegt werden. Diese sind für den Einzelbon genauso gültig. Dies bietet die Möglichkeit, Besonderheiten für Unternehmer abzubilden.",
                                        "$ref": "#/definitions/bc_type"
                                    },
                                    "purchaser_agency_id": {
                                        "type": "number",
                                        "description": "Der Geschäftsvorfall kann einer Agentur zugewiesen werden. Ein Geschäftsvorfall darf nur einer Agentur zugewiesen werden.",
                                        "minimum": 1,
                                        "maximum": 999999999999
                                    },
                                    "amounts_per_vat_id": {
                                        "description": "Der Geschäftsvorfall pro Agentur untergliedert sich in einen oder mehrere Beträge getrennt nach Umsatzsteuersätzen.",
                                        "$ref": "#/definitions/vat_amounts"
                                    }
                                },
                                "required": [ "bc_type" ]
                            }
                        },
                        "payment": {
                            "type": "object",
                            "description": "Die Zahlart bildet den zweiten Block des CashStatement und untergliedert den gesamten Zahlungsstrom an einer Kasse in verschiedene Zahlarten.",
                            "properties": {
                                "full_amount": {
                                    "$ref": "#/definitions/amount",
                                    "description": "Der Gesamtbetrag stellt den Gesamtbetrag des Zahlungsstromes dar."
                                },
                                "cash_amount": {
                                    "$ref": "#/definitions/amount",
                                    "description": "Der Gesamtbetrag aller Bareinnahmen"
                                },
                                "cash_amounts_by_currency": {
                                    "description": "Eine Aufschlüsselung aller Bareinnahmen nach Währung",
                                    "type": "array",
                                    "items": {
                                        "properties": {
                                            "currency_code": {
                                                "$ref": "#/definitions/currency"
                                            },
                                            "amount": {
                                                "description": "Der Betrag in der entsprechenden Währung",
                                                "$ref": "#/definitions/amount"
                                            }
                                        }
                                    }
                                },
                                "payment_types": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "description": "Jede Kasse muss unterscheiden können zwischen den Zahlarten Bar, Unbar, Keine. Bar kennzeichnet den Gesamtbetrag aller Barzahlungen. Unbar kennzeichnet die Summe aller Zahlungsströme aus Zahlarten die keine Bargeldzahlung darstellen. Verfügt das Kassensystem über die Möglichkeit einzelne Zahlarten erfassen und darstellen zu können, so müssen diese dargestellt werden. Eine momentane Aufstellung der einzelnen Zahlarten ist hinterlegt. Neben dem Kassensystem haben viele Unternehmen weitere Systeme um Grundaufzeichnungen von Geschäftsvorfällen anzufertigen und zu dokumentieren. Im Rahmen der Weiterverarbeitung dieser Systeme ist es wichtig, Doppelverarbeitungen bzw. Verarbeitung von nicht relevanten Vorgängen ausschließen zu können. Aus diesem Grund wurde die Zahlart [Keine] eingeführt. Die Zahlart [Keine] ist der globale Schalter um eine mögliche Weiterverarbeitung aus dem Kassensystem heraus zu verhindern. Auf diese Weise können Trainingsvorgänge, Lieferscheine etc. gekennzeichnet werden, die zu keiner Weiterverarebeitung aus dem Kassensystem heraus bereitgestellt werden sollen. Für einen Einzelbons kann die Zahlart keine mit keiner anderen Zahlart kombiniert werden. ",
                                        "properties": {
                                            "type": {
                                                "$ref": "#/definitions/payment_type"
                                            },
                                            "name": {
                                                "type": "string"
                                            },
                                            "amount": {
                                                "$ref": "#/definitions/amount"
                                            },
                                            "currency_code": {
                                                "$ref": "#/definitions/currency"
                                            },
                                            "foreign_amount": {
                                                "$ref": "#/definitions/amount"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "transactions": {
                    "type": "array",
                    "description": "Bildet die Klammer um alle Einzelbewegungen eines Kassenabschlusses",
                    "items": {
                        "type": "object",
                        "description": "Bildet die Klammer um eine einzige Einzelbewegung. Ist also der Einzelbeleg bzw. der Einzelbon. Auch die Transaktion gliedert sich in Kopf- und Bewegungsdaten.",
                        "properties": {
                            "head": {
                                "type": "object",
                                "description": "Der Transaktionskopf beinhaltet alle Stammdaten zur Einzelbewegung.",
                                "properties": {
                                    "type": {
                                        "$ref": "#/definitions/transaction_type"
                                    },
                                    "closing_cash_register": {
                                        "type": "object",
                                        "properties": {
                                            "id": {
                                                "type": "string"
                                            },
                                            "slave_id": {
                                                "type": "string"
                                            }
                                        }
                                    },
                                    "description": {
                                        "type": "string",
                                        "description": "Optionale Beschreibung der Transaktion (speziell für Transaktionstyp 'Andere Vorgänge')",
                                        "minLength": 1,
                                        "maxLength": 255
                                    },
                                    "storno": {
                                        "type": "boolean",
                                        "description": "Kennzeichnet einen globalen Stornovorgang auf Belegebene."
                                    },
                                    "training": {
                                        "type": "boolean",
                                        "description": "Kennzeichnet einen Trainingsvorgang."
                                    },
                                    "sequence_number": {
                                        "type": "number",
                                        "description": "Die Sequenznummer ist eine Nummer, die vom Kassensystem automatisiert, unabänderlich und in numerisch aufsteigender Form für jeden einzelnen Geschäftsvorfall am Kassensystem vergeben wird. Sie kann im Lebenszyklus einer Kasse nur einmal vorkommen.",
                                        "minimum": 1,
                                        "maximum": 999999999999999
                                    },
                                    "number": {
                                        "type": "number",
                                        "description": "Die Bonnummer ist im Kassenabschluss fortlaufend zu führen. Sie kann sich jedoch im Lebenszyklus einer Kasse wiederholen. ",
                                        "minimum": 1,
                                        "maximum": 999999999999999
                                    },
                                    "timestamp_start": {
                                        "$ref": "#/definitions/timestamp"
                                    },
                                    "timestamp_end": {
                                        "$ref": "#/definitions/timestamp"
                                    },
                                    "user": {
                                        "type": "object",
                                        "description": "Der Benutzer ist die Person, die offiziell für die Abrechnung der Einzelbewegung an der Kasse verantwortlich ist. (Bsp.: Bedienung erfasst bzw. boniert, User kassiert)",
                                        "properties": {
                                            "id": {
                                                "type": "string",
                                                "description": "Der Benutzer hat eine unternehmensinterne Kennung.",
                                                "minLength": 1,
                                                "maxLength": 255
                                            },
                                            "name": {
                                                "type": "string",
                                                "description": "Der Benutzer ist mit seinem Namen im Kassensystem hinterlegt.",
                                                "minLength": 1,
                                                "maxLength": 255
                                            }
                                        }
                                    },
                                    "buyer": {
                                        "type": "object",
                                        "description": "Bildet die Klammer um alle Daten zu einem Käufer. Hintergrund: Ab einem Rechnungsbetrag von 200,00€ ist die sogenannte Kleinbetragsgrenze einer Rechnung überschritten. Dann muss die Käuferadresse erfasst werden. Dazu dienen die Felder unter der Klammer [buyer]. Auch hier gibt es einen Namen und die entsprechende Adresse.",
                                        "properties": {
                                            "name": {
                                                "$ref": "#/definitions/name"
                                            },
                                            "id": {
                                                "type": "string",
                                                "description": "Die Kundennummer des Käufers.",
                                                "minLength": 1,
                                                "maxLength": 255
                                            },
                                            "address": {
                                                "$ref": "#/definitions/address"
                                            },
                                            "vat_id_number": {
                                                "$ref": "#/definitions/vat_id_number",
                                                "description": "Laut §14a UStG ist ggf. auch die Umsatzsteuer-Identifikationsnummer des Leistungsempfängers anzugeben."
                                            }
                                        }
                                    },
                                    "external_delivery_numbers": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 50
                                        }
                                    },
                                    "allocation_groups": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "description": "Der Abrechnungskreis ist eine variable Einheit, mit der eine Einzelbewegung einem bestimmten Kriterium (Tisch, Abteilung etc.) zugeordnet werden kann.",
                                            "minLength": 1,
                                            "maxLength": 255
                                        }
                                    }
                                }
                            },
                            "data": {
                                "type": "object",
                                "description": "Bildet die Klammer um alle Bewegungsdaten eines Einzelbons. TransactionData unterscheiden die Daten in Gesamtbetrag mit Aufteilung in Zahlarten und umsatzsteuerliche Sachverhalte, Zusatznotizen, BonPositionen mit Artikel oder Warengruppenbezug und Bon Positionen ohne Artikel oder Warengruppenbezug.",
                                "properties": {
                                    "full_amount_incl_vat": {
                                        "$ref": "#/definitions/amount"
                                    },
                                    "payment_types": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "description": "Unterteilung der gezahlten Beträge nach Zahlart und Währung.",
                                            "properties": {
                                                "type": {
                                                    "$ref": "#/definitions/payment_type"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "currency_code": {
                                                    "$ref": "#/definitions/currency"
                                                },
                                                "foreign_amount": {
                                                    "$ref": "#/definitions/amount"
                                                },
                                                "amount": {
                                                    "$ref": "#/definitions/amount"
                                                }
                                            }
                                        }
                                    },
                                    "amounts_per_vat_id": {
                                        "description": "Aufteilung des Gesamtbetrages einer Transaktion in die Einzelbeträge nach ausgewiesenen Umsatzsteuersätzen.",
                                        "$ref": "#/definitions/vat_amounts"
                                    },
                                    "notes": {
                                        "type": "string",
                                        "description": "Unter [notes] werden entsprechende Zusatznotizen erfasst.",
                                        "minLength": 1,
                                        "maxLength": 255
                                    },
                                    "lines": {
                                        "type": "array",
                                        "description": "Jeder Bon der ein Geschäft an der Kasse definiert, wird als Transaktion bezeichnet. Eine Transaktion kann aus einer oder mehreren Teiltransaktionen bestehen. Diese Teiltransaktionen werden im Folgenden [lines] genannt. Die Taxonomie unterscheidet zwischen ItemLine und TypeLine. Die ItemLine steht für Geschäftsvorfälle, die einen Bezug zu einem Artikel, Produkt oder einer Warengruppe besitzen.",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "bc_type": {
                                                    "$ref": "#/definitions/bc_type"
                                                },
                                                "line_number": {
                                                    "type": "string"
                                                },
                                                "source_cash_register": {
                                                    "type": "object",
                                                    "properties": {
                                                        "id": {
                                                            "type": "string"
                                                        },
                                                        "slave_id": {
                                                            "type": "string"
                                                        }
                                                    }
                                                },
                                                "in_house": {
                                                    "type": "boolean",
                                                    "description": "Kennzeichnet einen in_house Verkauf bzw. außerhausverkauf"
                                                },
                                                "storno": {
                                                    "type": "boolean",
                                                    "description": "Kennzeichnet einen Stornovorgang auf Line-Ebene."
                                                },
                                                "purchaser_agency_id": {
                                                    "type": "number",
                                                    "description": "Die Teiltransaktion kann einer Agentur zugewiesen werden.",
                                                    "minimum": 1,
                                                    "maximum": 999999999999
                                                },
                                                "external_invoice_number": {
                                                    "type": "string",
                                                    "description": "Die externe Rechnungsnummer gibt dem Unternehmer die Möglichkeit, die Rechnungsnummer einer aus einem Fakturasystem erstellten und bereits gebuchten Rechnung zu erfassen und somit einen Zusammenhang zwischen dem Kassenbon und der Faktura-Rechnung herzustellen. Ebenso kann bei Zahlung einer Eingangsrechnung aus der Kasse eine Verbindung von Kassenbon und Eingangsrechnung geschaffen werden.",
                                                    "minLength": 1,
                                                    "maxLength": 255
                                                },
                                                "amounts_per_vat_id": {
                                                    "description": "Gesamt-Umsatz der Zeile pro Steuersatz inkl. Rabatt/Aufschlag",
                                                    "$ref": "#/definitions/vat_amounts"
                                                },
                                                "text": {
                                                    "type": "string",
                                                    "description": "Bezeichnung der Line bzw. Name des Items.",
                                                    "minLength": 1,
                                                    "maxLength": 255
                                                },
                                                "item": {
                                                    "type": "object",
                                                    "description": "Der Item stellt die Bezeichnung für einen Artikel, ein Produkt bestehend aus mehreren Artikeln bzw. einer Warengruppe dar.",
                                                    "properties": {
                                                        "number": {
                                                            "type": "string",
                                                            "description": "Bezeichnet eine eindeutige Nummer, mit der der Artikel, das Produkt bzw. die Warengruppe in den Systemen des Unternehmens gepflegt und verwaltet wird.",
                                                            "minLength": 1,
                                                            "maxLength": 255
                                                        },
                                                        "gtin": {
                                                            "type": "string",
                                                            "description": "Die Global Trade Item Number (GTIN) ist eine internationale, unverwechselbare Nummer zur Kennzeichnung von Produkten. Sie wird weltweit von der GS1 verwaltet und vergeben. Die früher übliche Bezeichnung European Article Number (EAN) wurde 2009 von der GTIN abgelöst. ",
                                                            "minLength": 1,
                                                            "maxLength": 255
                                                        },
                                                        "quantity": {
                                                            "$ref": "#/definitions/quantity"
                                                        },
                                                        "quantity_factor": {
                                                            "type": "number",
                                                            "minimum": 0.000,
                                                            "multipleOf": 0.001,
                                                            "exclusiveMinimum": true
                                                        },
                                                        "quantity_measure": {
                                                            "type": "string",
                                                            "description": "Measure bezeichnet die Maßeinheit. Ist das Feld Maßeinheit leer, so gilt automatisch die Einheit Stück",
                                                            "minLength": 1,
                                                            "maxLength": 255
                                                        },
                                                        "group_id": {
                                                            "type": "integer",
                                                            "minimum": 1,
                                                            "maximum": 999999999999
                                                        },
                                                        "group_name": {
                                                            "type": "string",
                                                            "minLength": 1,
                                                            "maxLength": 255
                                                        },
                                                        "price_per_unit": {
                                                            "$ref": "#/definitions/amount"
                                                        },
                                                        "base_amounts_per_vat_id": {
                                                            "description": "Der Artikelumsatz pro Steuersatz ohne Berücksichtigung von Rabatt und Aufschlag",
                                                            "$ref": "#/definitions/vat_amounts"
                                                        },
                                                        "discounts_per_vat_id": {
                                                            "description": "Der Artikelrabatt pro Steuersatz",
                                                            "$ref": "#/definitions/vat_amounts"
                                                        },
                                                        "extra_amounts_per_vat_id": {
                                                            "description": "Der Artikelaufschlag pro Steuersatz",
                                                            "$ref": "#/definitions/vat_amounts"
                                                        },
                                                        "sub_items": {
                                                            "type": "array",
                                                            "description": "Die SubItems schaffen die Möglichkeit, die Zusammensetzung von verkauften Produkten bzw. Warengruppenbezeichnungen auf Artikelebene zu erklären. Beispiel: MenüI = Cola und Hamburger. Die SubItems müssen nicht gefüllt werden. Sie haben erklärenden Charakter und keine Aussagekraft bezüglich Preis und Umsatzsteuer.",
                                                            "items": {
                                                                "type": "object",
                                                                "properties": {
                                                                    "number": {
                                                                        "type": "string",
                                                                        "minLength": 1,
                                                                        "maxLength": 255
                                                                    },
                                                                    "gtin": {
                                                                        "type": "string",
                                                                        "minLength": 1,
                                                                        "maxLength": 255
                                                                    },
                                                                    "name": {
                                                                        "type": "string",
                                                                        "minLength": 1,
                                                                        "maxLength": 255
                                                                    },
                                                                    "quantity": {
                                                                        "$ref": "#/definitions/quantity"
                                                                    },
                                                                    "quantity_factor": {
                                                                        "type": "number",
                                                                        "minimum": 0.00,
                                                                        "multipleOf": 0.01,
                                                                        "exclusiveMinimum": true
                                                                    },
                                                                    "quantity_measure": {
                                                                        "type": "string",
                                                                        "description": "Measure bezeichnet die Maßeinheit. Ist das Feld Maßeinheit leer, so gilt automatisch die Einheit Stück",
                                                                        "minLength": 1,
                                                                        "maxLength": 255
                                                                    },
                                                                    "group_id": {
                                                                        "type": "integer",
                                                                        "minimum": 1,
                                                                        "maximum": 999999999999
                                                                    },
                                                                    "group_name": {
                                                                        "type": "string",
                                                                        "minLength": 1,
                                                                        "maxLength": 255
                                                                    },
                                                                    "amount_per_vat_id": {
                                                                        "$ref": "#/definitions/vat_amount"
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            },
                                            "required": ["bc_type"]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}