UNPKG

ubl2json

Version:

Türkiye e-Belge sistemi için kullanılan UBLTR XML formatındaki belgelerin json objesine dönüştürülmesi için kullanılan paket.

131 lines (124 loc) 5.32 kB
const _ = require('lodash'); const setDefaults = (args) => { return { setBuyerCustomerToReceiverForExportInvoices: args?.setBuyerCustomerToReceiverForExportInvoices || false, }; }; const taxSubtotalNormalizer = (taxTotal) => { const taxSubtotal = _.map(taxTotal.TaxSubtotal, (taxSub) => { return { name: taxSub.TaxCategory?.TaxScheme?.Name?.val, code: taxSub.TaxCategory?.TaxScheme?.TaxTypeCode?.val, percent: taxSub.Percent?.val, taxable: taxSub.TaxableAmount?.val, taxable_currency: taxSub.TaxableAmount?.currencyID, tax_exemption_reason_code: taxSub.TaxCategory?.TaxExemptionReasonCode?.val, amount: taxSub.TaxAmount?.val, amount_currency: taxSub.TaxAmount?.currencyID, }; }); return taxSubtotal; }; const allowanceChargeNormalizer = (allowanceCharge) => { const allowanceChargeArray = _.map(allowanceCharge, (charge) => { return { is_charge: charge.ChargeIndicator?.val, reason: charge.AllowanceChargeReason?.val, multiplier: charge.MultiplierFactorNumeric?.val || 0, amount: charge.Amount?.val || 0, amount_currency: charge.Amount?.currencyID, base_amount: charge.BaseAmount?.val || 0, base_amount_currency: charge.BaseAmount?.currencyID, }; }); return allowanceChargeArray; }; const linesNormalizer = (linesArray) => { const lines = _.map(linesArray, (line) => { let withholding = {}; if (line.WithholdingTaxTotal) { withholding = { withholding_tax_total: line.WithholdingTaxTotal[0]?.TaxAmount?.val, withholding_tax_subtotals: taxSubtotalNormalizer(line.WithholdingTaxTotal[0]), }; } return { id: line.ID?.val, name: line.Item[0]?.Name?.val, note: line.Note?.val, quantity: line.InvoicedQuantity?.val || 0, quantity_unit: line.InvoicedQuantity?.unitCode, price: line.Price.PriceAmount?.val || 0, price_currency: line.Price?.PriceAmount?.currencyID, extension_amount: line.LineExtensionAmount?.val || 0, extension_amount_currency: line.LineExtensionAmount?.currencyID, allowances: allowanceChargeNormalizer(line.AllowanceCharge), tax_total: line.TaxTotal ? line.TaxTotal[0]?.TaxAmount?.val : 0, tax_subtotals: taxSubtotalNormalizer(line.TaxTotal ? line.TaxTotal[0] : { TaxSubtotal: [] }), ...withholding, additional: { description: line.Item[0]?.Description?.[0]?.val || null, keyword: line.Item[0]?.Keyword?.val || null, brand_name: line.Item[0]?.BrandName?.val || null, model_name: line.Item[0]?.ModelName?.val || null, buyers_item_id: line.Item[0]?.BuyersItemIdentification?.ID?.val || null, sellers_item_id: line.Item[0]?.SellersItemIdentification?.ID?.val || null, manufacturers_item_id: line.Item[0]?.ManufacturersItemIdentification?.ID?.val || null, origin_country: line.Item[0]?.OriginCountry?.val || null, gtip: line.Item[0]?.Delivery?.[0]?.Shipment?.[0]?.GoodsItem?.[0]?.RequiredCustomsID?.val, instance: _.map(line.Item[0]?.ItemInstance, (instance) => { return { trace_id: instance.ProductTraceID?.val || null, manufacture_date: instance.ManufactureDate?.val || null, manufacture_time: instance.ManufactureTime?.val || null, registration_id: instance.RegistrationID?.val || null, serial_id: instance.SerialID?.val || null, lot_id: instance.LotIdentification?.val || null, }; }) || [], }, }; }); return lines; }; const partyNormalizer = (partyJson) => { const party = partyJson.Party; const { ID } = _.find( party.PartyIdentification, (id) => id?.ID?.schemeID === 'TCKN' || id?.ID?.schemeID === 'VKN' || id?.ID?.schemeID === 'PARTYTYPE', ); const scheme = ID.schemeID; const normalizedParty = { name: scheme === 'TCKN' ? `${party.Person?.FirstName?.val}${party.Person?.MiddleName?.val ? ` ${party.Person?.MiddleName?.val}` : ''} ${party.Person?.FamilyName?.val}` : party.PartyName?.Name?.val, vkn_tckn: ['TCKN', 'VKN'].includes(scheme) ? ID?.val : party.PartyLegalEntity[0]?.CompanyID?.val, tax_office: party.PartyTaxScheme?.TaxScheme?.Name?.val, address: `${party.PostalAddress?.StreetName?.val} ${party.PostalAddress?.BuildingName?.val} ${party.PostalAddress?.BuildingNumber ? party.PostalAddress?.BuildingNumber[0]?.val : null} ${party.PostalAddress?.Room?.val}`, city: party.PostalAddress?.CityName?.val, city_subdivision: party.PostalAddress?.CitySubdivisionName?.val, country: party.PostalAddress?.Country.Name?.val, postal_zone: party.PostalAddress?.PostalZone?.val, email: party.Contact?.ElectronicMail?.val, phone_number: party.Contact?.Telephone?.val, additional_identifiers: _.map(party.PartyIdentification, (id) => { if (id?.ID?.schemeID !== 'TCKN' && id?.ID?.schemeID !== 'VKN') { return { scheme: id?.ID?.schemeID, value: id?.ID?.val, }; } }).filter((id) => id !== undefined) || [], }; return normalizedParty; }; module.exports = { setDefaults, taxSubtotalNormalizer, allowanceChargeNormalizer, linesNormalizer, partyNormalizer, };