[#ftl output_format="XML"]
[#--
Notes:
/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:ExemptionReason is set to ??? but maybe we should use something else.
--]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rsm:CrossIndustryInvoice xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100" xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100">
    <rsm:ExchangedDocumentContext>
        <ram:GuidelineSpecifiedDocumentContextParameter>
            <ram:ID>urn:cen.eu:en16931:2017#conformant#urn:zugferd.de:2p0:extended</ram:ID>
        </ram:GuidelineSpecifiedDocumentContextParameter>
    </rsm:ExchangedDocumentContext>
    <rsm:ExchangedDocument>
        <ram:ID>${invoice.number}</ram:ID>
        <ram:TypeCode>380</ram:TypeCode>
        <ram:IssueDateTime>
            <udt:DateTimeString format="102">${invoice.date?date?string("yyyyMMdd")}</udt:DateTimeString>
        </ram:IssueDateTime>
        <ram:IncludedNote>
            <ram:Content></ram:Content>
        </ram:IncludedNote>
    </rsm:ExchangedDocument>
    <rsm:SupplyChainTradeTransaction>
        [#list invoice.items as item]
        <ram:IncludedSupplyChainTradeLineItem>
            <ram:AssociatedDocumentLineDocument>
                <ram:LineID>${(item?index + 1)?string('#')}</ram:LineID>
            </ram:AssociatedDocumentLineDocument>
            <ram:SpecifiedTradeProduct>
                <ram:Name>${item.name}</ram:Name>
            </ram:SpecifiedTradeProduct>
            <ram:SpecifiedLineTradeAgreement>
                <ram:NetPriceProductTradePrice>
                    <ram:ChargeAmount>${item.regularPrice.amount?string("###0.0000")}</ram:ChargeAmount>
                </ram:NetPriceProductTradePrice>
            </ram:SpecifiedLineTradeAgreement>
            <ram:SpecifiedLineTradeDelivery>
                <ram:BilledQuantity unitCode="[#if item.quantityType.id == 1]HUR[#else]C62[/#if]">${item.quantity?string("###0.0000")}</ram:BilledQuantity>
            </ram:SpecifiedLineTradeDelivery>
            <ram:SpecifiedLineTradeSettlement>
            [#if item.taxable]
            	[#assign taxGroup = item.taxGroupEnabled?then(item.taxGroup, invoice.invoice.taxGroup)]
            	[#list taxGroup.taxes as tax]
                <ram:ApplicableTradeTax>
                    <ram:TypeCode>VAT</ram:TypeCode>
                    <ram:CategoryCode>S</ram:CategoryCode>
                    <ram:RateApplicablePercent>${tax.defaultRate.rate * 100}</ram:RateApplicablePercent>
                </ram:ApplicableTradeTax>
            	[/#list]
            [#else]
                <ram:ApplicableTradeTax>
                    <ram:TypeCode>VAT</ram:TypeCode>
                    <ram:CategoryCode>E</ram:CategoryCode>
                    <ram:RateApplicablePercent>0.00</ram:RateApplicablePercent>
                </ram:ApplicableTradeTax>
            [/#if]
                <ram:SpecifiedTradeSettlementLineMonetarySummation>
                    <ram:LineTotalAmount>${item.total.amount?string("###0.0000")}</ram:LineTotalAmount>
                </ram:SpecifiedTradeSettlementLineMonetarySummation>
            </ram:SpecifiedLineTradeSettlement>
        </ram:IncludedSupplyChainTradeLineItem>
        [/#list]
        <ram:ApplicableHeaderTradeAgreement>
            <ram:SellerTradeParty>
                <ram:Name>${business.name}</ram:Name>
                <ram:PostalTradeAddress>
                    <ram:PostcodeCode>${business.zip}</ram:PostcodeCode>
                    <ram:LineOne>${business.address}</ram:LineOne>
                    <ram:CityName>${business.city}</ram:CityName>[#if business.country?length != 0]
                    <ram:CountryID>${business.country}</ram:CountryID>[/#if]
                </ram:PostalTradeAddress>
                [#if business.taxNumber?length != 0]
                <ram:SpecifiedTaxRegistration>
                    <ram:ID schemeID="VA">${business.taxNumber}</ram:ID>
                </ram:SpecifiedTaxRegistration>
                [/#if]
            </ram:SellerTradeParty>
            <ram:BuyerTradeParty>
                <ram:Name>${client.name}</ram:Name>
                <ram:PostalTradeAddress>
                    <ram:PostcodeCode>${client.zip}</ram:PostcodeCode>
                    <ram:LineOne>${client.address}</ram:LineOne>
                    <ram:CityName>${client.city}</ram:CityName>[#if client.country?length != 0]
                    <ram:CountryID>${client.country}</ram:CountryID>[/#if]
                </ram:PostalTradeAddress>
                [#if client.taxNumber?length != 0]
                <ram:SpecifiedTaxRegistration>
                    <ram:ID schemeID="VA">${client.taxNumber}</ram:ID>
                </ram:SpecifiedTaxRegistration>
                [/#if]
            </ram:BuyerTradeParty>
        </ram:ApplicableHeaderTradeAgreement>
        <ram:ApplicableHeaderTradeDelivery>
            <ram:ActualDeliverySupplyChainEvent>
                <ram:OccurrenceDateTime>
                    <udt:DateTimeString format="102">${invoice.date?date?string("yyyyMMdd")}</udt:DateTimeString>
                </ram:OccurrenceDateTime>
            </ram:ActualDeliverySupplyChainEvent>
        </ram:ApplicableHeaderTradeDelivery>
        <ram:ApplicableHeaderTradeSettlement>
            <ram:InvoiceCurrencyCode>${invoice.currency.currencyCode}</ram:InvoiceCurrencyCode>
            [#-- Uncomment to add payment details like IBAN and BIC
            10 : Bargeld
            20 : Scheck
            30 : Überweisung
            42 : Payment to bank account
            48 : Kartenzahlung
            49 : Lastschrift
            57 : Dauerauftrag
            58 : SEPA Credit Transfer
            59 : SEPA Direct Debit
            97 : Report
            <ram:SpecifiedTradeSettlementPaymentMeans>
                <ram:TypeCode>30</ram:TypeCode>
                <ram:PayeePartyCreditorFinancialAccount>
                    <ram:IBANID>DE12500105170648489890</ram:IBANID>
                </ram:PayeePartyCreditorFinancialAccount>
            </ram:SpecifiedTradeSettlementPaymentMeans>
            --]
            [#list invoice.taxes as tax]
            <ram:ApplicableTradeTax>
                <ram:CalculatedAmount>${invoice.getTaxTotal(tax).amount?string("###0.00")}</ram:CalculatedAmount>
                <ram:TypeCode>VAT</ram:TypeCode>
                <ram:BasisAmount>${invoice.getTaxTotal(tax).multiply(1 / tax.defaultRate.rate).amount?string("###0.00")}</ram:BasisAmount>
                <ram:CategoryCode>S</ram:CategoryCode>
                <ram:RateApplicablePercent>${tax.defaultRate.rate * 100}</ram:RateApplicablePercent>
            </ram:ApplicableTradeTax>
            [/#list]
            [#assign hasTaxExemptItems = false]
            [#assign taxExemptAmount = invoice.total.multiply(0)]
            [#list invoice.items as item]
                [#if !item.taxable]
                    [#assign hasTaxExemptItems = true]
                    [#assign taxExemptAmount = taxExemptAmount.add(item.total)]
                [/#if]
            [/#list]
            [#if hasTaxExemptItems]
            <ram:ApplicableTradeTax>
                <ram:CalculatedAmount>0.00</ram:CalculatedAmount>
                <ram:TypeCode>VAT</ram:TypeCode>
                <ram:ExemptionReason>????</ram:ExemptionReason>
                <ram:BasisAmount>${taxExemptAmount.amount?string("###0.00")}</ram:BasisAmount>
                <ram:CategoryCode>E</ram:CategoryCode>
                <ram:RateApplicablePercent>0.00</ram:RateApplicablePercent>
            </ram:ApplicableTradeTax>
            [/#if]
	        <ram:SpecifiedTradePaymentTerms>
                <ram:DueDateDateTime>
                    <udt:DateTimeString format="102">${invoice.dueDate?date?string("yyyyMMdd")}</udt:DateTimeString>
                </ram:DueDateDateTime>
            </ram:SpecifiedTradePaymentTerms>
            <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
                <ram:LineTotalAmount>${invoice.total.amount?string("###0.00")}</ram:LineTotalAmount>
                <ram:ChargeTotalAmount>0.00</ram:ChargeTotalAmount>
                <ram:AllowanceTotalAmount>0.00</ram:AllowanceTotalAmount>
                <ram:TaxBasisTotalAmount>${invoice.total.amount?string("###0.00")}</ram:TaxBasisTotalAmount>
                <ram:TaxTotalAmount currencyID="${invoice.taxesTotal.currency.currencyCode}">${invoice.taxesTotal.amount?string("###0.00")}</ram:TaxTotalAmount>
                <ram:GrandTotalAmount>${invoice.grandTotal.amount?string("###0.00")}</ram:GrandTotalAmount>
                <ram:TotalPrepaidAmount>${invoice.paymentsTotal.amount?string("###0.00")}</ram:TotalPrepaidAmount>
                <ram:DuePayableAmount>${invoice.balance.amount?string("###0.00")}</ram:DuePayableAmount>
            </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
        </ram:ApplicableHeaderTradeSettlement>
    </rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>