This commit is contained in:
2025-05-27 20:09:35 +00:00
parent 079feddaa6
commit 9e46a55057
10 changed files with 161 additions and 60 deletions

View File

@ -164,18 +164,31 @@ export class XRechnungDecoder extends UBLBaseDecoder {
const periodEnd = this.getText('//cac:InvoicePeriod/cbc:EndDate', this.doc);
const deliveryDate = this.getText('//cac:Delivery/cbc:ActualDeliveryDate', this.doc);
// Extract notes
const notes: string[] = [];
const noteNodes = this.select('//cbc:Note', this.doc);
// Extract notes (excluding PaymentTerms notes)
const allNotes: string[] = [];
const noteNodes = this.select('//cbc:Note[not(parent::cac:PaymentTerms)]', this.doc);
if (noteNodes && Array.isArray(noteNodes)) {
for (let i = 0; i < noteNodes.length; i++) {
const noteText = noteNodes[i].textContent || '';
if (noteText) {
notes.push(noteText);
allNotes.push(noteText);
}
}
}
// Extract subject and notes separately
// If we have notes, the first one might be the subject
let subject = `Invoice ${invoiceId}`;
let notes = [...allNotes];
// If the first note doesn't look like a payment term or other standard note,
// treat it as the subject
if (allNotes.length > 0 && !allNotes[0].toLowerCase().includes('due in') &&
!allNotes[0].toLowerCase().includes('payment')) {
subject = allNotes[0];
notes = allNotes.slice(1); // Remove subject from notes
}
// Extract seller and buyer information
const seller = this.extractParty('//cac:AccountingSupplierParty/cac:Party');
const buyer = this.extractParty('//cac:AccountingCustomerParty/cac:Party');
@ -196,7 +209,7 @@ export class XRechnungDecoder extends UBLBaseDecoder {
incidenceId: invoiceId,
from: seller,
to: buyer,
subject: notes.length > 0 ? notes[0] : `Invoice ${invoiceId}`,
subject: subject,
items: items,
dueInDays: dueInDays,
reverseCharge: false,