easy-e-invoice
Version:
Easy invoice XRechnung is a standardized electronic invoice format developed to comply with the European Directive 2014/55/EU
85 lines (84 loc) • 14.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateCrossIndustryInvoiceXml = void 0;
function generateCrossIndustryInvoiceXml(invoice) {
var escapeXml = function (str) {
return str
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
};
var renderDateTime = function (dt) {
return "<udt:DateTimeString format=\"".concat(escapeXml(dt.format), "\">").concat(escapeXml(dt.value), "</udt:DateTimeString>");
};
var renderContextParameter = function (param, tag) {
return "<ram:".concat(tag, "><ram:ID>").concat(escapeXml(param.id), "</ram:ID></ram:").concat(tag, ">");
};
var renderIncludedNotes = function (notes) {
return notes
.map(function (note) { return "\n <ram:IncludedNote>\n <ram:Content>".concat(escapeXml(note.content), "</ram:Content>\n <ram:SubjectCode>").concat(escapeXml(note.subjectCode), "</ram:SubjectCode>\n </ram:IncludedNote>"); })
.join('');
};
var renderExchangedDocumentContext = function (ctx) { return "\n <rsm:ExchangedDocumentContext>\n ".concat(renderContextParameter(ctx.businessProcessSpecifiedDocumentContextParameter, 'BusinessProcessSpecifiedDocumentContextParameter'), "\n ").concat(renderContextParameter(ctx.guidelineSpecifiedDocumentContextParameter, 'GuidelineSpecifiedDocumentContextParameter'), "\n </rsm:ExchangedDocumentContext>"); };
var renderExchangedDocument = function (doc) { return "\n <rsm:ExchangedDocument>\n <ram:ID>".concat(escapeXml(doc.id), "</ram:ID>\n <ram:TypeCode>").concat(escapeXml(doc.typeCode), "</ram:TypeCode>\n <ram:IssueDateTime>\n ").concat(renderDateTime(doc.issueDateTime), "\n </ram:IssueDateTime>\n ").concat(renderIncludedNotes(doc.includedNotes), "\n </rsm:ExchangedDocument>"); };
var renderDocumentLine = function (line) {
return "<ram:LineID>".concat(escapeXml(line.lineID), "</ram:LineID>");
};
var renderSpecifiedTradeProduct = function (prod) { return "\n <ram:SpecifiedTradeProduct>\n <ram:SellerAssignedID>".concat(escapeXml(prod.sellerAssignedID), "</ram:SellerAssignedID>\n <ram:BuyerAssignedID>").concat(escapeXml(prod.buyerAssignedID), "</ram:BuyerAssignedID>\n <ram:Name>").concat(escapeXml(prod.name), "</ram:Name>\n <ram:Description>").concat(escapeXml(prod.description), "</ram:Description>\n </ram:SpecifiedTradeProduct>"); };
var renderSpecifiedLineTradeAgreement = function (agr) { return "\n <ram:SpecifiedLineTradeAgreement>\n <ram:BuyerOrderReferencedDocument>\n ".concat(renderDocumentLine(agr.buyerOrderReferencedDocument), "\n </ram:BuyerOrderReferencedDocument>\n <ram:NetPriceProductTradePrice>\n <ram:ChargeAmount>").concat(escapeXml(agr.netPriceProductTradePrice.chargeAmount), "</ram:ChargeAmount>\n </ram:NetPriceProductTradePrice>\n </ram:SpecifiedLineTradeAgreement>"); };
var renderSpecifiedLineTradeDelivery = function (del) { return "\n <ram:SpecifiedLineTradeDelivery>\n <ram:BilledQuantity unitCode=\"".concat(escapeXml(del.billedQuantity.unitCode), "\">").concat(escapeXml(del.billedQuantity.value), "</ram:BilledQuantity>\n </ram:SpecifiedLineTradeDelivery>"); };
var renderTradeTax = function (tax) { return "\n <ram:ApplicableTradeTax>\n ".concat(tax.calculatedAmount
? "<ram:CalculatedAmount>".concat(escapeXml(tax.calculatedAmount), "</ram:CalculatedAmount>")
: '', "\n <ram:TypeCode>").concat(escapeXml(tax.typeCode), "</ram:TypeCode>\n ").concat(tax.basisAmount
? "<ram:BasisAmount>".concat(escapeXml(tax.basisAmount), "</ram:BasisAmount>")
: '', "\n <ram:CategoryCode>").concat(escapeXml(tax.categoryCode), "</ram:CategoryCode>\n <ram:RateApplicablePercent>").concat(escapeXml(tax.rateApplicablePercent), "</ram:RateApplicablePercent>\n </ram:ApplicableTradeTax>"); };
var renderBillingPeriod = function (period) { return "\n <ram:BillingSpecifiedPeriod>\n ".concat(period.startDateTime
? "<ram:StartDateTime>".concat(renderDateTime(period.startDateTime), "</ram:StartDateTime>")
: '', "\n <ram:EndDateTime>").concat(renderDateTime(period.endDateTime), "</ram:EndDateTime>\n </ram:BillingSpecifiedPeriod>"); };
var renderLineMonetarySummation = function (sum) { return "\n <ram:SpecifiedTradeSettlementLineMonetarySummation>\n <ram:LineTotalAmount>".concat(escapeXml(sum.lineTotalAmount), "</ram:LineTotalAmount>\n </ram:SpecifiedTradeSettlementLineMonetarySummation>"); };
var renderAdditionalReferencedDocument = function (doc) { return "\n <ram:AdditionalReferencedDocument>\n <ram:IssuerAssignedID>".concat(escapeXml(doc.issuerAssignedID), "</ram:IssuerAssignedID>\n <ram:TypeCode>").concat(escapeXml(doc.typeCode), "</ram:TypeCode>\n </ram:AdditionalReferencedDocument>"); };
var renderSupplyChainTradeLineItem = function (item) { return "\n <ram:IncludedSupplyChainTradeLineItem>\n <ram:AssociatedDocumentLineDocument>\n ".concat(renderDocumentLine(item.associatedDocumentLineDocument), "\n </ram:AssociatedDocumentLineDocument>\n ").concat(renderSpecifiedTradeProduct(item.specifiedTradeProduct), "\n ").concat(renderSpecifiedLineTradeAgreement(item.specifiedLineTradeAgreement), "\n ").concat(renderSpecifiedLineTradeDelivery(item.specifiedLineTradeDelivery), "\n <ram:SpecifiedLineTradeSettlement>\n ").concat(renderTradeTax(item.specifiedLineTradeSettlement.applicableTradeTax), "\n ").concat(renderBillingPeriod(item.specifiedLineTradeSettlement.billingSpecifiedPeriod), "\n ").concat(renderLineMonetarySummation(item.specifiedLineTradeSettlement
.specifiedTradeSettlementLineMonetarySummation), "\n ").concat(renderAdditionalReferencedDocument(item.specifiedLineTradeSettlement.additionalReferencedDocument), "\n </ram:SpecifiedLineTradeSettlement>\n </ram:IncludedSupplyChainTradeLineItem>"); };
var renderLegalOrganization = function (org) { return "\n <ram:SpecifiedLegalOrganization>\n <ram:ID>".concat(escapeXml(org.id), "</ram:ID>\n <ram:TradingBusinessName>").concat(escapeXml(org.tradingBusinessName), "</ram:TradingBusinessName>\n </ram:SpecifiedLegalOrganization>"); };
var renderTradeContact = function (c) { return "\n <ram:DefinedTradeContact>\n <ram:PersonName>".concat(escapeXml(c.personName), "</ram:PersonName>\n <ram:TelephoneUniversalCommunication>\n <ram:CompleteNumber>").concat(escapeXml(c.telephoneUniversalCommunication.uriID), "</ram:CompleteNumber>\n </ram:TelephoneUniversalCommunication>\n <ram:EmailURIUniversalCommunication>\n <ram:URIID>").concat(escapeXml(c.emailURIUniversalCommunication.uriID), "</ram:URIID>\n </ram:EmailURIUniversalCommunication>\n </ram:DefinedTradeContact>"); };
var renderPostalAddress = function (a) { return "\n <ram:PostalTradeAddress>\n <ram:PostcodeCode>".concat(escapeXml(a.postcodeCode), "</ram:PostcodeCode>\n <ram:LineOne>").concat(escapeXml(a.lineOne), "</ram:LineOne>\n <ram:CityName>").concat(escapeXml(a.cityName), "</ram:CityName>\n <ram:CountryID>").concat(escapeXml(a.countryID), "</ram:CountryID>\n ").concat(a.countrySubDivisionName
? "<ram:CountrySubDivisionName>".concat(escapeXml(a.countrySubDivisionName), "</ram:CountrySubDivisionName>")
: '', "\n </ram:PostalTradeAddress>"); };
var renderURICommunication = function (u, tag) { return "\n <ram:".concat(tag, ">\n <ram:URIID").concat(u.schemeID ? " schemeID=\"".concat(escapeXml(u.schemeID), "\"") : '', ">").concat(escapeXml(u.uriID), "</ram:URIID>\n </ram:").concat(tag, ">"); };
var renderTaxRegistrations = function (regs) {
if (regs === void 0) { regs = []; }
return regs
.map(function (r) { return "\n <ram:SpecifiedTaxRegistration>\n <ram:ID schemeID=\"".concat(escapeXml(r.schemeID), "\">").concat(escapeXml(r.id), "</ram:ID>\n </ram:SpecifiedTaxRegistration>"); })
.join('');
};
var renderTradeParty = function (p, tag) { return "\n <ram:".concat(tag, ">\n ").concat(p.id ? "<ram:ID>".concat(escapeXml(p.id), "</ram:ID>") : '', "\n <ram:Name>").concat(escapeXml(p.name), "</ram:Name>\n ").concat(p.description
? "<ram:Description>".concat(escapeXml(p.description), "</ram:Description>")
: '', "\n ").concat(p.specifiedLegalOrganization
? renderLegalOrganization(p.specifiedLegalOrganization)
: '', "\n ").concat(p.definedTradeContact ? renderTradeContact(p.definedTradeContact) : '', "\n ").concat(renderPostalAddress(p.postalTradeAddress), "\n ").concat(p.uriUniversalCommunication
? renderURICommunication(p.uriUniversalCommunication, 'URIUniversalCommunication')
: '', "\n ").concat(renderTaxRegistrations(p.specifiedTaxRegistrations), "\n </ram:").concat(tag, ">"); };
var renderHeaderTradeAgreement = function (h) { return "\n <ram:ApplicableHeaderTradeAgreement>\n <ram:BuyerReference>".concat(escapeXml(h.buyerReference), "</ram:BuyerReference>\n ").concat(renderTradeParty(h.sellerTradeParty, 'SellerTradeParty'), "\n ").concat(renderTradeParty(h.buyerTradeParty, 'BuyerTradeParty'), "\n <ram:SellerOrderReferencedDocument>\n <ram:IssuerAssignedID>").concat(escapeXml(h.sellerOrderReferencedDocument.issuerAssignedID), "</ram:IssuerAssignedID>\n </ram:SellerOrderReferencedDocument>\n <ram:BuyerOrderReferencedDocument>\n <ram:IssuerAssignedID>").concat(escapeXml(h.buyerOrderReferencedDocument.issuerAssignedID), "</ram:IssuerAssignedID>\n </ram:BuyerOrderReferencedDocument>\n <ram:ContractReferencedDocument>\n <ram:IssuerAssignedID>").concat(escapeXml(h.contractReferencedDocument.issuerAssignedID), "</ram:IssuerAssignedID>\n </ram:ContractReferencedDocument>\n ").concat(renderAdditionalReferencedDocument(h.additionalReferencedDocument), "\n </ram:ApplicableHeaderTradeAgreement>"); };
var renderHeaderTradeDelivery = function (d) { return "\n <ram:ApplicableHeaderTradeDelivery>\n ".concat(renderTradeParty(d.shipToTradeParty, 'ShipToTradeParty'), "\n </ram:ApplicableHeaderTradeDelivery>"); };
var renderPaymentMeans = function (pm) { return "\n <ram:SpecifiedTradeSettlementPaymentMeans>\n <ram:TypeCode>".concat(escapeXml(pm.typeCode), "</ram:TypeCode>\n <ram:PayeePartyCreditorFinancialAccount>\n <ram:IBANID>").concat(escapeXml(pm.payeePartyCreditorFinancialAccount.iBANID), "</ram:IBANID>\n </ram:PayeePartyCreditorFinancialAccount>\n <ram:PayeeSpecifiedCreditorFinancialInstitution>\n <ram:BICID>").concat(escapeXml(pm.payeeSpecifiedCreditorFinancialInstitution.bICID), "</ram:BICID>\n </ram:PayeeSpecifiedCreditorFinancialInstitution>\n </ram:SpecifiedTradeSettlementPaymentMeans>"); };
var renderPaymentTerms = function (pt) { return "\n <ram:SpecifiedTradePaymentTerms>\n <ram:Description>".concat(escapeXml(pt.description), "</ram:Description>\n </ram:SpecifiedTradePaymentTerms>"); };
var renderHeaderMonetarySummation = function (s) {
return "\n <ram:SpecifiedTradeSettlementHeaderMonetarySummation>\n <ram:LineTotalAmount>".concat(escapeXml(s.lineTotalAmount), "</ram:LineTotalAmount>\n <ram:TaxBasisTotalAmount>").concat(escapeXml(s.taxBasisTotalAmount), "</ram:TaxBasisTotalAmount>\n <ram:TaxTotalAmount currencyID=\"").concat(escapeXml(s.taxTotalCurrencyID), "\">").concat(escapeXml(s.taxTotalAmount), "</ram:TaxTotalAmount>\n <ram:GrandTotalAmount>").concat(escapeXml(s.grandTotalAmount), "</ram:GrandTotalAmount>\n <ram:DuePayableAmount>").concat(escapeXml(s.duePayableAmount), "</ram:DuePayableAmount>\n </ram:SpecifiedTradeSettlementHeaderMonetarySummation>");
};
// Build the full XML
var xml = "\n<rsm:CrossIndustryInvoice xmlns:rsm=\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100\" xmlns:qdt=\"urn:un:unece:uncefact:data:standard:QualifiedDataType:100\" xmlns:ram=\"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100\" xmlns:udt=\"urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100\">\n ".concat(renderExchangedDocumentContext(invoice.exchangedDocumentContext), "\n ").concat(renderExchangedDocument(invoice.exchangedDocument), "\n <rsm:SupplyChainTradeTransaction>\n ").concat(invoice.supplyChainTradeTransaction.includedSupplyChainTradeLineItems
.map(renderSupplyChainTradeLineItem)
.join(''), "\n ").concat(renderHeaderTradeAgreement(invoice.supplyChainTradeTransaction.applicableHeaderTradeAgreement), "\n ").concat(renderHeaderTradeDelivery(invoice.supplyChainTradeTransaction.applicableHeaderTradeDelivery), "\n <ram:ApplicableHeaderTradeSettlement>\n <ram:PaymentReference>").concat(escapeXml(invoice.supplyChainTradeTransaction.applicableHeaderTradeSettlement
.paymentReference), "</ram:PaymentReference>\n <ram:InvoiceCurrencyCode>").concat(escapeXml(invoice.supplyChainTradeTransaction.applicableHeaderTradeSettlement
.invoiceCurrencyCode), "</ram:InvoiceCurrencyCode>\n ").concat(renderPaymentMeans(invoice.supplyChainTradeTransaction.applicableHeaderTradeSettlement
.specifiedTradeSettlementPaymentMeans), "\n ").concat(renderTradeTax(invoice.supplyChainTradeTransaction.applicableHeaderTradeSettlement
.applicableTradeTax), "\n ").concat(renderBillingPeriod(invoice.supplyChainTradeTransaction.applicableHeaderTradeSettlement
.billingSpecifiedPeriod), "\n ").concat(renderPaymentTerms(invoice.supplyChainTradeTransaction.applicableHeaderTradeSettlement
.specifiedTradePaymentTerms), "\n ").concat(renderHeaderMonetarySummation(invoice.supplyChainTradeTransaction.applicableHeaderTradeSettlement
.specifiedTradeSettlementHeaderMonetarySummation), "\n </ram:ApplicableHeaderTradeSettlement>\n </rsm:SupplyChainTradeTransaction>\n</rsm:CrossIndustryInvoice>");
//remove multiple whitespaces
return xml;
}
exports.generateCrossIndustryInvoiceXml = generateCrossIndustryInvoiceXml;