@stamhoofd/structures 2.111.0 → 2.113.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +32 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/src/BalanceItem.d.ts +11 -0
- package/dist/src/BalanceItem.d.ts.map +1 -1
- package/dist/src/BalanceItem.js +41 -4
- package/dist/src/BalanceItem.js.map +1 -1
- package/dist/src/BalanceItemDetailed.d.ts +8 -0
- package/dist/src/BalanceItemDetailed.d.ts.map +1 -1
- package/dist/src/BalanceItemDetailed.js +11 -4
- package/dist/src/BalanceItemDetailed.js.map +1 -1
- package/dist/src/Company.d.ts +2 -0
- package/dist/src/Company.d.ts.map +1 -1
- package/dist/src/Company.js +26 -0
- package/dist/src/Company.js.map +1 -1
- package/dist/src/Organization.d.ts +5 -0
- package/dist/src/Organization.d.ts.map +1 -1
- package/dist/src/Organization.js +14 -0
- package/dist/src/Organization.js.map +1 -1
- package/dist/src/PaymentCustomer.d.ts +1 -0
- package/dist/src/PaymentCustomer.d.ts.map +1 -1
- package/dist/src/PaymentCustomer.js +23 -0
- package/dist/src/PaymentCustomer.js.map +1 -1
- package/dist/src/PriceBreakdown.d.ts +5 -0
- package/dist/src/PriceBreakdown.d.ts.map +1 -1
- package/dist/src/ReceivableBalance.d.ts +8 -0
- package/dist/src/ReceivableBalance.d.ts.map +1 -1
- package/dist/src/ReceivableBalance.js +11 -0
- package/dist/src/ReceivableBalance.js.map +1 -1
- package/dist/src/Version.d.ts +1 -1
- package/dist/src/Version.js +1 -1
- package/dist/src/addresses/Address.d.ts +1 -0
- package/dist/src/addresses/Address.d.ts.map +1 -1
- package/dist/src/addresses/Address.js +3 -0
- package/dist/src/addresses/Address.js.map +1 -1
- package/dist/src/billing/Invoice.d.ts +38 -2
- package/dist/src/billing/Invoice.d.ts.map +1 -1
- package/dist/src/billing/Invoice.js +250 -24
- package/dist/src/billing/Invoice.js.map +1 -1
- package/dist/src/billing/InvoicedBalanceItem.d.ts +13 -0
- package/dist/src/billing/InvoicedBalanceItem.d.ts.map +1 -1
- package/dist/src/billing/InvoicedBalanceItem.js +47 -5
- package/dist/src/billing/InvoicedBalanceItem.js.map +1 -1
- package/dist/src/billing/index.d.ts +1 -0
- package/dist/src/billing/index.d.ts.map +1 -1
- package/dist/src/billing/index.js +4 -0
- package/dist/src/billing/index.js.map +1 -1
- package/dist/src/email/Email.d.ts +2 -1
- package/dist/src/email/Email.d.ts.map +1 -1
- package/dist/src/email/Email.js +2 -1
- package/dist/src/email/Email.js.map +1 -1
- package/dist/src/email/EmailTemplate.d.ts +11 -0
- package/dist/src/email/EmailTemplate.d.ts.map +1 -1
- package/dist/src/email/EmailTemplate.js +41 -0
- package/dist/src/email/EmailTemplate.js.map +1 -1
- package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts +10 -0
- package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts.map +1 -0
- package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js +38 -0
- package/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js.map +1 -0
- package/dist/src/filters/searchFilterFactories.js +1 -1
- package/dist/src/filters/searchFilterFactories.js.map +1 -1
- package/dist/src/members/MemberDetails.d.ts +4 -1
- package/dist/src/members/MemberDetails.d.ts.map +1 -1
- package/dist/src/members/MemberDetails.js +39 -10
- package/dist/src/members/MemberDetails.js.map +1 -1
- package/dist/src/members/MemberDetails.test.js +144 -0
- package/dist/src/members/MemberDetails.test.js.map +1 -1
- package/dist/src/members/Payment.d.ts +2 -0
- package/dist/src/members/Payment.d.ts.map +1 -1
- package/dist/src/members/Payment.js +8 -0
- package/dist/src/members/Payment.js.map +1 -1
- package/dist/src/members/PlatformMember.d.ts.map +1 -1
- package/dist/src/members/PlatformMember.js +1 -1
- package/dist/src/members/PlatformMember.js.map +1 -1
- package/dist/src/members/ReviewTime.d.ts.map +1 -1
- package/dist/src/members/ReviewTime.js +1 -1
- package/dist/src/members/ReviewTime.js.map +1 -1
- package/dist/src/members/UitpasNumberDetails.d.ts +40 -0
- package/dist/src/members/UitpasNumberDetails.d.ts.map +1 -0
- package/dist/src/members/UitpasNumberDetails.js +95 -0
- package/dist/src/members/UitpasNumberDetails.js.map +1 -0
- package/dist/src/members/checkout/RegisterItem.d.ts +0 -1
- package/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
- package/dist/src/members/checkout/RegisterItem.js +0 -4
- package/dist/src/members/checkout/RegisterItem.js.map +1 -1
- package/dist/src/webshops/Customer.d.ts +2 -0
- package/dist/src/webshops/Customer.d.ts.map +1 -1
- package/dist/src/webshops/Customer.js +9 -0
- package/dist/src/webshops/Customer.js.map +1 -1
- package/esm/dist/index.d.ts +2 -0
- package/esm/dist/index.d.ts.map +1 -1
- package/esm/dist/index.js +2 -0
- package/esm/dist/index.js.map +1 -1
- package/esm/dist/src/BalanceItem.d.ts +11 -0
- package/esm/dist/src/BalanceItem.d.ts.map +1 -1
- package/esm/dist/src/BalanceItem.js +41 -5
- package/esm/dist/src/BalanceItem.js.map +1 -1
- package/esm/dist/src/BalanceItemDetailed.d.ts +8 -0
- package/esm/dist/src/BalanceItemDetailed.d.ts.map +1 -1
- package/esm/dist/src/BalanceItemDetailed.js +11 -4
- package/esm/dist/src/BalanceItemDetailed.js.map +1 -1
- package/esm/dist/src/Company.d.ts +2 -0
- package/esm/dist/src/Company.d.ts.map +1 -1
- package/esm/dist/src/Company.js +26 -0
- package/esm/dist/src/Company.js.map +1 -1
- package/esm/dist/src/Organization.d.ts +5 -0
- package/esm/dist/src/Organization.d.ts.map +1 -1
- package/esm/dist/src/Organization.js +14 -0
- package/esm/dist/src/Organization.js.map +1 -1
- package/esm/dist/src/PaymentCustomer.d.ts +1 -0
- package/esm/dist/src/PaymentCustomer.d.ts.map +1 -1
- package/esm/dist/src/PaymentCustomer.js +23 -0
- package/esm/dist/src/PaymentCustomer.js.map +1 -1
- package/esm/dist/src/PriceBreakdown.d.ts +5 -0
- package/esm/dist/src/PriceBreakdown.d.ts.map +1 -1
- package/esm/dist/src/ReceivableBalance.d.ts +8 -0
- package/esm/dist/src/ReceivableBalance.d.ts.map +1 -1
- package/esm/dist/src/ReceivableBalance.js +11 -0
- package/esm/dist/src/ReceivableBalance.js.map +1 -1
- package/esm/dist/src/Version.d.ts +1 -1
- package/esm/dist/src/Version.js +1 -1
- package/esm/dist/src/addresses/Address.d.ts +1 -0
- package/esm/dist/src/addresses/Address.d.ts.map +1 -1
- package/esm/dist/src/addresses/Address.js +3 -0
- package/esm/dist/src/addresses/Address.js.map +1 -1
- package/esm/dist/src/billing/Invoice.d.ts +38 -2
- package/esm/dist/src/billing/Invoice.d.ts.map +1 -1
- package/esm/dist/src/billing/Invoice.js +249 -24
- package/esm/dist/src/billing/Invoice.js.map +1 -1
- package/esm/dist/src/billing/InvoicedBalanceItem.d.ts +13 -0
- package/esm/dist/src/billing/InvoicedBalanceItem.d.ts.map +1 -1
- package/esm/dist/src/billing/InvoicedBalanceItem.js +47 -5
- package/esm/dist/src/billing/InvoicedBalanceItem.js.map +1 -1
- package/esm/dist/src/billing/index.d.ts +1 -0
- package/esm/dist/src/billing/index.d.ts.map +1 -1
- package/esm/dist/src/billing/index.js +2 -0
- package/esm/dist/src/billing/index.js.map +1 -1
- package/esm/dist/src/email/Email.d.ts +2 -1
- package/esm/dist/src/email/Email.d.ts.map +1 -1
- package/esm/dist/src/email/Email.js +2 -1
- package/esm/dist/src/email/Email.js.map +1 -1
- package/esm/dist/src/email/EmailTemplate.d.ts +11 -0
- package/esm/dist/src/email/EmailTemplate.d.ts.map +1 -1
- package/esm/dist/src/email/EmailTemplate.js +41 -0
- package/esm/dist/src/email/EmailTemplate.js.map +1 -1
- package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts +10 -0
- package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.d.ts.map +1 -0
- package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js +34 -0
- package/esm/dist/src/endpoints/UitpasNumbersGetDetailsRequest.js.map +1 -0
- package/esm/dist/src/filters/searchFilterFactories.js +1 -1
- package/esm/dist/src/filters/searchFilterFactories.js.map +1 -1
- package/esm/dist/src/members/MemberDetails.d.ts +4 -1
- package/esm/dist/src/members/MemberDetails.d.ts.map +1 -1
- package/esm/dist/src/members/MemberDetails.js +39 -10
- package/esm/dist/src/members/MemberDetails.js.map +1 -1
- package/esm/dist/src/members/Payment.d.ts +2 -0
- package/esm/dist/src/members/Payment.d.ts.map +1 -1
- package/esm/dist/src/members/Payment.js +8 -0
- package/esm/dist/src/members/Payment.js.map +1 -1
- package/esm/dist/src/members/PlatformMember.d.ts.map +1 -1
- package/esm/dist/src/members/PlatformMember.js +1 -1
- package/esm/dist/src/members/PlatformMember.js.map +1 -1
- package/esm/dist/src/members/ReviewTime.d.ts.map +1 -1
- package/esm/dist/src/members/ReviewTime.js +1 -1
- package/esm/dist/src/members/ReviewTime.js.map +1 -1
- package/esm/dist/src/members/UitpasNumberDetails.d.ts +40 -0
- package/esm/dist/src/members/UitpasNumberDetails.d.ts.map +1 -0
- package/esm/dist/src/members/UitpasNumberDetails.js +90 -0
- package/esm/dist/src/members/UitpasNumberDetails.js.map +1 -0
- package/esm/dist/src/members/checkout/RegisterItem.d.ts +0 -1
- package/esm/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
- package/esm/dist/src/members/checkout/RegisterItem.js +0 -4
- package/esm/dist/src/members/checkout/RegisterItem.js.map +1 -1
- package/esm/dist/src/webshops/Customer.d.ts +2 -0
- package/esm/dist/src/webshops/Customer.d.ts.map +1 -1
- package/esm/dist/src/webshops/Customer.js +9 -0
- package/esm/dist/src/webshops/Customer.js.map +1 -1
- package/package.json +2 -2
- package/LICENSE +0 -665
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Address.js","sourceRoot":"","sources":["../../../../src/addresses/Address.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7E,MAAM,OAAO,OAAQ,SAAQ,WAAW;IAAxC;;QAUI,WAAM,GAAG,EAAE,CAAC;QAGZ,WAAM,GAAG,EAAE,CAAC;QAGZ,eAAU,GAAG,EAAE,CAAC;QAGhB,SAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Address.js","sourceRoot":"","sources":["../../../../src/addresses/Address.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { AutoEncoder } from '@simonbackx/simple-encoding';
|
|
2
|
+
import { VATExcemptReason } from '../BalanceItem.js';
|
|
2
3
|
import { Company } from '../Company.js';
|
|
3
4
|
import { PaymentCustomer } from '../PaymentCustomer.js';
|
|
5
|
+
import { PriceBreakdown, PriceBreakdownAction } from '../PriceBreakdown.js';
|
|
4
6
|
import { File } from '../files/File.js';
|
|
7
|
+
import { PaymentGeneral } from '../members/PaymentGeneral.js';
|
|
5
8
|
import { InvoicedBalanceItem } from './InvoicedBalanceItem.js';
|
|
6
|
-
import { VATExcemptReason } from '../BalanceItem.js';
|
|
7
9
|
export declare class VATSubtotal extends AutoEncoder {
|
|
8
10
|
/**
|
|
9
11
|
* For tax ecempt items, this should be zero but it is ignored anyway
|
|
@@ -16,6 +18,13 @@ export declare class VATSubtotal extends AutoEncoder {
|
|
|
16
18
|
taxablePrice: number;
|
|
17
19
|
VAT: number;
|
|
18
20
|
}
|
|
21
|
+
export declare enum InvoiceType {
|
|
22
|
+
Invoice = "Invoice",
|
|
23
|
+
CreditNote = "CreditNote"
|
|
24
|
+
}
|
|
25
|
+
export declare class InvoiceTypeHelper {
|
|
26
|
+
static getName(type: InvoiceType): string;
|
|
27
|
+
}
|
|
19
28
|
export declare class Invoice extends AutoEncoder {
|
|
20
29
|
id: string;
|
|
21
30
|
/**
|
|
@@ -46,8 +55,17 @@ export declare class Invoice extends AutoEncoder {
|
|
|
46
55
|
* The balance items that are invoiced, with their original price. This does not always correspond to the total price of the invoice, or the item prices on the invoice because prices are converted to prices excluding VAT and with PEPPOL rounding rules.
|
|
47
56
|
*/
|
|
48
57
|
items: InvoicedBalanceItem[];
|
|
58
|
+
/**
|
|
59
|
+
* The total sum of an invoice should always match the total sum of the payments connected to it.
|
|
60
|
+
* On top of that, the amounts related to each balance item in the payments, should match the invoiced balance amount in each item in the invoice.
|
|
61
|
+
*
|
|
62
|
+
* Note, that this is a limitation. A payment can only be related to a single invoice. But an invoice can be for multiple payments.
|
|
63
|
+
* More flexibility is often unneeded and makes reconciliation unnecessary complex.
|
|
64
|
+
*/
|
|
65
|
+
payments: PaymentGeneral[];
|
|
49
66
|
get totalWithoutVAT(): number;
|
|
50
67
|
get totalBalanceInvoicedAmount(): number;
|
|
68
|
+
get totalPaymentsAmount(): number;
|
|
51
69
|
/**
|
|
52
70
|
* This is the rounding amount in cents that is applied to the normal calculation of the invoiced balance items (prices exluding VAT) to come to the actual total price of the invoice.
|
|
53
71
|
*
|
|
@@ -71,7 +89,7 @@ export declare class Invoice extends AutoEncoder {
|
|
|
71
89
|
* Best viewed as a virtual extra balance item linked to the invoice to compensate.
|
|
72
90
|
*
|
|
73
91
|
* This is used to explain and report why there is a difference between the sum of the balance item's prices and the actually invoiced price, comparable with roundingAmount on payments.
|
|
74
|
-
* - Say we invoice 3 items of 0,242 euro. The sum would be 0,726. The invoice total price might be 0,73 because of rounding rules. Then the balanceRoundingAmount would be
|
|
92
|
+
* - Say we invoice 3 items of 0,242 euro. The sum would be 0,726. The invoice total price might be 0,73 because of rounding rules. Then the balanceRoundingAmount would be 0,004.
|
|
75
93
|
*/
|
|
76
94
|
get balanceRoundingAmount(): number;
|
|
77
95
|
/**
|
|
@@ -98,7 +116,25 @@ export declare class Invoice extends AutoEncoder {
|
|
|
98
116
|
xml: File | null;
|
|
99
117
|
negativeInvoiceId: string | null;
|
|
100
118
|
didSendPeppol: boolean;
|
|
119
|
+
invoicedAt: Date | null;
|
|
120
|
+
dueAt: Date | null;
|
|
121
|
+
createdAt: Date;
|
|
122
|
+
updatedAt: Date;
|
|
123
|
+
validateVATRates(): void;
|
|
101
124
|
calculateVAT(): void;
|
|
102
125
|
addItem(item: InvoicedBalanceItem): void;
|
|
126
|
+
get type(): InvoiceType;
|
|
127
|
+
get theme(): "theme-error" | undefined;
|
|
128
|
+
get priceBreakdown(): PriceBreakdown;
|
|
129
|
+
getPriceBreakdown(options?: {
|
|
130
|
+
vatAction?: PriceBreakdownAction;
|
|
131
|
+
}): PriceBreakdown;
|
|
132
|
+
updatePayableRoundingAmount(): void;
|
|
133
|
+
/** */
|
|
134
|
+
correctRoundingByUpdatingPrices(): void;
|
|
135
|
+
/**
|
|
136
|
+
* Call this method after changing the payments related to an invoice.
|
|
137
|
+
*/
|
|
138
|
+
buildFromPayments(): void;
|
|
103
139
|
}
|
|
104
140
|
//# sourceMappingURL=Invoice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Invoice.d.ts","sourceRoot":"","sources":["../../../../src/billing/Invoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,
|
|
1
|
+
{"version":3,"file":"Invoice.d.ts","sourceRoot":"","sources":["../../../../src/billing/Invoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAkF,MAAM,6BAA6B,CAAC;AAGxJ,OAAO,EAAkE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,qBAAa,WAAY,SAAQ,WAAW;IACxC;;OAEG;IAEH,aAAa,EAAE,MAAM,CAAK;IAG1B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAE3C;;OAEG;IAEH,YAAY,EAAE,MAAM,CAAK;IAGzB,GAAG,EAAE,MAAM,CAAK;CACnB;AAED,oBAAY,WAAW;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;CAC5B;AAED,qBAAa,iBAAiB;IAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;CAM5C;AAED,qBAAa,OAAQ,SAAQ,WAAW;IAEpC,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IAEH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7B;;OAEG;IAEH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;;OAKG;IAEH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C;;;OAGG;IAEH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IAEH,QAAQ,EAAE,eAAe,CAAC;IAE1B;;OAEG;IAEH,KAAK,EAAE,mBAAmB,EAAE,CAAM;IAElC;;;;;;OAMG;IAEH,QAAQ,EAAE,cAAc,EAAE,CAAM;IAEhC,IAAI,eAAe,WAElB;IAED,IAAI,0BAA0B,WAE7B;IAED,IAAI,mBAAmB,WAEtB;IAED;;;;;;;;;;;;;;OAcG;IAEH,qBAAqB,EAAE,MAAM,CAAK;IAElC;;;;;;;;OAQG;IACH,IAAI,qBAAqB,WAExB;IAED;;OAEG;IAEH,QAAQ,EAAE,WAAW,EAAE,CAAM;IAE7B,IAAI,cAAc,WAEjB;IAED;;;;;;OAMG;IACH,IAAI,YAAY,WAEf;IAGD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGhC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhC;;OAEG;IAEH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGhC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAQ;IAGxB,GAAG,EAAE,IAAI,GAAG,IAAI,CAAQ;IAGxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGxC,aAAa,UAAS;IAGtB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAQ;IAG/B,KAAK,EAAE,IAAI,GAAG,IAAI,CAAQ;IAG1B,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;IAE7B,gBAAgB;IAmChB,YAAY;IAkBZ,OAAO,CAAC,IAAI,EAAE,mBAAmB;IAKjC,IAAI,IAAI,gBAKP;IAED,IAAI,KAAK,8BAIR;IAED,IAAI,cAAc,mBAEjB;IAED,iBAAiB,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,oBAAoB,CAAA;KAAE,GAAG,cAAc;IA2BjF,2BAA2B;IAW3B,MAAM;IACN,+BAA+B;IA+E/B;;OAEG;IACH,iBAAiB;CAoDpB"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { ArrayDecoder, AutoEncoder, BooleanDecoder, EnumDecoder, field, IntegerDecoder, StringDecoder } from '@simonbackx/simple-encoding';
|
|
2
|
+
import { ArrayDecoder, AutoEncoder, BooleanDecoder, DateDecoder, EnumDecoder, field, IntegerDecoder, StringDecoder } from '@simonbackx/simple-encoding';
|
|
3
|
+
import { SimpleError } from '@simonbackx/simple-errors';
|
|
3
4
|
import { v4 as uuidv4 } from 'uuid';
|
|
5
|
+
import { getVATExcemptInvoiceNote, VATExcemptReason } from '../BalanceItem.js';
|
|
4
6
|
import { Company } from '../Company.js';
|
|
5
7
|
import { PaymentCustomer } from '../PaymentCustomer.js';
|
|
6
8
|
import { File } from '../files/File.js';
|
|
9
|
+
import { PaymentGeneral } from '../members/PaymentGeneral.js';
|
|
7
10
|
import { InvoicedBalanceItem } from './InvoicedBalanceItem.js';
|
|
8
|
-
import {
|
|
11
|
+
import { Formatter, Sorter, STMath } from '@stamhoofd/utility';
|
|
9
12
|
export class VATSubtotal extends AutoEncoder {
|
|
10
13
|
constructor() {
|
|
11
14
|
super(...arguments);
|
|
@@ -33,6 +36,19 @@ __decorate([
|
|
|
33
36
|
__decorate([
|
|
34
37
|
field({ decoder: IntegerDecoder })
|
|
35
38
|
], VATSubtotal.prototype, "VAT", void 0);
|
|
39
|
+
export var InvoiceType;
|
|
40
|
+
(function (InvoiceType) {
|
|
41
|
+
InvoiceType["Invoice"] = "Invoice";
|
|
42
|
+
InvoiceType["CreditNote"] = "CreditNote";
|
|
43
|
+
})(InvoiceType || (InvoiceType = {}));
|
|
44
|
+
export class InvoiceTypeHelper {
|
|
45
|
+
static getName(type) {
|
|
46
|
+
switch (type) {
|
|
47
|
+
case InvoiceType.Invoice: return $t('fbf8fca6-33f0-4ecc-8317-0033f256827e');
|
|
48
|
+
case InvoiceType.CreditNote: return $t('4578aaf4-a15a-4c53-ad46-768b91d96a4e');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
36
52
|
export class Invoice extends AutoEncoder {
|
|
37
53
|
constructor() {
|
|
38
54
|
super(...arguments);
|
|
@@ -51,6 +67,14 @@ export class Invoice extends AutoEncoder {
|
|
|
51
67
|
* The balance items that are invoiced, with their original price. This does not always correspond to the total price of the invoice, or the item prices on the invoice because prices are converted to prices excluding VAT and with PEPPOL rounding rules.
|
|
52
68
|
*/
|
|
53
69
|
this.items = [];
|
|
70
|
+
/**
|
|
71
|
+
* The total sum of an invoice should always match the total sum of the payments connected to it.
|
|
72
|
+
* On top of that, the amounts related to each balance item in the payments, should match the invoiced balance amount in each item in the invoice.
|
|
73
|
+
*
|
|
74
|
+
* Note, that this is a limitation. A payment can only be related to a single invoice. But an invoice can be for multiple payments.
|
|
75
|
+
* More flexibility is often unneeded and makes reconciliation unnecessary complex.
|
|
76
|
+
*/
|
|
77
|
+
this.payments = [];
|
|
54
78
|
/**
|
|
55
79
|
* This is the rounding amount in cents that is applied to the normal calculation of the invoiced balance items (prices exluding VAT) to come to the actual total price of the invoice.
|
|
56
80
|
*
|
|
@@ -82,6 +106,10 @@ export class Invoice extends AutoEncoder {
|
|
|
82
106
|
this.xml = null;
|
|
83
107
|
this.negativeInvoiceId = null;
|
|
84
108
|
this.didSendPeppol = false;
|
|
109
|
+
this.invoicedAt = null;
|
|
110
|
+
this.dueAt = null;
|
|
111
|
+
this.createdAt = new Date();
|
|
112
|
+
this.updatedAt = new Date();
|
|
85
113
|
}
|
|
86
114
|
get totalWithoutVAT() {
|
|
87
115
|
return this.items.reduce((sum, item) => sum + item.totalWithoutVAT, 0);
|
|
@@ -89,6 +117,9 @@ export class Invoice extends AutoEncoder {
|
|
|
89
117
|
get totalBalanceInvoicedAmount() {
|
|
90
118
|
return this.items.reduce((sum, item) => sum + item.balanceInvoicedAmount, 0);
|
|
91
119
|
}
|
|
120
|
+
get totalPaymentsAmount() {
|
|
121
|
+
return this.payments.reduce((sum, item) => sum + item.price, 0);
|
|
122
|
+
}
|
|
92
123
|
/**
|
|
93
124
|
* The difference between the totalWithVAT of the invoice and the sum of all balanceInvoicedAmount of the invoiced balance items.
|
|
94
125
|
* totalBalanceInvoicedAmount + balanceRoundingAmount = totalWithVAT
|
|
@@ -96,7 +127,7 @@ export class Invoice extends AutoEncoder {
|
|
|
96
127
|
* Best viewed as a virtual extra balance item linked to the invoice to compensate.
|
|
97
128
|
*
|
|
98
129
|
* This is used to explain and report why there is a difference between the sum of the balance item's prices and the actually invoiced price, comparable with roundingAmount on payments.
|
|
99
|
-
* - Say we invoice 3 items of 0,242 euro. The sum would be 0,726. The invoice total price might be 0,73 because of rounding rules. Then the balanceRoundingAmount would be
|
|
130
|
+
* - Say we invoice 3 items of 0,242 euro. The sum would be 0,726. The invoice total price might be 0,73 because of rounding rules. Then the balanceRoundingAmount would be 0,004.
|
|
100
131
|
*/
|
|
101
132
|
get balanceRoundingAmount() {
|
|
102
133
|
return this.totalWithVAT - this.totalBalanceInvoicedAmount;
|
|
@@ -114,41 +145,220 @@ export class Invoice extends AutoEncoder {
|
|
|
114
145
|
get totalWithVAT() {
|
|
115
146
|
return this.totalWithoutVAT + this.VATTotalAmount + this.payableRoundingAmount;
|
|
116
147
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
148
|
+
validateVATRates() {
|
|
149
|
+
let intra = false;
|
|
150
|
+
if (this.customer.company && this.customer.company.VATNumber && this.customer.company.address) {
|
|
151
|
+
if (this.seller.VATNumber && this.seller.address) {
|
|
152
|
+
// Reverse charged vat applicable?
|
|
153
|
+
if (this.customer.company.address.country !== this.seller.address.country) {
|
|
154
|
+
intra = true;
|
|
155
|
+
}
|
|
124
156
|
}
|
|
125
|
-
|
|
126
|
-
|
|
157
|
+
}
|
|
158
|
+
if (intra) {
|
|
159
|
+
for (const item of this.items) {
|
|
160
|
+
if (item.VATExcempt !== VATExcemptReason.IntraCommunity) {
|
|
161
|
+
throw new SimpleError({
|
|
162
|
+
code: 'missing_vat_excemption',
|
|
163
|
+
message: 'Missing IntraCommunity VAT excemption',
|
|
164
|
+
human: $t('8b562a1d-e7c0-4110-b320-db535f0ea0e9'),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
127
167
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
for (const item of this.items) {
|
|
171
|
+
if (item.VATExcempt === VATExcemptReason.IntraCommunity) {
|
|
172
|
+
throw new SimpleError({
|
|
173
|
+
code: 'erroneous_vat_excemption',
|
|
174
|
+
message: 'IntraCommunity VAT excemption should not apply to this item',
|
|
175
|
+
human: $t('d2c3f57f-ffae-45ea-97ce-3f4f30839cd6'),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
134
178
|
}
|
|
135
|
-
category.taxablePrice += item.totalWithoutVAT;
|
|
136
179
|
}
|
|
137
|
-
|
|
138
|
-
|
|
180
|
+
}
|
|
181
|
+
calculateVAT() {
|
|
182
|
+
// For every VAT category, calculate the taxable amount and VAT amount
|
|
183
|
+
this.VATTotal = InvoicedBalanceItem.groupPerVATCategory(this.items).map((items) => {
|
|
184
|
+
const category = new VATSubtotal();
|
|
185
|
+
category.VATPercentage = items[0].VATExcempt === null ? items[0].VATPercentage : 0;
|
|
186
|
+
category.VATExcempt = items[0].VATExcempt;
|
|
187
|
+
category.taxablePrice = items.reduce((a, b) => a + b.totalWithoutVAT, 0);
|
|
139
188
|
if (!category.VATExcempt) {
|
|
140
|
-
category.VAT =
|
|
189
|
+
category.VAT = STMath.round(category.taxablePrice * category.VATPercentage / 10000) * 100;
|
|
141
190
|
}
|
|
142
191
|
else {
|
|
143
192
|
category.VAT = 0;
|
|
144
193
|
}
|
|
145
|
-
|
|
146
|
-
|
|
194
|
+
return category;
|
|
195
|
+
});
|
|
147
196
|
}
|
|
148
197
|
addItem(item) {
|
|
149
198
|
this.items.push(item);
|
|
150
199
|
this.calculateVAT();
|
|
151
200
|
}
|
|
201
|
+
get type() {
|
|
202
|
+
if (this.totalWithVAT < 0) {
|
|
203
|
+
return InvoiceType.CreditNote;
|
|
204
|
+
}
|
|
205
|
+
return InvoiceType.Invoice;
|
|
206
|
+
}
|
|
207
|
+
get theme() {
|
|
208
|
+
if (this.type === InvoiceType.CreditNote) {
|
|
209
|
+
return 'theme-error';
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
get priceBreakdown() {
|
|
213
|
+
return this.getPriceBreakdown();
|
|
214
|
+
}
|
|
215
|
+
getPriceBreakdown(options) {
|
|
216
|
+
return [
|
|
217
|
+
{
|
|
218
|
+
name: $t(`d642f190-1607-4f54-8530-7af2f15c651b`),
|
|
219
|
+
price: this.totalWithoutVAT,
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: $t(`13c04b8f-80f5-4274-9ea1-badb0f88a091`) + (this.VATTotal.length === 1 ? ' (' + Formatter.percentage(this.VATTotal[0].VATPercentage * 100) + ')' : ''),
|
|
223
|
+
description: this.VATTotal.length === 1 && this.VATTotal[0].VATExcempt ? getVATExcemptInvoiceNote(this.VATTotal[0].VATExcempt) : undefined,
|
|
224
|
+
price: this.VATTotalAmount,
|
|
225
|
+
action: this.VATTotal.length > 1 ? options === null || options === void 0 ? void 0 : options.vatAction : undefined,
|
|
226
|
+
},
|
|
227
|
+
...(this.payableRoundingAmount !== 0
|
|
228
|
+
? [
|
|
229
|
+
{
|
|
230
|
+
name: $t(`dafd5091-0698-4117-bc5a-db8ba05cefcd`),
|
|
231
|
+
price: this.payableRoundingAmount,
|
|
232
|
+
},
|
|
233
|
+
]
|
|
234
|
+
: []),
|
|
235
|
+
{
|
|
236
|
+
name: $t(`0376551a-9af8-44b7-8ab3-d343384dc900`),
|
|
237
|
+
price: this.totalWithVAT,
|
|
238
|
+
},
|
|
239
|
+
];
|
|
240
|
+
}
|
|
241
|
+
updatePayableRoundingAmount() {
|
|
242
|
+
// Calculate difference between the invoice price and the payments price
|
|
243
|
+
const difference = this.totalPaymentsAmount - (this.totalWithVAT - this.payableRoundingAmount);
|
|
244
|
+
if (Math.abs(difference) < 500) { // Correct maximum 5 cents
|
|
245
|
+
this.payableRoundingAmount = difference;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
this.payableRoundingAmount = 0;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/** */
|
|
252
|
+
correctRoundingByUpdatingPrices() {
|
|
253
|
+
console.log('correctRoundingByUpdatingPrices');
|
|
254
|
+
const difference = this.totalPaymentsAmount - (this.totalWithVAT - this.payableRoundingAmount);
|
|
255
|
+
if (difference === 0) {
|
|
256
|
+
// No need to do any magic
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
// For each VAT group, we start with the expected total without VAT.
|
|
260
|
+
// We calculate the difference and try to correct for it within the same VAT group.
|
|
261
|
+
// We first try to apply extra cents (or removal of cents) to the items with the highest difference
|
|
262
|
+
for (const items of InvoicedBalanceItem.groupPerVATCategory(this.items)) {
|
|
263
|
+
console.log('Calculating for group', items);
|
|
264
|
+
const current = items.reduce((a, b) => a + b.totalWithoutVAT, 0);
|
|
265
|
+
const precise = items.reduce((a, b) => a + b.preciseTotalWithoutVAT, 0);
|
|
266
|
+
const toAddToTaxablePrice = STMath.round((precise - current) / 100) * 100;
|
|
267
|
+
console.log('toAddToTaxablePrice', toAddToTaxablePrice);
|
|
268
|
+
if (toAddToTaxablePrice === 0) {
|
|
269
|
+
// Less than 1 cent difference, we cannot apply this
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
// If toAddToTaxablePrice > 0 -> te weinig aangerekend - difference moet worden toegevoegd aan taxableprice
|
|
273
|
+
// If toAddToTaxablePrice < 0 -> te veel aangerekend - difference moet worden toegevoegd aan taxableprice
|
|
274
|
+
function getNext() {
|
|
275
|
+
// Rank items by difference
|
|
276
|
+
items.sort((a, b) => {
|
|
277
|
+
const aDiff = a.preciseTotalWithoutVAT - a.totalWithoutVAT;
|
|
278
|
+
const bDiff = b.preciseTotalWithoutVAT - b.totalWithoutVAT;
|
|
279
|
+
if (toAddToTaxablePrice < 0) {
|
|
280
|
+
// We need to subtract, so sort ascending (largest negative items first)
|
|
281
|
+
return aDiff - bDiff;
|
|
282
|
+
}
|
|
283
|
+
return bDiff - aDiff; // Sort descending
|
|
284
|
+
});
|
|
285
|
+
const next = items[0];
|
|
286
|
+
if (!next) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
return next;
|
|
290
|
+
}
|
|
291
|
+
let next = getNext();
|
|
292
|
+
let loops = 0;
|
|
293
|
+
while (next && loops < 100) {
|
|
294
|
+
loops++;
|
|
295
|
+
const current = items.reduce((a, b) => a + b.totalWithoutVAT, 0);
|
|
296
|
+
const currentToAddToTaxablePrice = STMath.round((precise - current) / 100) * 100;
|
|
297
|
+
if (currentToAddToTaxablePrice === 0 || Math.sign(currentToAddToTaxablePrice) !== Math.sign(toAddToTaxablePrice)) {
|
|
298
|
+
console.log('Stopped group calculation because currentToAddToTaxablePrice is zero or switched sign', currentToAddToTaxablePrice);
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
// Change prices in steps of 0.005 (total price, so divided by quantity)
|
|
302
|
+
let step = Math.round(50 * 10000 / Math.abs(next.quantity));
|
|
303
|
+
if (step <= 1) {
|
|
304
|
+
step = 1; // Might jump further than expected / wanted
|
|
305
|
+
}
|
|
306
|
+
const addition = Math.sign(currentToAddToTaxablePrice) * Math.sign(next.quantity) * step;
|
|
307
|
+
next.unitPrice += addition;
|
|
308
|
+
next.addedToUnitPriceToCorrectVAT += addition;
|
|
309
|
+
console.log('Increasing unit price of ', next, 'with ' + addition);
|
|
310
|
+
// todo
|
|
311
|
+
next = getNext();
|
|
312
|
+
}
|
|
313
|
+
console.log('Done calculating group');
|
|
314
|
+
}
|
|
315
|
+
console.log('Done correctRoundingByUpdatingPrices');
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Call this method after changing the payments related to an invoice.
|
|
319
|
+
*/
|
|
320
|
+
buildFromPayments() {
|
|
321
|
+
if (this.number) {
|
|
322
|
+
throw new SimpleError({
|
|
323
|
+
code: 'invoice_has_number',
|
|
324
|
+
message: 'An invoice is immutable after it has been generated',
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
// Keep the sum of all balance items.
|
|
328
|
+
const balanceItemsMap = new Map();
|
|
329
|
+
for (const payment of this.payments) {
|
|
330
|
+
for (const item of payment.balanceItemPayments) {
|
|
331
|
+
let data = balanceItemsMap.get(item.balanceItem.id);
|
|
332
|
+
if (!data) {
|
|
333
|
+
data = {
|
|
334
|
+
balanceItem: item.balanceItem,
|
|
335
|
+
amount: 0,
|
|
336
|
+
};
|
|
337
|
+
balanceItemsMap.set(item.balanceItem.id, data);
|
|
338
|
+
}
|
|
339
|
+
data.amount += item.price;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
const invoicedItems = [];
|
|
343
|
+
for (const item of balanceItemsMap.values()) {
|
|
344
|
+
const invoiced = InvoicedBalanceItem.createFor(item.balanceItem, item.amount);
|
|
345
|
+
invoicedItems.push(invoiced);
|
|
346
|
+
}
|
|
347
|
+
invoicedItems.sort((a, b) => {
|
|
348
|
+
return Sorter.stack(Sorter.byNumberValue(a.totalWithoutVAT, b.totalWithoutVAT), Sorter.byStringValue(a.name || a.description, b.name || b.description));
|
|
349
|
+
});
|
|
350
|
+
this.items = invoicedItems;
|
|
351
|
+
this.correctRoundingByUpdatingPrices();
|
|
352
|
+
this.calculateVAT();
|
|
353
|
+
this.updatePayableRoundingAmount();
|
|
354
|
+
if (this.totalWithVAT !== this.totalPaymentsAmount) {
|
|
355
|
+
throw new SimpleError({
|
|
356
|
+
code: 'price_difference',
|
|
357
|
+
message: 'The price of the generated invoice did not match the price of the corresponding payments. Possibly caused by rounding that could not be corrected automatically.',
|
|
358
|
+
human: $t('8de3f0d6-3bbe-4668-a357-1fbf3d698177'),
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
152
362
|
}
|
|
153
363
|
__decorate([
|
|
154
364
|
field({ decoder: StringDecoder, defaultValue: () => uuidv4() })
|
|
@@ -171,6 +381,9 @@ __decorate([
|
|
|
171
381
|
__decorate([
|
|
172
382
|
field({ decoder: new ArrayDecoder(InvoicedBalanceItem) })
|
|
173
383
|
], Invoice.prototype, "items", void 0);
|
|
384
|
+
__decorate([
|
|
385
|
+
field({ decoder: new ArrayDecoder(PaymentGeneral) })
|
|
386
|
+
], Invoice.prototype, "payments", void 0);
|
|
174
387
|
__decorate([
|
|
175
388
|
field({ decoder: IntegerDecoder })
|
|
176
389
|
], Invoice.prototype, "payableRoundingAmount", void 0);
|
|
@@ -201,4 +414,16 @@ __decorate([
|
|
|
201
414
|
__decorate([
|
|
202
415
|
field({ decoder: BooleanDecoder, optional: true })
|
|
203
416
|
], Invoice.prototype, "didSendPeppol", void 0);
|
|
417
|
+
__decorate([
|
|
418
|
+
field({ decoder: DateDecoder, nullable: true })
|
|
419
|
+
], Invoice.prototype, "invoicedAt", void 0);
|
|
420
|
+
__decorate([
|
|
421
|
+
field({ decoder: DateDecoder, nullable: true })
|
|
422
|
+
], Invoice.prototype, "dueAt", void 0);
|
|
423
|
+
__decorate([
|
|
424
|
+
field({ decoder: DateDecoder })
|
|
425
|
+
], Invoice.prototype, "createdAt", void 0);
|
|
426
|
+
__decorate([
|
|
427
|
+
field({ decoder: DateDecoder })
|
|
428
|
+
], Invoice.prototype, "updatedAt", void 0);
|
|
204
429
|
//# sourceMappingURL=Invoice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Invoice.js","sourceRoot":"","sources":["../../../../src/billing/Invoice.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Invoice.js","sourceRoot":"","sources":["../../../../src/billing/Invoice.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,14 @@ export declare class InvoicedBalanceItem extends AutoEncoder {
|
|
|
48
48
|
* = LineExtensionAmount
|
|
49
49
|
*/
|
|
50
50
|
get totalWithoutVAT(): number;
|
|
51
|
+
/**
|
|
52
|
+
* Total without VAT, but not rounded
|
|
53
|
+
*/
|
|
54
|
+
get preciseTotalWithoutVAT(): number;
|
|
55
|
+
/**
|
|
56
|
+
* Debug helper
|
|
57
|
+
*/
|
|
58
|
+
addedToUnitPriceToCorrectVAT: number;
|
|
51
59
|
/**
|
|
52
60
|
* Creates a default configuration for a balance item that needs to be invoiced. The result can still be adjusted to correct rounding issues, because
|
|
53
61
|
* a balanace item cannot always be perfectly represented on an invoice (on an invoice rounding happens on invoice level, while balance items can have any price that is not really rounded at any time unless when paid).
|
|
@@ -56,5 +64,10 @@ export declare class InvoicedBalanceItem extends AutoEncoder {
|
|
|
56
64
|
* @param amount paid (or to be paid) price, should always include VAT if there is VAT
|
|
57
65
|
*/
|
|
58
66
|
static createFor(balanceItem: BalanceItem, amount: number): InvoicedBalanceItem;
|
|
67
|
+
/**
|
|
68
|
+
* Important, this influences VAT calculatio. Items are grouped by key and VAT is calculated per group.
|
|
69
|
+
*/
|
|
70
|
+
static getVATUniqueKey(item: InvoicedBalanceItem): string;
|
|
71
|
+
static groupPerVATCategory(items: InvoicedBalanceItem[]): InvoicedBalanceItem[][];
|
|
59
72
|
}
|
|
60
73
|
//# sourceMappingURL=InvoicedBalanceItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvoicedBalanceItem.d.ts","sourceRoot":"","sources":["../../../../src/billing/InvoicedBalanceItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqE,MAAM,6BAA6B,CAAC;AAE7H,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"InvoicedBalanceItem.d.ts","sourceRoot":"","sources":["../../../../src/billing/InvoicedBalanceItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqE,MAAM,6BAA6B,CAAC;AAE7H,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIlE,qBAAa,mBAAoB,SAAQ,WAAW;IAEhD,EAAE,EAAE,MAAM,CAAC;IAGX,aAAa,SAAM;IAGnB,IAAI,SAAM;IAGV,WAAW,SAAM;IAEjB;;;;;;;;;;OAUG;IAEH,qBAAqB,SAAK;IAE1B;;;;;OAKG;IAEH,QAAQ,SAAW;IAEnB;;;OAGG;IAEH,SAAS,SAAK;IAEd;;;OAGG;IAEH,aAAa,EAAE,MAAM,CAAK;IAE1B;;OAEG;IAEH,WAAW,UAAS;IAEpB;;;OAGG;IAEH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAE3C;;;OAGG;IACH,IAAI,eAAe,WAElB;IAED;;OAEG;IACH,IAAI,sBAAsB,WAKzB;IAED;;OAEG;IACH,4BAA4B,SAAK;IAEjC;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;IAkDzD;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,mBAAmB;IAOhD,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,EAAE;CAgBpF"}
|
|
@@ -3,6 +3,7 @@ import { AutoEncoder, BooleanDecoder, EnumDecoder, field, IntegerDecoder, String
|
|
|
3
3
|
import { v4 as uuidv4 } from 'uuid';
|
|
4
4
|
import { VATExcemptReason } from '../BalanceItem.js';
|
|
5
5
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
6
|
+
import { STMath } from '@stamhoofd/utility';
|
|
6
7
|
export class InvoicedBalanceItem extends AutoEncoder {
|
|
7
8
|
constructor() {
|
|
8
9
|
super(...arguments);
|
|
@@ -47,13 +48,26 @@ export class InvoicedBalanceItem extends AutoEncoder {
|
|
|
47
48
|
* mistakes can be corrected and credited.
|
|
48
49
|
*/
|
|
49
50
|
this.VATExcempt = null;
|
|
51
|
+
/**
|
|
52
|
+
* Debug helper
|
|
53
|
+
*/
|
|
54
|
+
this.addedToUnitPriceToCorrectVAT = 0;
|
|
50
55
|
}
|
|
51
56
|
/**
|
|
52
57
|
* This should be rounded to 2 decimals to match PEPPOL requirements
|
|
53
58
|
* = LineExtensionAmount
|
|
54
59
|
*/
|
|
55
60
|
get totalWithoutVAT() {
|
|
56
|
-
return
|
|
61
|
+
return STMath.round(this.unitPrice * this.quantity / 1000000) * 100;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Total without VAT, but not rounded
|
|
65
|
+
*/
|
|
66
|
+
get preciseTotalWithoutVAT() {
|
|
67
|
+
if (this.VATExcempt) {
|
|
68
|
+
return this.balanceInvoicedAmount;
|
|
69
|
+
}
|
|
70
|
+
return this.balanceInvoicedAmount * 100 / (100 + this.VATPercentage);
|
|
57
71
|
}
|
|
58
72
|
/**
|
|
59
73
|
* Creates a default configuration for a balance item that needs to be invoiced. The result can still be adjusted to correct rounding issues, because
|
|
@@ -80,9 +94,9 @@ export class InvoicedBalanceItem extends AutoEncoder {
|
|
|
80
94
|
item.VATExcempt = balanceItem.VATExcempt;
|
|
81
95
|
item.VATIncluded = balanceItem.VATIncluded;
|
|
82
96
|
// Calculate amount and unit price
|
|
83
|
-
const balanceItemUnitPriceWithVAT =
|
|
84
|
-
const quantity =
|
|
85
|
-
if (quantity
|
|
97
|
+
const balanceItemUnitPriceWithVAT = STMath.round(balanceItem.priceWithVAT / balanceItem.quantity);
|
|
98
|
+
const quantity = STMath.round(item.balanceInvoicedAmount * 10000 / balanceItemUnitPriceWithVAT); // Amount per ten thousand
|
|
99
|
+
if (quantity === 0) {
|
|
86
100
|
throw new SimpleError({
|
|
87
101
|
message: 'Invoiced amount is too low to create an invoiced balance item',
|
|
88
102
|
human: $t('551f6cc0-0b1a-4a62-8e09-cef159f5f7d5'),
|
|
@@ -99,9 +113,37 @@ export class InvoicedBalanceItem extends AutoEncoder {
|
|
|
99
113
|
// so this is disabled for now. Rounding will happen on line level though
|
|
100
114
|
// item.unitPrice = Math.round(item.unitPrice / 100) * 100;
|
|
101
115
|
// round as integer instead (0.0001):
|
|
102
|
-
item.unitPrice =
|
|
116
|
+
item.unitPrice = STMath.round(item.unitPrice);
|
|
117
|
+
// Make sure unit price is always positive, and quantity is negative instead
|
|
118
|
+
if (item.unitPrice < 0) {
|
|
119
|
+
item.unitPrice = -item.unitPrice;
|
|
120
|
+
item.quantity = -item.quantity;
|
|
121
|
+
}
|
|
103
122
|
return item;
|
|
104
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Important, this influences VAT calculatio. Items are grouped by key and VAT is calculated per group.
|
|
126
|
+
*/
|
|
127
|
+
static getVATUniqueKey(item) {
|
|
128
|
+
if (item.VATExcempt === null) {
|
|
129
|
+
return `vat_${item.VATPercentage}`;
|
|
130
|
+
}
|
|
131
|
+
return `excempt_${item.VATExcempt}_${item.VATExcempt}`;
|
|
132
|
+
}
|
|
133
|
+
static groupPerVATCategory(items) {
|
|
134
|
+
// For every VAT category, calculate the taxable amount and VAT amount
|
|
135
|
+
const categories = new Map();
|
|
136
|
+
for (const item of items) {
|
|
137
|
+
const key = this.getVATUniqueKey(item);
|
|
138
|
+
let category = categories.get(key);
|
|
139
|
+
if (!category) {
|
|
140
|
+
category = [];
|
|
141
|
+
categories.set(key, category);
|
|
142
|
+
}
|
|
143
|
+
category.push(item);
|
|
144
|
+
}
|
|
145
|
+
return [...categories.values()];
|
|
146
|
+
}
|
|
105
147
|
}
|
|
106
148
|
__decorate([
|
|
107
149
|
field({ decoder: StringDecoder, defaultValue: () => uuidv4() })
|