@silexpert/core 1.1.305 → 1.1.306

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.
Files changed (144) hide show
  1. package/dist/cjs/api/resources/Closing.d.ts +2 -1
  2. package/dist/cjs/api/resources/Closing.d.ts.map +1 -1
  3. package/dist/cjs/api/resources/Closing.js +3 -0
  4. package/dist/cjs/api/resources/Closing.js.map +1 -1
  5. package/dist/cjs/api/resources/Exercice.d.ts +2 -2
  6. package/dist/cjs/api/resources/Exercice.d.ts.map +1 -1
  7. package/dist/cjs/api/resources/Exercice.js +2 -2
  8. package/dist/cjs/api/resources/Exercice.js.map +1 -1
  9. package/dist/cjs/api/resources/IntermediateManagementRebate.d.ts.map +1 -1
  10. package/dist/cjs/api/resources/IntermediateManagementRebate.js +6 -1
  11. package/dist/cjs/api/resources/IntermediateManagementRebate.js.map +1 -1
  12. package/dist/cjs/api/resources/Payment.d.ts +2 -1
  13. package/dist/cjs/api/resources/Payment.d.ts.map +1 -1
  14. package/dist/cjs/api/resources/Payment.js +3 -0
  15. package/dist/cjs/api/resources/Payment.js.map +1 -1
  16. package/dist/cjs/types/Interface/api/authentification/ConnectFromSSO.d.ts +4 -0
  17. package/dist/cjs/types/Interface/api/authentification/ConnectFromSSO.d.ts.map +1 -0
  18. package/dist/cjs/types/Interface/api/authentification/ConnectFromSSO.js +23 -0
  19. package/dist/cjs/types/Interface/api/authentification/ConnectFromSSO.js.map +1 -0
  20. package/dist/cjs/types/Interface/api/exercice/QueryExercice.d.ts +3 -0
  21. package/dist/cjs/types/Interface/api/exercice/QueryExercice.d.ts.map +1 -1
  22. package/dist/cjs/types/Interface/api/exercice/QueryExercice.js +11 -1
  23. package/dist/cjs/types/Interface/api/exercice/QueryExercice.js.map +1 -1
  24. package/dist/cjs/types/Interface/api/exercice/UpdateExercice.d.ts +1 -0
  25. package/dist/cjs/types/Interface/api/exercice/UpdateExercice.d.ts.map +1 -1
  26. package/dist/cjs/types/Interface/api/exercice/UpdateExercice.js +7 -0
  27. package/dist/cjs/types/Interface/api/exercice/UpdateExercice.js.map +1 -1
  28. package/dist/cjs/types/Interface/api/payment/Params.d.ts +4 -0
  29. package/dist/cjs/types/Interface/api/payment/Params.d.ts.map +1 -0
  30. package/dist/cjs/types/Interface/api/payment/Params.js +24 -0
  31. package/dist/cjs/types/Interface/api/payment/Params.js.map +1 -0
  32. package/dist/cjs/types/Interface/api/payment/Util.d.ts +25 -0
  33. package/dist/cjs/types/Interface/api/payment/Util.d.ts.map +1 -0
  34. package/dist/cjs/types/Interface/api/payment/Util.js +3 -0
  35. package/dist/cjs/types/Interface/api/payment/Util.js.map +1 -0
  36. package/dist/cjs/types/Interface/api/society/QueryPaginatedSociety.d.ts +1 -0
  37. package/dist/cjs/types/Interface/api/society/QueryPaginatedSociety.d.ts.map +1 -1
  38. package/dist/cjs/types/Interface/api/society/QueryPaginatedSociety.js +8 -0
  39. package/dist/cjs/types/Interface/api/society/QueryPaginatedSociety.js.map +1 -1
  40. package/dist/cjs/types/Interface/api/user/ParamsGetAllUserWithRoles.js +1 -1
  41. package/dist/cjs/types/Interface/api/user/ParamsGetAllUserWithRoles.js.map +1 -1
  42. package/dist/cjs/types/Interface/models/IExercicePrestation.d.ts +1 -0
  43. package/dist/cjs/types/Interface/models/IExercicePrestation.d.ts.map +1 -1
  44. package/dist/cjs/types/Interface/models/IExercicePrestation.js.map +1 -1
  45. package/dist/cjs/types/Interface/models/ISociety.d.ts +2 -1
  46. package/dist/cjs/types/Interface/models/ISociety.d.ts.map +1 -1
  47. package/dist/cjs/types/Interface/models/ISociety.js.map +1 -1
  48. package/dist/cjs/types/index.d.ts +3 -0
  49. package/dist/cjs/types/index.d.ts.map +1 -1
  50. package/dist/cjs/types/index.js +3 -0
  51. package/dist/cjs/types/index.js.map +1 -1
  52. package/dist/cjs/utils/payment.d.ts +14 -2
  53. package/dist/cjs/utils/payment.d.ts.map +1 -1
  54. package/dist/cjs/utils/payment.js +172 -2
  55. package/dist/cjs/utils/payment.js.map +1 -1
  56. package/dist/cjs/utils/tests/payment.spec.d.ts +2 -0
  57. package/dist/cjs/utils/tests/payment.spec.d.ts.map +1 -0
  58. package/dist/cjs/utils/tests/payment.spec.js +458 -0
  59. package/dist/cjs/utils/tests/payment.spec.js.map +1 -0
  60. package/dist/cjs/utils/vat/utils.d.ts +2 -0
  61. package/dist/cjs/utils/vat/utils.d.ts.map +1 -1
  62. package/dist/cjs/utils/vat/utils.js +19 -1
  63. package/dist/cjs/utils/vat/utils.js.map +1 -1
  64. package/dist/mjs/api/resources/Closing.d.ts +2 -1
  65. package/dist/mjs/api/resources/Closing.d.ts.map +1 -1
  66. package/dist/mjs/api/resources/Closing.js +3 -0
  67. package/dist/mjs/api/resources/Closing.js.map +1 -1
  68. package/dist/mjs/api/resources/Exercice.d.ts +2 -2
  69. package/dist/mjs/api/resources/Exercice.d.ts.map +1 -1
  70. package/dist/mjs/api/resources/Exercice.js +2 -2
  71. package/dist/mjs/api/resources/Exercice.js.map +1 -1
  72. package/dist/mjs/api/resources/IntermediateManagementRebate.d.ts.map +1 -1
  73. package/dist/mjs/api/resources/IntermediateManagementRebate.js +6 -1
  74. package/dist/mjs/api/resources/IntermediateManagementRebate.js.map +1 -1
  75. package/dist/mjs/api/resources/Payment.d.ts +2 -1
  76. package/dist/mjs/api/resources/Payment.d.ts.map +1 -1
  77. package/dist/mjs/api/resources/Payment.js +3 -0
  78. package/dist/mjs/api/resources/Payment.js.map +1 -1
  79. package/dist/mjs/types/Interface/api/authentification/ConnectFromSSO.d.ts +4 -0
  80. package/dist/mjs/types/Interface/api/authentification/ConnectFromSSO.d.ts.map +1 -0
  81. package/dist/mjs/types/Interface/api/authentification/ConnectFromSSO.js +20 -0
  82. package/dist/mjs/types/Interface/api/authentification/ConnectFromSSO.js.map +1 -0
  83. package/dist/mjs/types/Interface/api/exercice/QueryExercice.d.ts +3 -0
  84. package/dist/mjs/types/Interface/api/exercice/QueryExercice.d.ts.map +1 -1
  85. package/dist/mjs/types/Interface/api/exercice/QueryExercice.js +10 -0
  86. package/dist/mjs/types/Interface/api/exercice/QueryExercice.js.map +1 -1
  87. package/dist/mjs/types/Interface/api/exercice/UpdateExercice.d.ts +1 -0
  88. package/dist/mjs/types/Interface/api/exercice/UpdateExercice.d.ts.map +1 -1
  89. package/dist/mjs/types/Interface/api/exercice/UpdateExercice.js +8 -0
  90. package/dist/mjs/types/Interface/api/exercice/UpdateExercice.js.map +1 -1
  91. package/dist/mjs/types/Interface/api/payment/Params.d.ts +4 -0
  92. package/dist/mjs/types/Interface/api/payment/Params.d.ts.map +1 -0
  93. package/dist/mjs/types/Interface/api/payment/Params.js +21 -0
  94. package/dist/mjs/types/Interface/api/payment/Params.js.map +1 -0
  95. package/dist/mjs/types/Interface/api/payment/Util.d.ts +25 -0
  96. package/dist/mjs/types/Interface/api/payment/Util.d.ts.map +1 -0
  97. package/dist/mjs/types/Interface/api/payment/Util.js +2 -0
  98. package/dist/mjs/types/Interface/api/payment/Util.js.map +1 -0
  99. package/dist/mjs/types/Interface/api/society/QueryPaginatedSociety.d.ts +1 -0
  100. package/dist/mjs/types/Interface/api/society/QueryPaginatedSociety.d.ts.map +1 -1
  101. package/dist/mjs/types/Interface/api/society/QueryPaginatedSociety.js +8 -0
  102. package/dist/mjs/types/Interface/api/society/QueryPaginatedSociety.js.map +1 -1
  103. package/dist/mjs/types/Interface/api/user/ParamsGetAllUserWithRoles.js +1 -1
  104. package/dist/mjs/types/Interface/api/user/ParamsGetAllUserWithRoles.js.map +1 -1
  105. package/dist/mjs/types/Interface/models/IExercicePrestation.d.ts +1 -0
  106. package/dist/mjs/types/Interface/models/IExercicePrestation.d.ts.map +1 -1
  107. package/dist/mjs/types/Interface/models/IExercicePrestation.js.map +1 -1
  108. package/dist/mjs/types/Interface/models/ISociety.d.ts +2 -1
  109. package/dist/mjs/types/Interface/models/ISociety.d.ts.map +1 -1
  110. package/dist/mjs/types/Interface/models/ISociety.js.map +1 -1
  111. package/dist/mjs/types/index.d.ts +3 -0
  112. package/dist/mjs/types/index.d.ts.map +1 -1
  113. package/dist/mjs/types/index.js +3 -0
  114. package/dist/mjs/types/index.js.map +1 -1
  115. package/dist/mjs/utils/payment.d.ts +14 -2
  116. package/dist/mjs/utils/payment.d.ts.map +1 -1
  117. package/dist/mjs/utils/payment.js +170 -1
  118. package/dist/mjs/utils/payment.js.map +1 -1
  119. package/dist/mjs/utils/tests/payment.spec.d.ts +2 -0
  120. package/dist/mjs/utils/tests/payment.spec.d.ts.map +1 -0
  121. package/dist/mjs/utils/tests/payment.spec.js +449 -0
  122. package/dist/mjs/utils/tests/payment.spec.js.map +1 -0
  123. package/dist/mjs/utils/vat/utils.d.ts +2 -0
  124. package/dist/mjs/utils/vat/utils.d.ts.map +1 -1
  125. package/dist/mjs/utils/vat/utils.js +14 -0
  126. package/dist/mjs/utils/vat/utils.js.map +1 -1
  127. package/package.json +1 -1
  128. package/ts/api/resources/Closing.ts +6 -1
  129. package/ts/api/resources/Exercice.ts +3 -3
  130. package/ts/api/resources/IntermediateManagementRebate.ts +6 -1
  131. package/ts/api/resources/Payment.ts +5 -1
  132. package/ts/types/Interface/api/authentification/ConnectFromSSO.ts +8 -0
  133. package/ts/types/Interface/api/exercice/QueryExercice.ts +8 -0
  134. package/ts/types/Interface/api/exercice/UpdateExercice.ts +6 -0
  135. package/ts/types/Interface/api/payment/Params.ts +9 -0
  136. package/ts/types/Interface/api/payment/Util.ts +26 -0
  137. package/ts/types/Interface/api/society/QueryPaginatedSociety.ts +6 -0
  138. package/ts/types/Interface/api/user/ParamsGetAllUserWithRoles.ts +1 -1
  139. package/ts/types/Interface/models/IExercicePrestation.ts +1 -0
  140. package/ts/types/Interface/models/ISociety.ts +2 -0
  141. package/ts/types/index.ts +3 -0
  142. package/ts/utils/payment.ts +194 -2
  143. package/ts/utils/tests/payment.spec.ts +466 -0
  144. package/ts/utils/vat/utils.ts +16 -0
