UNPKG

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
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateCrossIndustryInvoiceXml = void 0; function generateCrossIndustryInvoiceXml(invoice) { var escapeXml = function (str) { return str .replace(/&/g, '&amp;') .replace(/</g, '&lt;') .replace(/>/g, '&gt;') .replace(/"/g, '&quot;') .replace(/'/g, '&apos;'); }; 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;