/** * EN16931 Canonical Semantic Model * Defines all Business Terms (BT) and Business Groups (BG) from the standard * This provides a format-agnostic representation of invoice data */ /** * Business Term (BT) definitions from EN16931 * Each BT represents a specific data element in an invoice */ export interface BusinessTerms { // Document level information (BT-1 to BT-22) BT1_InvoiceNumber: string; BT2_InvoiceIssueDate: Date; BT3_InvoiceTypeCode: string; BT4_InvoiceNote?: string; BT5_InvoiceCurrencyCode: string; BT6_VATAccountingCurrencyCode?: string; BT7_ValueDateForVATCalculation?: Date; BT8_InvoicePeriodDescriptionCode?: string; BT9_DueDate?: Date; BT10_BuyerReference?: string; BT11_ProjectReference?: string; BT12_ContractReference?: string; BT13_PurchaseOrderReference?: string; BT14_SalesOrderReference?: string; BT15_ReceivingAdviceReference?: string; BT16_DespatchAdviceReference?: string; BT17_TenderOrLotReference?: string; BT18_InvoicedObjectIdentifier?: string; BT19_BuyerAccountingReference?: string; BT20_PaymentTerms?: string; BT21_InvoiceNote?: string[]; BT22_ProcessSpecificNote?: string; // Seller information (BT-23 to BT-40) BT23_BusinessProcessType?: string; BT24_SpecificationIdentifier?: string; BT25_InvoiceAttachment?: Attachment[]; BT26_InvoiceDocumentReference?: string; BT27_SellerName: string; BT28_SellerTradingName?: string; BT29_SellerIdentifier?: string; BT30_SellerLegalRegistrationIdentifier?: string; BT31_SellerVATIdentifier?: string; BT32_SellerTaxRegistrationIdentifier?: string; BT33_SellerAdditionalLegalInfo?: string; BT34_SellerElectronicAddress?: string; BT35_SellerAddressLine1?: string; BT36_SellerAddressLine2?: string; BT37_SellerAddressLine3?: string; BT38_SellerCity?: string; BT39_SellerPostCode?: string; BT40_SellerCountryCode: string; // Seller contact (BT-41 to BT-43) BT41_SellerContactPoint?: string; BT42_SellerContactTelephoneNumber?: string; BT43_SellerContactEmailAddress?: string; // Buyer information (BT-44 to BT-58) BT44_BuyerName: string; BT45_BuyerTradingName?: string; BT46_BuyerIdentifier?: string; BT47_BuyerLegalRegistrationIdentifier?: string; BT48_BuyerVATIdentifier?: string; BT49_BuyerElectronicAddress?: string; BT50_BuyerAddressLine1?: string; BT51_BuyerAddressLine2?: string; BT52_BuyerAddressLine3?: string; BT53_BuyerCity?: string; BT54_BuyerPostCode?: string; BT55_BuyerCountryCode: string; BT56_BuyerContactPoint?: string; BT57_BuyerContactTelephoneNumber?: string; BT58_BuyerContactEmailAddress?: string; // Payee information (BT-59 to BT-62) BT59_PayeeName?: string; BT60_PayeeIdentifier?: string; BT61_PayeeLegalRegistrationIdentifier?: string; BT62_PayeeLegalRegistrationIdentifierSchemeID?: string; // Tax representative (BT-62 to BT-69) BT63_SellerTaxRepresentativeName?: string; BT64_SellerTaxRepresentativeVATIdentifier?: string; BT65_SellerTaxRepresentativeAddressLine1?: string; BT66_SellerTaxRepresentativeAddressLine2?: string; BT67_SellerTaxRepresentativeCity?: string; BT68_SellerTaxRepresentativePostCode?: string; BT69_SellerTaxRepresentativeCountryCode?: string; // Delivery information (BT-70 to BT-80) BT70_DeliveryName?: string; BT71_DeliveryLocationIdentifier?: string; BT72_ActualDeliveryDate?: Date; BT73_InvoicingPeriodStartDate?: Date; BT74_InvoicingPeriodEndDate?: Date; BT75_DeliveryAddressLine1?: string; BT76_DeliveryAddressLine2?: string; BT77_DeliveryAddressLine3?: string; BT78_DeliveryCity?: string; BT79_DeliveryPostCode?: string; BT80_DeliveryCountryCode?: string; // Payment instructions (BT-81 to BT-91) BT81_PaymentMeansTypeCode: string; BT82_PaymentMeansText?: string; BT83_RemittanceInformation?: string; BT84_PaymentAccountIdentifier?: string; BT85_PaymentAccountName?: string; BT86_PaymentServiceProviderIdentifier?: string; BT87_PaymentCardAccountPrimaryNumber?: string; BT88_PaymentCardAccountHolderName?: string; BT89_MandateReferenceIdentifier?: string; BT90_BankAssignedCreditorIdentifier?: string; BT91_DebitedAccountIdentifier?: string; // Document level allowances (BT-92 to BT-96) BT92_DocumentLevelAllowanceAmount?: number; BT93_DocumentLevelAllowanceBaseAmount?: number; BT94_DocumentLevelAllowancePercentage?: number; BT95_DocumentLevelAllowanceVATCategoryCode?: string; BT96_DocumentLevelAllowanceVATRate?: number; BT97_DocumentLevelAllowanceReason?: string; BT98_DocumentLevelAllowanceReasonCode?: string; // Document level charges (BT-99 to BT-105) BT99_DocumentLevelChargeAmount?: number; BT100_DocumentLevelChargeBaseAmount?: number; BT101_DocumentLevelChargePercentage?: number; BT102_DocumentLevelChargeVATCategoryCode?: string; BT103_DocumentLevelChargeVATRate?: number; BT104_DocumentLevelChargeReason?: string; BT105_DocumentLevelChargeReasonCode?: string; // Document totals (BT-106 to BT-115) BT106_SumOfInvoiceLineNetAmount: number; BT107_SumOfAllowancesOnDocumentLevel?: number; BT108_SumOfChargesOnDocumentLevel?: number; BT109_InvoiceTotalAmountWithoutVAT: number; BT110_InvoiceTotalVATAmount?: number; BT111_InvoiceTotalVATAmountInAccountingCurrency?: number; BT112_InvoiceTotalAmountWithVAT: number; BT113_PaidAmount?: number; BT114_RoundingAmount?: number; BT115_AmountDueForPayment: number; // VAT breakdown (BT-116 to BT-121) BT116_VATCategoryTaxableAmount?: number; BT117_VATCategoryTaxAmount?: number; BT118_VATCategoryCode?: string; BT119_VATCategoryRate?: number; BT120_VATExemptionReasonText?: string; BT121_VATExemptionReasonCode?: string; // Additional document references (BT-122 to BT-125) BT122_SupportingDocumentReference?: string; BT123_SupportingDocumentDescription?: string; BT124_ExternalDocumentLocation?: string; BT125_AttachedDocumentEmbedded?: string; // Line level information (BT-126 to BT-162) BT126_InvoiceLineIdentifier?: string; BT127_InvoiceLineNote?: string; BT128_InvoiceLineObjectIdentifier?: string; BT129_InvoicedQuantity?: number; BT130_InvoicedQuantityUnitOfMeasureCode?: string; BT131_InvoiceLineNetAmount?: number; BT132_ReferencedPurchaseOrderLineReference?: string; BT133_InvoiceLineBuyerAccountingReference?: string; BT134_InvoiceLinePeriodStartDate?: Date; BT135_InvoiceLinePeriodEndDate?: Date; BT136_InvoiceLineAllowanceAmount?: number; BT137_InvoiceLineAllowanceBaseAmount?: number; BT138_InvoiceLineAllowancePercentage?: number; BT139_InvoiceLineAllowanceReason?: string; BT140_InvoiceLineAllowanceReasonCode?: string; BT141_InvoiceLineChargeAmount?: number; BT142_InvoiceLineChargeBaseAmount?: number; BT143_InvoiceLineChargePercentage?: number; BT144_InvoiceLineChargeReason?: string; BT145_InvoiceLineChargeReasonCode?: string; BT146_ItemNetPrice?: number; BT147_ItemPriceDiscount?: number; BT148_ItemGrossPrice?: number; BT149_ItemPriceBaseQuantity?: number; BT150_ItemPriceBaseQuantityUnitOfMeasureCode?: string; BT151_ItemVATCategoryCode?: string; BT152_ItemVATRate?: number; BT153_ItemName?: string; BT154_ItemDescription?: string; BT155_ItemSellersIdentifier?: string; BT156_ItemBuyersIdentifier?: string; BT157_ItemStandardIdentifier?: string; BT158_ItemClassificationIdentifier?: string; BT159_ItemClassificationListIdentifier?: string; BT160_ItemOriginCountryCode?: string; BT161_ItemAttributeName?: string; BT162_ItemAttributeValue?: string; } /** * Business Groups (BG) from EN16931 * Groups related business terms together */ export interface BusinessGroups { BG1_InvoiceNote?: InvoiceNote; BG2_ProcessControl?: ProcessControl; BG3_PrecedingInvoiceReference?: PrecedingInvoiceReference[]; BG4_Seller: Seller; BG5_SellerPostalAddress: PostalAddress; BG6_SellerContact?: Contact; BG7_Buyer: Buyer; BG8_BuyerPostalAddress: PostalAddress; BG9_BuyerContact?: Contact; BG10_Payee?: Payee; BG11_SellerTaxRepresentative?: TaxRepresentative; BG12_PayerParty?: PayerParty; BG13_DeliveryInformation?: DeliveryInformation; BG14_InvoicingPeriod?: Period; BG15_DeliverToAddress?: PostalAddress; BG16_PaymentInstructions: PaymentInstructions; BG17_PaymentCardInformation?: PaymentCardInformation; BG18_DirectDebit?: DirectDebit; BG19_PaymentTerms?: PaymentTerms; BG20_DocumentLevelAllowances?: Allowance[]; BG21_DocumentLevelCharges?: Charge[]; BG22_DocumentTotals: DocumentTotals; BG23_VATBreakdown?: VATBreakdown[]; BG24_AdditionalSupportingDocuments?: SupportingDocument[]; BG25_InvoiceLine: InvoiceLine[]; BG26_InvoiceLinePeriod?: Period; BG27_InvoiceLineAllowances?: Allowance[]; BG28_InvoiceLineCharges?: Charge[]; BG29_PriceDetails?: PriceDetails; BG30_LineVATInformation: VATInformation; BG31_ItemInformation: ItemInformation; BG32_ItemAttributes?: ItemAttribute[]; } /** * Supporting types for Business Groups */ export interface InvoiceNote { subjectCode?: string; noteContent: string; } export interface ProcessControl { businessProcessType?: string; specificationIdentifier: string; } export interface PrecedingInvoiceReference { referenceNumber: string; issueDate?: Date; } export interface Seller { name: string; tradingName?: string; identifier?: string; legalRegistrationIdentifier?: string; vatIdentifier?: string; taxRegistrationIdentifier?: string; additionalLegalInfo?: string; electronicAddress?: string; } export interface Buyer { name: string; tradingName?: string; identifier?: string; legalRegistrationIdentifier?: string; vatIdentifier?: string; electronicAddress?: string; } export interface PostalAddress { addressLine1?: string; addressLine2?: string; addressLine3?: string; city?: string; postCode?: string; countrySubdivision?: string; countryCode: string; } export interface Contact { contactPoint?: string; telephoneNumber?: string; emailAddress?: string; } export interface Payee { name: string; identifier?: string; legalRegistrationIdentifier?: string; } export interface TaxRepresentative { name: string; vatIdentifier: string; postalAddress: PostalAddress; } export interface PayerParty { name: string; identifier?: string; legalRegistrationIdentifier?: string; } export interface DeliveryInformation { name?: string; locationIdentifier?: string; actualDeliveryDate?: Date; deliveryAddress?: PostalAddress; } export interface Period { startDate?: Date; endDate?: Date; descriptionCode?: string; } export interface PaymentInstructions { paymentMeansTypeCode: string; paymentMeansText?: string; remittanceInformation?: string; paymentAccountIdentifier?: string; paymentAccountName?: string; paymentServiceProviderIdentifier?: string; } export interface PaymentCardInformation { primaryAccountNumber: string; holderName?: string; } export interface DirectDebit { mandateReferenceIdentifier?: string; bankAssignedCreditorIdentifier?: string; debitedAccountIdentifier?: string; } export interface PaymentTerms { note?: string; } export interface Allowance { amount: number; baseAmount?: number; percentage?: number; vatCategoryCode?: string; vatRate?: number; reason?: string; reasonCode?: string; } export interface Charge { amount: number; baseAmount?: number; percentage?: number; vatCategoryCode?: string; vatRate?: number; reason?: string; reasonCode?: string; } export interface DocumentTotals { lineExtensionAmount: number; taxExclusiveAmount: number; taxInclusiveAmount: number; allowanceTotalAmount?: number; chargeTotalAmount?: number; prepaidAmount?: number; roundingAmount?: number; payableAmount: number; } export interface VATBreakdown { vatCategoryTaxableAmount: number; vatCategoryTaxAmount: number; vatCategoryCode: string; vatCategoryRate?: number; vatExemptionReasonText?: string; vatExemptionReasonCode?: string; } export interface SupportingDocument { documentReference: string; documentDescription?: string; externalDocumentLocation?: string; attachedDocument?: Attachment; } export interface Attachment { filename?: string; mimeType?: string; description?: string; embeddedDocumentBinaryObject?: string; externalDocumentURI?: string; } export interface InvoiceLine { identifier: string; note?: string; objectIdentifier?: string; invoicedQuantity: number; invoicedQuantityUnitOfMeasureCode: string; lineExtensionAmount: number; purchaseOrderLineReference?: string; buyerAccountingReference?: string; period?: Period; allowances?: Allowance[]; charges?: Charge[]; priceDetails: PriceDetails; vatInformation: VATInformation; itemInformation: ItemInformation; } export interface PriceDetails { itemNetPrice: number; itemPriceDiscount?: number; itemGrossPrice?: number; itemPriceBaseQuantity?: number; itemPriceBaseQuantityUnitOfMeasureCode?: string; } export interface VATInformation { categoryCode: string; rate?: number; } export interface ItemInformation { name: string; description?: string; sellersIdentifier?: string; buyersIdentifier?: string; standardIdentifier?: string; classificationIdentifier?: string; classificationListIdentifier?: string; originCountryCode?: string; attributes?: ItemAttribute[]; } export interface ItemAttribute { name: string; value: string; } /** * Complete EN16931 Semantic Model * Combines all Business Terms and Business Groups */ export interface EN16931SemanticModel { // Core document information documentInformation: { invoiceNumber: string; // BT-1 issueDate: Date; // BT-2 typeCode: string; // BT-3 currencyCode: string; // BT-5 notes?: InvoiceNote[]; // BG-1 }; // Process metadata processControl?: ProcessControl; // BG-2 // References references?: { buyerReference?: string; // BT-10 projectReference?: string; // BT-11 contractReference?: string; // BT-12 purchaseOrderReference?: string; // BT-13 salesOrderReference?: string; // BT-14 precedingInvoices?: PrecedingInvoiceReference[]; // BG-3 }; // Parties seller: Seller & { // BG-4 postalAddress: PostalAddress; // BG-5 contact?: Contact; // BG-6 }; buyer: Buyer & { // BG-7 postalAddress: PostalAddress; // BG-8 contact?: Contact; // BG-9 }; payee?: Payee; // BG-10 taxRepresentative?: TaxRepresentative; // BG-11 // Delivery delivery?: DeliveryInformation; // BG-13 invoicingPeriod?: Period; // BG-14 // Payment paymentInstructions: PaymentInstructions; // BG-16 paymentCardInfo?: PaymentCardInformation; // BG-17 directDebit?: DirectDebit; // BG-18 paymentTerms?: PaymentTerms; // BG-19 // Allowances and charges documentLevelAllowances?: Allowance[]; // BG-20 documentLevelCharges?: Charge[]; // BG-21 // Totals documentTotals: DocumentTotals; // BG-22 vatBreakdown?: VATBreakdown[]; // BG-23 // Supporting documents additionalDocuments?: SupportingDocument[]; // BG-24 // Invoice lines invoiceLines: InvoiceLine[]; // BG-25 } /** * Semantic model version and metadata */ export const SEMANTIC_MODEL_VERSION = '1.3.0'; export const EN16931_VERSION = '1.3.14'; export const SUPPORTED_SYNTAXES = ['UBL', 'CII', 'EDIFACT'];