@fin.cx/einvoice
Version:
A TypeScript module for creating, manipulating, and embedding XML data within PDF files specifically tailored for electronic invoice (einvoice) packages.
46 lines • 3.12 kB
JavaScript
import { BaseDecoder } from './base.decoder.js';
import { FacturXDecoder } from './facturx.decoder.js';
import { XInvoiceDecoder } from './xinvoice.decoder.js';
/**
* Factory class for creating the appropriate decoder based on XML format.
* Analyzes XML content and returns the best decoder for the given format.
*/
export class DecoderFactory {
/**
* Creates a decoder for the given XML content
*/
static createDecoder(xmlString) {
if (!xmlString) {
throw new Error('No XML string provided for decoder selection');
}
const format = DecoderFactory.detectFormat(xmlString);
switch (format) {
case 'XInvoice/UBL':
return new XInvoiceDecoder(xmlString);
case 'FacturX/ZUGFeRD':
default:
// Default to FacturX/ZUGFeRD decoder
return new FacturXDecoder(xmlString);
}
}
/**
* Detects the XML invoice format using string pattern matching
*/
static detectFormat(xmlString) {
// XInvoice/UBL format
if (xmlString.includes('oasis:names:specification:ubl') ||
xmlString.includes('Invoice xmlns') ||
xmlString.includes('xrechnung')) {
return 'XInvoice/UBL';
}
// ZUGFeRD/Factur-X (CII format)
if (xmlString.includes('CrossIndustryInvoice') ||
xmlString.includes('un/cefact') ||
xmlString.includes('rsm:')) {
return 'FacturX/ZUGFeRD';
}
// Default to FacturX/ZUGFeRD
return 'FacturX/ZUGFeRD';
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2Rlci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZm9ybWF0cy9kZWNvZGVyLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekI7O09BRUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxjQUFjO2dCQUNqQixPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXhDLEtBQUssaUJBQWlCLENBQUM7WUFDdkI7Z0JBQ0UscUNBQXFDO2dCQUNyQyxPQUFPLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQWlCO1FBQzNDLHNCQUFzQjtRQUN0QixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUM7WUFDbkQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDbkMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLGlCQUFpQixDQUFDO1FBQzNCLENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0NBQ0YifQ==