@@ -0,0 +1,458 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const dayjs = require("dayjs");
13
+ const types_1 = require("../../types");
14
+ const mockdate_1 = require("mockdate");
15
+ const payment_1 = require("../payment");
16
+ describe('Payment', () => {
17
+ describe('calculatePayments', () => {
18
+ var _a, _b;
19
+ const idPrestation = 1;
20
+ const idSociety = 1;
21
+ const yearlyAmountNonExpress = 1800;
22
+ const appCost = 14.9;
23
+ const firstExerciceNonExpresssEndDate = dayjs().add(11, 'month').endOf('month').toDate();
24
+ const prestationList = {
25
+ id: 34,
26
+ name: 'Compta Pro',
27
+ isComptable: true,
28
+ isJuridique: false,
29
+ isSocial: false,
30
+ isAttestation: false,
31
+ inAverageCart: true,
32
+ isBack: false,
33
+ minimumPrice: null,
34
+ price: null,
35
+ isCatalog: false,
36
+ isPlannable: false,
37
+ hidden: false,
38
+ isComplementary: false,
39
+ signaturePosition: '400,54,569,90',
40
+ signaturePage: 7,
41
+ };
42
+ const idVat = types_1.Vat.TX_10.id;
43
+ const vatRate = (_b = (_a = Object.values(types_1.Vat).find(v => v.id === idVat)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 20;
44
+ const listPartialExercicePrestationExpress = [
45
+ {
46
+ startDate: dayjs().subtract(2, 'year').startOf('month').toDate(),
47
+ endDate: dayjs().subtract(13, 'month').endOf('month').toDate(),
48
+ countExpressMonthlyPayment: 2,
49
+ totalAmount: 1200,
50
+ },
51
+ {
52
+ startDate: dayjs().subtract(1, 'year').startOf('month').toDate(),
53
+ endDate: dayjs().subtract(1, 'month').endOf('month').toDate(),
54
+ countExpressMonthlyPayment: 2,
55
+ totalAmount: 1800,
56
+ },
57
+ ];
58
+ const listRegulations = [{
59
+ amount: 600,
60
+ amountUsed: 0,
61
+ date: new Date(),
62
+ processed: true,
63
+ idPaymentMethod: types_1.PaymentMethod.BANK_CARD.id,
64
+ idSociety,
65
+ }, {
66
+ amount: 300,
67
+ amountUsed: 0,
68
+ date: new Date(),
69
+ processed: true,
70
+ idPaymentMethod: types_1.PaymentMethod.BANK_CARD.id,
71
+ idSociety,
72
+ }, {
73
+ amount: 300,
74
+ amountUsed: 300,
75
+ date: new Date(),
76
+ processed: true,
77
+ idPaymentMethod: types_1.PaymentMethod.BANK_CARD.id,
78
+ idSociety,
79
+ }];
80
+ // =====================
81
+ // errors handling
82
+ // =====================
83
+ test('should return error if prestationList doesn\'t correspond (!hidden, isCatalog, isComptable)', () => {
84
+ expect.assertions(2);
85
+ try {
86
+ prestationList.hidden = true;
87
+ (0, payment_1.calculatePaymentsAuto)({
88
+ goToClient: dayjs().toDate(),
89
+ firstExerciceNonExpresssEndDate,
90
+ idPrestation,
91
+ prestationList: Object.assign(Object.assign({}, prestationList), { isCatalog: true }),
92
+ idVat,
93
+ listPartialExercicePrestationExpress,
94
+ listRegulations,
95
+ yearlyAmountNonExpress
96
+ });
97
+ }
98
+ catch (error) {
99
+ expect(error).toBeInstanceOf(Error);
100
+ // @ts-ignore
101
+ expect(error.message).toStrictEqual('Ce type de prestation ne correspond pas aux conditions attendues.');
102
+ }
103
+ });
104
+ test('should return error if listRegulations is empty', () => {
105
+ expect.assertions(2);
106
+ try {
107
+ (0, payment_1.calculatePaymentsAuto)({
108
+ goToClient: dayjs().toDate(),
109
+ firstExerciceNonExpresssEndDate,
110
+ idPrestation,
111
+ prestationList,
112
+ idVat,
113
+ listPartialExercicePrestationExpress,
114
+ listRegulations: [],
115
+ yearlyAmountNonExpress
116
+ });
117
+ }
118
+ catch (error) {
119
+ expect(error).toBeInstanceOf(Error);
120
+ // @ts-ignore
121
+ expect(error.message).toStrictEqual('List of regulations can not be empty');
122
+ }
123
+ });
124
+ test('should listRegulations contain amount and amountUsed', () => {
125
+ expect.assertions(2);
126
+ try {
127
+ (0, payment_1.calculatePaymentsAuto)({
128
+ goToClient: dayjs().toDate(),
129
+ firstExerciceNonExpresssEndDate,
130
+ idPrestation,
131
+ prestationList,
132
+ idVat,
133
+ listPartialExercicePrestationExpress,
134
+ listRegulations: [{ processed: true }],
135
+ yearlyAmountNonExpress
136
+ });
137
+ }
138
+ catch (error) {
139
+ expect(error).toBeInstanceOf(Error);
140
+ // @ts-ignore
141
+ expect(error.message).toStrictEqual('Amount and amountUsed are missing for regulations');
142
+ }
143
+ });
144
+ // =====================
145
+ // logical
146
+ // =====================
147
+ // express
148
+ test('if only one express, monthly payments of actual exo should be in parallel of express monthly payments, smoothed in number of remaining months (mini 3 months) (if not in 3 last month)', () => __awaiter(void 0, void 0, void 0, function* () {
149
+ const payments = (0, payment_1.calculatePaymentsAuto)({
150
+ goToClient: dayjs().toDate(),
151
+ firstExerciceNonExpresssEndDate,
152
+ idPrestation,
153
+ prestationList,
154
+ idVat,
155
+ listPartialExercicePrestationExpress: [listPartialExercicePrestationExpress[0]],
156
+ listRegulations,
157
+ yearlyAmountNonExpress
158
+ });
159
+ const firstExpressDatePayment = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) < 0)[0].datePayment;
160
+ const firstNonExpressDatePayment = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) === 0)[0].datePayment;
161
+ expect(dayjs(firstNonExpressDatePayment).diff(firstExpressDatePayment, 'month')).toStrictEqual(0);
162
+ }));
163
+ test('if more than one express, monthly payments of actual exo should be in a row of express monthly payments and smoothed, smoothed in number of remaining months after express monthly payments (mini 3 months) (if in 3 last month of exercice)', () => __awaiter(void 0, void 0, void 0, function* () {
164
+ var _c, _d, _e, _f;
165
+ const payments = (0, payment_1.calculatePaymentsAuto)({
166
+ goToClient: dayjs().toDate(),
167
+ firstExerciceNonExpresssEndDate,
168
+ idPrestation,
169
+ prestationList,
170
+ idVat,
171
+ listPartialExercicePrestationExpress,
172
+ listRegulations,
173
+ yearlyAmountNonExpress
174
+ });
175
+ const lastExpressDatePayment = (_d = (_c = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) < 0).splice(-1)) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.datePayment;
176
+ const firstNonExpressDatePayment = (_f = (_e = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) === 0)) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.datePayment;
177
+ expect(dayjs(firstNonExpressDatePayment).diff(lastExpressDatePayment, 'month')).toStrictEqual(1);
178
+ }));
179
+ // non express
180
+ test('should return a number of payments equal to nb of remaining months in exercice (if not in 3 last months)', () => __awaiter(void 0, void 0, void 0, function* () {
181
+ const mockedDate = dayjs('2024-05-15').toDate();
182
+ mockdate_1.default.set(mockedDate);
183
+ const nbMonthDelay = 6;
184
+ const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();
185
+ const payments = (0, payment_1.calculatePaymentsAuto)({
186
+ goToClient: dayjs().toDate(),
187
+ firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate,
188
+ idPrestation,
189
+ prestationList,
190
+ idVat,
191
+ listPartialExercicePrestationExpress: [],
192
+ listRegulations: [{
193
+ amount: 50,
194
+ amountUsed: 0,
195
+ }],
196
+ yearlyAmountNonExpress
197
+ });
198
+ // const listNonExpressPayments = payments.filter(p => p.closingDate === newFirstExerciceNonExpresssEndDate);
199
+ const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);
200
+ expect(listNonExpressPayments.length).toStrictEqual(nbMonthDelay);
201
+ mockdate_1.default.reset();
202
+ }));
203
+ test('should return a number of payments equal to 3 (if in 3 last month of exercice)', () => __awaiter(void 0, void 0, void 0, function* () {
204
+ const nbMonthDelay = 1;
205
+ const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();
206
+ const payments = (0, payment_1.calculatePaymentsAuto)({
207
+ goToClient: dayjs().toDate(),
208
+ firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate,
209
+ idPrestation,
210
+ prestationList,
211
+ idVat,
212
+ listPartialExercicePrestationExpress: [],
213
+ listRegulations: [{
214
+ amount: 50,
215
+ amountUsed: 0,
216
+ }],
217
+ yearlyAmountNonExpress
218
+ });
219
+ const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);
220
+ expect(listNonExpressPayments.length).toStrictEqual(3);
221
+ }));
222
+ test('should (yearlyAmountNonExpress - sum of listRegulations) / count of monthly payments be equal to monthly payment amount (if not in 3 last month)', () => __awaiter(void 0, void 0, void 0, function* () {
223
+ const mockedDate = dayjs('2024-05-15').toDate();
224
+ mockdate_1.default.set(mockedDate);
225
+ const nbMonthDelay = 6;
226
+ const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();
227
+ const newListRegulations = [{
228
+ amount: 50,
229
+ amountUsed: 0,
230
+ }];
231
+ const payments = (0, payment_1.calculatePaymentsAuto)({
232
+ goToClient: dayjs().toDate(),
233
+ firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate,
234
+ idPrestation,
235
+ prestationList,
236
+ idVat,
237
+ listPartialExercicePrestationExpress: [],
238
+ listRegulations: newListRegulations,
239
+ yearlyAmountNonExpress
240
+ });
241
+ const diff = yearlyAmountNonExpress - newListRegulations.reduce((acc, r) => acc + r.amount - r.amountUsed, 0);
242
+ const amount = Math.round(100 * diff / nbMonthDelay) / 100;
243
+ expect(payments[0].amount).toStrictEqual(Math.round(100 * amount * ((100 + vatRate) / 100)) / 100);
244
+ mockdate_1.default.reset();
245
+ }));
246
+ test('should (totalAmount - firstPaymentAmount) / 3 be equal to monthly payment amount (if in 3 last month of exercice)', () => __awaiter(void 0, void 0, void 0, function* () {
247
+ const nbMonthDelay = 1;
248
+ const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();
249
+ const newListRegulations = [{
250
+ amount: 50,
251
+ amountUsed: 0,
252
+ }];
253
+ const payments = (0, payment_1.calculatePaymentsAuto)({
254
+ goToClient: dayjs().toDate(),
255
+ firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate,
256
+ idPrestation,
257
+ prestationList,
258
+ idVat,
259
+ listPartialExercicePrestationExpress: [],
260
+ listRegulations: newListRegulations,
261
+ yearlyAmountNonExpress
262
+ });
263
+ const diff = yearlyAmountNonExpress - newListRegulations.reduce((acc, r) => acc + r.amount - r.amountUsed, 0);
264
+ const amount = Math.round(100 * diff / 3) / 100;
265
+ expect(payments[0].amount).toStrictEqual(Math.round(100 * amount * ((100 + vatRate) / 100)) / 100);
266
+ }));
267
+ // annual price increase
268
+ test('should apply annual price increase (2,75%) if signed before last 3 months of civil year', () => __awaiter(void 0, void 0, void 0, function* () {
269
+ const mockedDate = dayjs('2024-08-15').toDate();
270
+ mockdate_1.default.set(mockedDate);
271
+ const newFirstExerciceNonExpresssEndDate = dayjs().add(11, 'month').endOf('month').toDate();
272
+ const payments = (0, payment_1.calculatePaymentsAuto)({
273
+ goToClient: dayjs().toDate(),
274
+ firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate,
275
+ idPrestation,
276
+ prestationList,
277
+ idVat,
278
+ listPartialExercicePrestationExpress: [],
279
+ listRegulations: [{
280
+ amount: 50,
281
+ amountUsed: 0,
282
+ }],
283
+ yearlyAmountNonExpress
284
+ });
285
+ const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);
286
+ expect(Math.round(100 * listNonExpressPayments[0].amount * 1.0275) / 100).toStrictEqual(listNonExpressPayments.splice(-2)[0].amount);
287
+ mockdate_1.default.reset();
288
+ }));
289
+ test('should not apply annual price increase (2,75%) if signed in last 3 months of civil year', () => __awaiter(void 0, void 0, void 0, function* () {
290
+ const mockedDate = dayjs('2024-11-15').toDate();
291
+ mockdate_1.default.set(mockedDate);
292
+ const newFirstExerciceNonExpresssEndDate = dayjs().add(11, 'month').endOf('month').toDate();
293
+ const payments = (0, payment_1.calculatePaymentsAuto)({
294
+ goToClient: dayjs().toDate(),
295
+ firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate,
296
+ idPrestation,
297
+ prestationList,
298
+ idVat,
299
+ listPartialExercicePrestationExpress: [],
300
+ listRegulations: [{
301
+ amount: 50,
302
+ amountUsed: 0,
303
+ }],
304
+ yearlyAmountNonExpress
305
+ });
306
+ const listNonExpressPayments = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-06-01')) === 0);
307
+ expect(listNonExpressPayments[0].amount).toStrictEqual(listNonExpressPayments.splice(-2)[0].amount);
308
+ mockdate_1.default.reset();
309
+ }));
310
+ test('should apply 14,9€ HT increase for the second exercice created (only offered on first exo) (no rules for 3 last months)', () => __awaiter(void 0, void 0, void 0, function* () {
311
+ var _g, _h;
312
+ const mockedDate = dayjs('2024-06-15').toDate();
313
+ mockdate_1.default.set(mockedDate);
314
+ const newFirstExerciceNonExpresssEndDate = dayjs().add(12, 'month').endOf('month').toDate();
315
+ const payments = (0, payment_1.calculatePaymentsAuto)({
316
+ goToClient: dayjs().toDate(),
317
+ firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate,
318
+ idPrestation,
319
+ prestationList,
320
+ idVat,
321
+ listPartialExercicePrestationExpress: [],
322
+ listRegulations: [{
323
+ amount: 50,
324
+ amountUsed: 50,
325
+ }],
326
+ yearlyAmountNonExpress
327
+ });
328
+ const paymentsOfFirstExo = (_g = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-06-01')) === 0).splice(-1)[0].amount) !== null && _g !== void 0 ? _g : 0;
329
+ const paymentsOfSecondExo = (_h = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-07-01')) === 0).splice(-1)[0].amount) !== null && _h !== void 0 ? _h : 0;
330
+ expect(paymentsOfFirstExo + appCost * ((100 + vatRate) / 100)).toStrictEqual(paymentsOfSecondExo);
331
+ mockdate_1.default.reset();
332
+ }));
333
+ // misc
334
+ test('should payments been generated sorted by exercices start date', () => __awaiter(void 0, void 0, void 0, function* () {
335
+ var _j;
336
+ const listPartialExercicePrestationExpressCloned = [...listPartialExercicePrestationExpress];
337
+ listPartialExercicePrestationExpressCloned[0] = Object.assign(Object.assign({}, listPartialExercicePrestationExpress[0]), { startDate: dayjs().add(1, 'year').startOf('month').toDate() });
338
+ listPartialExercicePrestationExpressCloned[1] = Object.assign(Object.assign({}, listPartialExercicePrestationExpress[1]), { startDate: dayjs().startOf('month').toDate() });
339
+ const payments = (0, payment_1.calculatePaymentsAuto)({
340
+ goToClient: dayjs().toDate(),
341
+ firstExerciceNonExpresssEndDate,
342
+ idPrestation,
343
+ prestationList,
344
+ idVat,
345
+ listPartialExercicePrestationExpress: listPartialExercicePrestationExpressCloned,
346
+ listRegulations,
347
+ yearlyAmountNonExpress
348
+ });
349
+ expect(payments.length).toBeGreaterThanOrEqual(4);
350
+ expect(dayjs(payments[payments.length - 1].datePayment).diff(dayjs((_j = payments === null || payments === void 0 ? void 0 : payments[0]) === null || _j === void 0 ? void 0 : _j.datePayment), 'month')).toBeGreaterThan(0);
351
+ }));
352
+ test('if regulations are bigger than sum exercice prestation amounts, should pass some exercice payments', () => __awaiter(void 0, void 0, void 0, function* () {
353
+ const mockedDate = dayjs('2024-03-15').toDate();
354
+ mockdate_1.default.set(mockedDate);
355
+ const payments = (0, payment_1.calculatePaymentsAuto)({
356
+ goToClient: dayjs().toDate(),
357
+ firstExerciceNonExpresssEndDate,
358
+ idPrestation,
359
+ prestationList,
360
+ idVat,
361
+ listPartialExercicePrestationExpress,
362
+ listRegulations: [{
363
+ amount: 2000,
364
+ amountUsed: 0,
365
+ date: new Date(),
366
+ processed: true,
367
+ idPaymentMethod: types_1.PaymentMethod.BANK_CARD.id,
368
+ idSociety,
369
+ }],
370
+ yearlyAmountNonExpress
371
+ });
372
+ expect(payments.length).toBeGreaterThanOrEqual(2);
373
+ expect(payments[0]).toMatchObject({
374
+ amount: 550,
375
+ datePayment: dayjs(mockedDate).add(1, 'month').startOf('month').toDate(),
376
+ idPrestation: 1,
377
+ idPaymentMethod: 1,
378
+ });
379
+ expect(payments[1]).toMatchObject({
380
+ amount: 550,
381
+ datePayment: dayjs(mockedDate).add(2, 'month').startOf('month').toDate(),
382
+ idPrestation: 1,
383
+ idPaymentMethod: 1,
384
+ });
385
+ mockdate_1.default.reset();
386
+ }));
387
+ test('should not consider actual month if signed in last 3 days of month', () => __awaiter(void 0, void 0, void 0, function* () {
388
+ var _k;
389
+ const mockedDate = dayjs('2024-03-29').toDate();
390
+ mockdate_1.default.set(mockedDate);
391
+ const payments = (0, payment_1.calculatePaymentsAuto)({
392
+ goToClient: dayjs().toDate(),
393
+ firstExerciceNonExpresssEndDate,
394
+ idPrestation,
395
+ prestationList,
396
+ idVat,
397
+ listPartialExercicePrestationExpress,
398
+ listRegulations,
399
+ yearlyAmountNonExpress
400
+ });
401
+ expect(payments.length).toBeGreaterThanOrEqual(4);
402
+ expect((_k = payments === null || payments === void 0 ? void 0 : payments[0]) === null || _k === void 0 ? void 0 : _k.datePayment).toStrictEqual(dayjs(mockedDate).add(2, 'month').startOf('month').toDate());
403
+ mockdate_1.default.reset();
404
+ }));
405
+ test('last payment returned should be last of a year (12/XX)', () => __awaiter(void 0, void 0, void 0, function* () {
406
+ const mockedDate = dayjs('2024-03-29').toDate();
407
+ mockdate_1.default.set(mockedDate);
408
+ const payments = (0, payment_1.calculatePaymentsAuto)({
409
+ goToClient: dayjs().toDate(),
410
+ firstExerciceNonExpresssEndDate,
411
+ idPrestation,
412
+ prestationList,
413
+ idVat,
414
+ listPartialExercicePrestationExpress,
415
+ listRegulations,
416
+ yearlyAmountNonExpress
417
+ });
418
+ expect(payments.length).toBeGreaterThanOrEqual(4);
419
+ expect(dayjs(payments[payments.length - 1].datePayment).month()).toStrictEqual(11);
420
+ }));
421
+ test('first payment and last payment should have at least one year difference (ex. : 23 - 24)', () => __awaiter(void 0, void 0, void 0, function* () {
422
+ var _l, _m, _o;
423
+ const payments = (0, payment_1.calculatePaymentsAuto)({
424
+ goToClient: dayjs().toDate(),
425
+ firstExerciceNonExpresssEndDate,
426
+ idPrestation,
427
+ prestationList,
428
+ idVat,
429
+ listPartialExercicePrestationExpress: [],
430
+ listRegulations,
431
+ yearlyAmountNonExpress
432
+ });
433
+ expect(dayjs((_m = (_l = payments.slice(-1)) === null || _l === void 0 ? void 0 : _l[0]) === null || _m === void 0 ? void 0 : _m.datePayment).diff(dayjs((_o = payments === null || payments === void 0 ? void 0 : payments[0]) === null || _o === void 0 ? void 0 : _o.datePayment), 'year', true)).toBeGreaterThan(1);
434
+ }));
435
+ test('real case : idSociety 114440', () => __awaiter(void 0, void 0, void 0, function* () {
436
+ var _p, _q, _r;
437
+ const payments = (0, payment_1.calculatePaymentsAuto)({
438
+ goToClient: dayjs().toDate(),
439
+ firstExerciceNonExpresssEndDate: dayjs('2024-12-31').toDate(),
440
+ idPrestation,
441
+ prestationList,
442
+ idVat: types_1.Vat.TX_20.id,
443
+ listPartialExercicePrestationExpress: [],
444
+ listRegulations: [{
445
+ amount: 1006.8,
446
+ amountUsed: 0,
447
+ date: dayjs('2024-06-06').toDate(),
448
+ processed: false,
449
+ idPaymentMethod: types_1.PaymentMethod.BANK_CARD.id,
450
+ idSociety,
451
+ }],
452
+ yearlyAmountNonExpress: 1433
453
+ });
454
+ expect(dayjs((_q = (_p = payments.slice(-1)) === null || _p === void 0 ? void 0 : _p[0]) === null || _q === void 0 ? void 0 : _q.datePayment).diff(dayjs((_r = payments === null || payments === void 0 ? void 0 : payments[0]) === null || _r === void 0 ? void 0 : _r.datePayment), 'year', true)).toBeGreaterThan(1);
455
+ }));
456
+ });
457
+ });
458
+ //# sourceMappingURL=payment.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.spec.js","sourceRoot":"","sources":["../../../../ts/utils/tests/payment.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import * as dayjs from 'dayjs';\nimport { IRegulation, Vat, PaymentMethod } from '../../types';\nimport MockDate from 'mockdate';\n\nimport { calculatePaymentsAuto } from '../payment';\nimport { PartialExercicePrestationExpress } from '../../types/Interface/api/payment/Util';\n\ndescribe('Payment', () => {\n describe('calculatePayments', () => {\n const idPrestation = 1;\n const idSociety = 1;\n const yearlyAmountNonExpress = 1800;\n const appCost = 14.9;\n\n const firstExerciceNonExpresssEndDate = dayjs().add(11, 'month').endOf('month').toDate(); \n const prestationList = {\n id: 34,\n name: 'Compta Pro',\n isComptable: true,\n isJuridique: false,\n isSocial: false,\n isAttestation: false,\n inAverageCart: true,\n isBack: false,\n minimumPrice: null,\n price: null,\n isCatalog: false,\n isPlannable: false,\n hidden: false,\n isComplementary: false,\n signaturePosition: '400,54,569,90',\n signaturePage: 7,\n };\n const idVat = Vat.TX_10.id;\n const vatRate = Object.values(Vat).find(v => v.id === idVat)?.value ?? 20;\n const listPartialExercicePrestationExpress:PartialExercicePrestationExpress[] = [\n {\n startDate: dayjs().subtract(2, 'year').startOf('month').toDate(), \n endDate: dayjs().subtract(13, 'month').endOf('month').toDate(), \n countExpressMonthlyPayment: 2,\n totalAmount: 1200,\n },\n {\n startDate: dayjs().subtract(1, 'year').startOf('month').toDate(), \n endDate: dayjs().subtract(1, 'month').endOf('month').toDate(), \n countExpressMonthlyPayment: 2,\n totalAmount: 1800,\n },\n ];\n const listRegulations:IRegulation[] = [{\n amount: 600,\n amountUsed: 0,\n date: new Date(),\n processed: true,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\n idSociety,\n }, {\n amount: 300,\n amountUsed: 0,\n date: new Date(),\n processed: true,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\n idSociety,\n }, {\n amount: 300,\n amountUsed: 300,\n date: new Date(),\n processed: true,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\n idSociety,\n }];\n\n // =====================\n // errors handling\n // =====================\n test('should return error if prestationList doesn\\'t correspond (!hidden, isCatalog, isComptable)', () => {\n expect.assertions(2);\n try {\n prestationList.hidden = true;\n calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList: {\n ...prestationList,\n isCatalog: true,\n },\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress });\n } catch (error) {\n expect(error).toBeInstanceOf(Error);\n // @ts-ignore\n expect(error.message).toStrictEqual('Ce type de prestation ne correspond pas aux conditions attendues.');\n }\n });\n test('should return error if listRegulations is empty', () => {\n expect.assertions(2);\n try {\n calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations: [],\n yearlyAmountNonExpress });\n } catch (error) {\n expect(error).toBeInstanceOf(Error);\n // @ts-ignore\n expect(error.message).toStrictEqual('List of regulations can not be empty');\n }\n });\n test('should listRegulations contain amount and amountUsed', () => {\n expect.assertions(2);\n try {\n calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations: [{ processed: true } as IRegulation],\n yearlyAmountNonExpress });\n } catch (error) {\n expect(error).toBeInstanceOf(Error);\n // @ts-ignore\n expect(error.message).toStrictEqual('Amount and amountUsed are missing for regulations');\n }\n });\n\n // =====================\n // logical\n // =====================\n // express\n test('if only one express, monthly payments of actual exo should be in parallel of express monthly payments, smoothed in number of remaining months (mini 3 months) (if not in 3 last month)', async () => {\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [listPartialExercicePrestationExpress[0]],\n listRegulations,\n yearlyAmountNonExpress });\n\n const firstExpressDatePayment = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) < 0)[0].datePayment;\n const firstNonExpressDatePayment = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) === 0)[0].datePayment;\n expect(dayjs(firstNonExpressDatePayment).diff(firstExpressDatePayment, 'month')).toStrictEqual(0);\n });\n test('if more than one express, monthly payments of actual exo should be in a row of express monthly payments and smoothed, smoothed in number of remaining months after express monthly payments (mini 3 months) (if in 3 last month of exercice)', async () => {\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress });\n\n const lastExpressDatePayment = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) < 0).splice(-1)?.[0]?.datePayment;\n const firstNonExpressDatePayment = payments.filter(p => dayjs(p.closingDate).diff(firstExerciceNonExpresssEndDate) === 0)?.[0]?.datePayment;\n expect(dayjs(firstNonExpressDatePayment).diff(lastExpressDatePayment, 'month')).toStrictEqual(1);\n });\n // non express\n test('should return a number of payments equal to nb of remaining months in exercice (if not in 3 last months)', async () => {\n const mockedDate = dayjs('2024-05-15').toDate();\n MockDate.set(mockedDate);\n \n const nbMonthDelay = 6;\n const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();\n\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress });\n\n // const listNonExpressPayments = payments.filter(p => p.closingDate === newFirstExerciceNonExpresssEndDate);\n const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);\n expect(listNonExpressPayments.length).toStrictEqual(nbMonthDelay);\n \n MockDate.reset();\n });\n test('should return a number of payments equal to 3 (if in 3 last month of exercice)', async () => {\n const nbMonthDelay = 1;\n const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();\n\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress });\n\n const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);\n expect(listNonExpressPayments.length).toStrictEqual(3);\n });\n test('should (yearlyAmountNonExpress - sum of listRegulations) / count of monthly payments be equal to monthly payment amount (if not in 3 last month)', async () => {\n const mockedDate = dayjs('2024-05-15').toDate();\n MockDate.set(mockedDate);\n \n const nbMonthDelay = 6;\n const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();\n const newListRegulations = [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation];\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: newListRegulations,\n yearlyAmountNonExpress });\n \n const diff = yearlyAmountNonExpress - newListRegulations.reduce((acc, r:IRegulation) => acc + r.amount - r.amountUsed, 0);\n const amount = Math.round(100 * diff / nbMonthDelay) / 100;\n\n expect(payments[0].amount).toStrictEqual(Math.round(100 * amount * ((100 + vatRate) / 100)) / 100);\n \n MockDate.reset();\n });\n test('should (totalAmount - firstPaymentAmount) / 3 be equal to monthly payment amount (if in 3 last month of exercice)', async () => {\n const nbMonthDelay = 1;\n const newFirstExerciceNonExpresssEndDate = dayjs().add(nbMonthDelay, 'month').endOf('month').toDate();\n const newListRegulations = [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation];\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: newListRegulations,\n yearlyAmountNonExpress });\n\n const diff = yearlyAmountNonExpress - newListRegulations.reduce((acc, r:IRegulation) => acc + r.amount - r.amountUsed, 0);\n const amount = Math.round(100 * diff / 3) / 100;\n\n expect(payments[0].amount).toStrictEqual(Math.round(100 * amount * ((100 + vatRate) / 100)) / 100);\n });\n // annual price increase\n test('should apply annual price increase (2,75%) if signed before last 3 months of civil year', async () => {\n const mockedDate = dayjs('2024-08-15').toDate();\n MockDate.set(mockedDate);\n\n const newFirstExerciceNonExpresssEndDate = dayjs().add(11, 'month').endOf('month').toDate();\n\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress });\n\n const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);\n expect(Math.round(100 * listNonExpressPayments[0].amount * 1.0275) / 100).toStrictEqual(listNonExpressPayments.splice(-2)[0].amount);\n\n MockDate.reset();\n });\n test('should not apply annual price increase (2,75%) if signed in last 3 months of civil year', async () => {\n const mockedDate = dayjs('2024-11-15').toDate();\n MockDate.set(mockedDate);\n \n const newFirstExerciceNonExpresssEndDate = dayjs().add(11, 'month').endOf('month').toDate();\n \n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress });\n \n const listNonExpressPayments = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-06-01')) === 0);\n expect(listNonExpressPayments[0].amount).toStrictEqual(listNonExpressPayments.splice(-2)[0].amount);\n \n MockDate.reset();\n });\n\n test('should apply 14,9€ HT increase for the second exercice created (only offered on first exo) (no rules for 3 last months)', async () => {\n const mockedDate = dayjs('2024-06-15').toDate();\n MockDate.set(mockedDate);\n \n const newFirstExerciceNonExpresssEndDate = dayjs().add(12, 'month').endOf('month').toDate();\n \n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 50,\n } as IRegulation],\n yearlyAmountNonExpress });\n \n const paymentsOfFirstExo = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-06-01')) === 0).splice(-1)[0].amount ?? 0;\n const paymentsOfSecondExo = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-07-01')) === 0).splice(-1)[0].amount ?? 0;\n expect(paymentsOfFirstExo + appCost * ((100 + vatRate) / 100)).toStrictEqual(paymentsOfSecondExo);\n \n MockDate.reset();\n });\n \n // misc\n test('should payments been generated sorted by exercices start date', async () => {\n const listPartialExercicePrestationExpressCloned = [...listPartialExercicePrestationExpress];\n listPartialExercicePrestationExpressCloned[0] = { \n ...listPartialExercicePrestationExpress[0],\n startDate: dayjs().add(1, 'year').startOf('month').toDate(), \n };\n listPartialExercicePrestationExpressCloned[1] = { \n ...listPartialExercicePrestationExpress[1],\n startDate: dayjs().startOf('month').toDate(), \n };\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: listPartialExercicePrestationExpressCloned,\n listRegulations,\n yearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(4);\n expect(dayjs(payments[payments.length - 1].datePayment).diff(dayjs(payments?.[0]?.datePayment), 'month')).toBeGreaterThan(0);\n });\n test('if regulations are bigger than sum exercice prestation amounts, should pass some exercice payments', async () => {\n const mockedDate = dayjs('2024-03-15').toDate();\n MockDate.set(mockedDate);\n\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations: [{\n amount: 2000,\n amountUsed: 0,\n date: new Date(),\n processed: true,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\n idSociety,\n }],\n yearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(2);\n expect(payments[0]).toMatchObject(\n {\n amount: 550,\n datePayment: dayjs(mockedDate).add(1, 'month').startOf('month').toDate(),\n idPrestation: 1,\n idPaymentMethod: 1,\n });\n expect(payments[1]).toMatchObject(\n {\n amount: 550,\n datePayment: dayjs(mockedDate).add(2, 'month').startOf('month').toDate(),\n idPrestation: 1,\n idPaymentMethod: 1,\n });\n MockDate.reset();\n });\n test('should not consider actual month if signed in last 3 days of month', async () => {\n const mockedDate = dayjs('2024-03-29').toDate();\n MockDate.set(mockedDate);\n\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(4);\n expect(payments?.[0]?.datePayment).toStrictEqual(dayjs(mockedDate).add(2, 'month').startOf('month').toDate());\n MockDate.reset();\n });\n test('last payment returned should be last of a year (12/XX)', async () => {\n const mockedDate = dayjs('2024-03-29').toDate();\n MockDate.set(mockedDate);\n\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(4);\n expect(dayjs(payments[payments.length - 1].datePayment).month()).toStrictEqual(11);\n });\n test('first payment and last payment should have at least one year difference (ex. : 23 - 24)', async () => {\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations,\n yearlyAmountNonExpress });\n expect(dayjs(payments.slice(-1)?.[0]?.datePayment).diff(dayjs(payments?.[0]?.datePayment), 'year', true)).toBeGreaterThan(1);\n });\n test('real case : idSociety 114440', async () => {\n const payments = calculatePaymentsAuto({ \n goToClient: dayjs().toDate(),\n firstExerciceNonExpresssEndDate: dayjs('2024-12-31').toDate(), \n idPrestation,\n prestationList,\n idVat: Vat.TX_20.id,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 1006.8,\n amountUsed: 0,\n date: dayjs('2024-06-06').toDate(), \n processed: false,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\n idSociety,\n }],\n yearlyAmountNonExpress: 1433 });\n expect(dayjs(payments.slice(-1)?.[0]?.datePayment).diff(dayjs(payments?.[0]?.datePayment), 'year', true)).toBeGreaterThan(1);\n });\n });\n});"]}
@@ -3,4 +3,6 @@ export declare function getAmountByAccountNumber(accountingEntries: IAccountingE
3
3
  export declare function setZeroIfIsNegative(value: number): number;
4
4
  export declare function getTaxAmountByAccountNumber(accountingEntries: IAccountingEntry[], accountsNumber: string[], precision?: number, logging?: boolean): number;
5
5
  export declare function textFormatting(value: any, length?: number | null): string | null;
6
+ export declare function getTaxesIncludedAmount(amountHt: number, idVat: number, isRounded?: boolean): number;
7
+ export declare function getTaxesExcludedAmount(amountTtc: number, idVat: number, isRounded?: boolean): number;
6
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../ts/utils/vat/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAGjF,wBAAgB,wBAAwB,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,EAAE,KAAK,UAAQ,GAAG,MAAM,CAc9I;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,2BAA2B,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,EAAE,OAAO,UAAQ,GAAG,MAAM,CAmBnJ;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,GAAG,IAAI,CAetF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../ts/utils/vat/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAGjF,wBAAgB,wBAAwB,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,EAAE,KAAK,UAAQ,GAAG,MAAM,CAc9I;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,2BAA2B,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,EAAE,OAAO,UAAQ,GAAG,MAAM,CAmBnJ;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,GAAG,IAAI,CAetF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,UAAO,UAMvF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,UAAO,UAMxF"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.textFormatting = exports.getTaxAmountByAccountNumber = exports.setZeroIfIsNegative = exports.getAmountByAccountNumber = void 0;
3
+ exports.getTaxesExcludedAmount = exports.getTaxesIncludedAmount = exports.textFormatting = exports.getTaxAmountByAccountNumber = exports.setZeroIfIsNegative = exports.getAmountByAccountNumber = void 0;
4
4
  const lodash_1 = require("lodash");
5
5
  const Vat_1 = require("../../types/Enum/Vat");
6
6
  function getAmountByAccountNumber(accountingEntries, accountsNumber, precision = 0, isAbs = false) {
@@ -63,4 +63,22 @@ function textFormatting(value, length = null) {
63
63
  return null;
64
64
  }
65
65
  exports.textFormatting = textFormatting;
66
+ function getTaxesIncludedAmount(amountHt, idVat, isRounded = true) {
67
+ var _a, _b, _c;
68
+ const vatRate = (_b = (_a = Object.values(Vat_1.Vat).find(v => v.id === idVat)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 20;
69
+ const amountNotRounded = amountHt * ((100 + vatRate) / 100);
70
+ if (!isRounded)
71
+ return amountNotRounded;
72
+ return (_c = Math.round(amountNotRounded * 100) / 100) !== null && _c !== void 0 ? _c : 0;
73
+ }
74
+ exports.getTaxesIncludedAmount = getTaxesIncludedAmount;
75
+ function getTaxesExcludedAmount(amountTtc, idVat, isRounded = true) {
76
+ var _a, _b, _c;
77
+ const vatRate = (_b = (_a = Object.values(Vat_1.Vat).find(v => v.id === idVat)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 20;
78
+ const amountNotRounded = amountTtc / ((100 + vatRate) / 100);
79
+ if (!isRounded)
80
+ return amountNotRounded;
81
+ return (_c = Math.round(amountNotRounded * 100) / 100) !== null && _c !== void 0 ? _c : 0;
82
+ }
83
+ exports.getTaxesExcludedAmount = getTaxesExcludedAmount;
66
84
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../ts/utils/vat/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { round as _round, uniqBy as _uniqBy } from 'lodash';\nimport { IAccountingEntry } from '../../types/Interface/models/IAccountingEntry';\nimport { Vat } from '../../types/Enum/Vat';\n\nexport function getAmountByAccountNumber(accountingEntries: IAccountingEntry[], accountsNumber: string[], precision = 0, isAbs = false): number {\n const accountingEntriesUniq = _uniqBy(accountingEntries, 'id');\n const result = _round(accountingEntriesUniq.reduce((acc, accountingEntry) => {\n let accTmp = acc;\n accountsNumber.some((number) => {\n if (accountingEntry.account && accountingEntry.account.number && accountingEntry.account.number.toString().startsWith(number)) {\n accTmp += accountingEntry.debit - accountingEntry.credit;\n return true;\n }\n return false;\n });\n return accTmp;\n }, 0), precision);\n return isAbs ? Math.abs(result) : result;\n}\n\nexport function setZeroIfIsNegative(value: number): number {\n return value < 0 ? 0 : value;\n}\n\nexport function getTaxAmountByAccountNumber(accountingEntries: IAccountingEntry[], accountsNumber: string[], precision = 0, logging = false): number {\n const accountingEntriesUniq = _uniqBy(accountingEntries, 'id');\n return _round(accountingEntriesUniq.reduce((acc, accountingEntry) => {\n let accTmp = acc;\n accountsNumber.some((number) => {\n if (accountingEntry.account && accountingEntry.account.number && accountingEntry.account.number.toString().startsWith(number)) {\n\n // eslint-disable-next-line no-console\n if (logging) console.log('\\'\\'');\n // eslint-disable-next-line no-console\n if (logging) console.log(accountingEntry);\n\n accTmp += ((accountingEntry.debit - accountingEntry.credit) * (((Object.values(Vat).find((v) => v.id === accountingEntry.idVat)?.value ?? 0) / 100)));\n return true;\n }\n return false;\n });\n return accTmp;\n }, precision));\n}\n\nexport function textFormatting(value: any, length: number | null = null): string | null {\n if (value && typeof value === 'string') {\n let formattedValue = value.replace(/[\\u2018\\u2019]/g, '\\''); // Suppression des \"Curly Quotes\"\n formattedValue = formattedValue.replace(/&/g, ''); // Suppression des &\n formattedValue = formattedValue.replace(/!/g, ''); // Suppression des !\n formattedValue = formattedValue.replace(/[\\t]/g, ''); // Suppression des tabulations\n formattedValue = formattedValue.replace(/`/g, '\\''); // Suppression des `\n formattedValue = formattedValue.replace(/\"/g, ''); // Suppression des \"\n formattedValue = formattedValue.replace(/^ */, ''); // Suppression des espaces de début\n formattedValue = formattedValue.replace(/ *$/, ''); // Suppression des espaces de fin\n formattedValue = formattedValue.replace(/€/g, 'EUR');\n if (length) formattedValue = formattedValue.slice(0, length);\n return formattedValue;\n }\n return null;\n}"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../ts/utils/vat/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { round as _round, uniqBy as _uniqBy } from 'lodash';\nimport { IAccountingEntry } from '../../types/Interface/models/IAccountingEntry';\nimport { Vat } from '../../types/Enum/Vat';\n\nexport function getAmountByAccountNumber(accountingEntries: IAccountingEntry[], accountsNumber: string[], precision = 0, isAbs = false): number {\n const accountingEntriesUniq = _uniqBy(accountingEntries, 'id');\n const result = _round(accountingEntriesUniq.reduce((acc, accountingEntry) => {\n let accTmp = acc;\n accountsNumber.some((number) => {\n if (accountingEntry.account && accountingEntry.account.number && accountingEntry.account.number.toString().startsWith(number)) {\n accTmp += accountingEntry.debit - accountingEntry.credit;\n return true;\n }\n return false;\n });\n return accTmp;\n }, 0), precision);\n return isAbs ? Math.abs(result) : result;\n}\n\nexport function setZeroIfIsNegative(value: number): number {\n return value < 0 ? 0 : value;\n}\n\nexport function getTaxAmountByAccountNumber(accountingEntries: IAccountingEntry[], accountsNumber: string[], precision = 0, logging = false): number {\n const accountingEntriesUniq = _uniqBy(accountingEntries, 'id');\n return _round(accountingEntriesUniq.reduce((acc, accountingEntry) => {\n let accTmp = acc;\n accountsNumber.some((number) => {\n if (accountingEntry.account && accountingEntry.account.number && accountingEntry.account.number.toString().startsWith(number)) {\n\n // eslint-disable-next-line no-console\n if (logging) console.log('\\'\\'');\n // eslint-disable-next-line no-console\n if (logging) console.log(accountingEntry);\n\n accTmp += ((accountingEntry.debit - accountingEntry.credit) * (((Object.values(Vat).find((v) => v.id === accountingEntry.idVat)?.value ?? 0) / 100)));\n return true;\n }\n return false;\n });\n return accTmp;\n }, precision));\n}\n\nexport function textFormatting(value: any, length: number | null = null): string | null {\n if (value && typeof value === 'string') {\n let formattedValue = value.replace(/[\\u2018\\u2019]/g, '\\''); // Suppression des \"Curly Quotes\"\n formattedValue = formattedValue.replace(/&/g, ''); // Suppression des &\n formattedValue = formattedValue.replace(/!/g, ''); // Suppression des !\n formattedValue = formattedValue.replace(/[\\t]/g, ''); // Suppression des tabulations\n formattedValue = formattedValue.replace(/`/g, '\\''); // Suppression des `\n formattedValue = formattedValue.replace(/\"/g, ''); // Suppression des \"\n formattedValue = formattedValue.replace(/^ */, ''); // Suppression des espaces de début\n formattedValue = formattedValue.replace(/ *$/, ''); // Suppression des espaces de fin\n formattedValue = formattedValue.replace(/€/g, 'EUR');\n if (length) formattedValue = formattedValue.slice(0, length);\n return formattedValue;\n }\n return null;\n}\n\nexport function getTaxesIncludedAmount(amountHt: number, idVat: number, isRounded = true) {\n const vatRate = Object.values(Vat).find(v => v.id === idVat)?.value ?? 20;\n const amountNotRounded = amountHt * ((100 + vatRate) / 100);\n \n if (!isRounded) return amountNotRounded;\n return Math.round(amountNotRounded * 100) / 100 ?? 0;\n}\n\nexport function getTaxesExcludedAmount(amountTtc: number, idVat: number, isRounded = true) {\n const vatRate = Object.values(Vat).find(v => v.id === idVat)?.value ?? 20;\n const amountNotRounded = amountTtc / ((100 + vatRate) / 100);\n \n if (!isRounded) return amountNotRounded;\n return Math.round(amountNotRounded * 100) / 100 ?? 0;\n}"]}
@@ -1,7 +1,8 @@
1
- import { ProcessedClosing } from '../../types';
1
+ import { IExercice, ProcessedClosing } from '../../types';
2
2
  import { Resource } from '../Resource';
3
3
  export declare class Closing extends Resource {
4
4
  process(idExercice: number): Promise<ProcessedClosing>;
5
+ unprocess(idExercice: number): Promise<IExercice>;
5
6
  getDeadline(idExercice: number): Promise<string>;
6
7
  }
7
8
  //# sourceMappingURL=Closing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Closing.d.ts","sourceRoot":"","sources":["../../../../ts/api/resources/Closing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,OAAQ,SAAQ,QAAQ;IACnC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAGtD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGjD"}
1
+ {"version":3,"file":"Closing.d.ts","sourceRoot":"","sources":["../../../../ts/api/resources/Closing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,OAAQ,SAAQ,QAAQ;IACnC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAItD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIjD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGjD"}