@silexpert/core 1.1.388 → 1.1.390

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 (141) hide show
  1. package/dist/cjs/api/resources/Mail.d.ts +1 -1
  2. package/dist/cjs/api/resources/Mail.d.ts.map +1 -1
  3. package/dist/cjs/api/resources/Mail.js +2 -2
  4. package/dist/cjs/api/resources/Mail.js.map +1 -1
  5. package/dist/cjs/api/resources/Vat.d.ts +1 -3
  6. package/dist/cjs/api/resources/Vat.d.ts.map +1 -1
  7. package/dist/cjs/api/resources/Vat.js +0 -9
  8. package/dist/cjs/api/resources/Vat.js.map +1 -1
  9. package/dist/cjs/types/Enum/Log.d.ts +14 -1
  10. package/dist/cjs/types/Enum/Log.d.ts.map +1 -1
  11. package/dist/cjs/types/Enum/Log.js +13 -0
  12. package/dist/cjs/types/Enum/Log.js.map +1 -1
  13. package/dist/cjs/types/Enum/Template.d.ts +13 -0
  14. package/dist/cjs/types/Enum/Template.d.ts.map +1 -0
  15. package/dist/cjs/types/Enum/Template.js +17 -0
  16. package/dist/cjs/types/Enum/Template.js.map +1 -0
  17. package/dist/cjs/types/Enum/TypeSupportForNotation.js +2 -2
  18. package/dist/cjs/types/Enum/TypeSupportForNotation.js.map +1 -1
  19. package/dist/cjs/types/Enum/VatDeclarationType.d.ts.map +1 -1
  20. package/dist/cjs/types/Enum/VatDeclarationType.js +67 -1
  21. package/dist/cjs/types/Enum/VatDeclarationType.js.map +1 -1
  22. package/dist/cjs/types/Interface/api/commercialManagement/Create.d.ts +11 -0
  23. package/dist/cjs/types/Interface/api/commercialManagement/Create.d.ts.map +1 -1
  24. package/dist/cjs/types/Interface/api/commercialManagement/Create.js +66 -0
  25. package/dist/cjs/types/Interface/api/commercialManagement/Create.js.map +1 -1
  26. package/dist/cjs/types/Interface/api/exercice/Create.d.ts +1 -0
  27. package/dist/cjs/types/Interface/api/exercice/Create.d.ts.map +1 -1
  28. package/dist/cjs/types/Interface/api/exercice/Create.js +6 -0
  29. package/dist/cjs/types/Interface/api/exercice/Create.js.map +1 -1
  30. package/dist/cjs/types/Interface/api/payment/Util.d.ts +0 -1
  31. package/dist/cjs/types/Interface/api/payment/Util.d.ts.map +1 -1
  32. package/dist/cjs/types/Interface/api/payment/Util.js.map +1 -1
  33. package/dist/cjs/types/Interface/api/terminationList/QueryPaginateTerminationList.d.ts +1 -0
  34. package/dist/cjs/types/Interface/api/terminationList/QueryPaginateTerminationList.d.ts.map +1 -1
  35. package/dist/cjs/types/Interface/api/terminationList/QueryPaginateTerminationList.js +6 -0
  36. package/dist/cjs/types/Interface/api/terminationList/QueryPaginateTerminationList.js.map +1 -1
  37. package/dist/cjs/types/Interface/api/terminationList/TerminationList.d.ts +7 -0
  38. package/dist/cjs/types/Interface/api/terminationList/TerminationList.d.ts.map +1 -0
  39. package/dist/cjs/types/Interface/api/terminationList/TerminationList.js +42 -0
  40. package/dist/cjs/types/Interface/api/terminationList/TerminationList.js.map +1 -0
  41. package/dist/cjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.d.ts +0 -3
  42. package/dist/cjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.d.ts.map +1 -1
  43. package/dist/cjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.js +1 -9
  44. package/dist/cjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.js.map +1 -1
  45. package/dist/cjs/types/Interface/models/ISocietyGescom.d.ts +11 -0
  46. package/dist/cjs/types/Interface/models/ISocietyGescom.d.ts.map +1 -1
  47. package/dist/cjs/types/Interface/models/ISocietyGescom.js.map +1 -1
  48. package/dist/cjs/types/index.d.ts +1 -0
  49. package/dist/cjs/types/index.d.ts.map +1 -1
  50. package/dist/cjs/types/index.js +1 -0
  51. package/dist/cjs/types/index.js.map +1 -1
  52. package/dist/cjs/utils/commercialManagement/templates/common.d.ts.map +1 -1
  53. package/dist/cjs/utils/commercialManagement/templates/common.js +18 -1
  54. package/dist/cjs/utils/commercialManagement/templates/common.js.map +1 -1
  55. package/dist/cjs/utils/payment.d.ts.map +1 -1
  56. package/dist/cjs/utils/payment.js +13 -8
  57. package/dist/cjs/utils/payment.js.map +1 -1
  58. package/dist/cjs/utils/prestation.js +1 -1
  59. package/dist/cjs/utils/prestation.js.map +1 -1
  60. package/dist/cjs/utils/tests/payment.spec.js +0 -16
  61. package/dist/cjs/utils/tests/payment.spec.js.map +1 -1
  62. package/dist/mjs/api/resources/Mail.d.ts +1 -1
  63. package/dist/mjs/api/resources/Mail.d.ts.map +1 -1
  64. package/dist/mjs/api/resources/Mail.js +5 -2
  65. package/dist/mjs/api/resources/Mail.js.map +1 -1
  66. package/dist/mjs/api/resources/Vat.d.ts +1 -3
  67. package/dist/mjs/api/resources/Vat.d.ts.map +1 -1
  68. package/dist/mjs/api/resources/Vat.js +0 -9
  69. package/dist/mjs/api/resources/Vat.js.map +1 -1
  70. package/dist/mjs/types/Enum/Log.d.ts +14 -1
  71. package/dist/mjs/types/Enum/Log.d.ts.map +1 -1
  72. package/dist/mjs/types/Enum/Log.js +13 -0
  73. package/dist/mjs/types/Enum/Log.js.map +1 -1
  74. package/dist/mjs/types/Enum/Template.d.ts +13 -0
  75. package/dist/mjs/types/Enum/Template.d.ts.map +1 -0
  76. package/dist/mjs/types/Enum/Template.js +14 -0
  77. package/dist/mjs/types/Enum/Template.js.map +1 -0
  78. package/dist/mjs/types/Enum/TypeSupportForNotation.js +2 -2
  79. package/dist/mjs/types/Enum/TypeSupportForNotation.js.map +1 -1
  80. package/dist/mjs/types/Enum/VatDeclarationType.d.ts.map +1 -1
  81. package/dist/mjs/types/Enum/VatDeclarationType.js +67 -1
  82. package/dist/mjs/types/Enum/VatDeclarationType.js.map +1 -1
  83. package/dist/mjs/types/Interface/api/commercialManagement/Create.d.ts +11 -0
  84. package/dist/mjs/types/Interface/api/commercialManagement/Create.d.ts.map +1 -1
  85. package/dist/mjs/types/Interface/api/commercialManagement/Create.js +77 -0
  86. package/dist/mjs/types/Interface/api/commercialManagement/Create.js.map +1 -1
  87. package/dist/mjs/types/Interface/api/exercice/Create.d.ts +1 -0
  88. package/dist/mjs/types/Interface/api/exercice/Create.d.ts.map +1 -1
  89. package/dist/mjs/types/Interface/api/exercice/Create.js +7 -0
  90. package/dist/mjs/types/Interface/api/exercice/Create.js.map +1 -1
  91. package/dist/mjs/types/Interface/api/payment/Util.d.ts +0 -1
  92. package/dist/mjs/types/Interface/api/payment/Util.d.ts.map +1 -1
  93. package/dist/mjs/types/Interface/api/payment/Util.js.map +1 -1
  94. package/dist/mjs/types/Interface/api/terminationList/QueryPaginateTerminationList.d.ts +1 -0
  95. package/dist/mjs/types/Interface/api/terminationList/QueryPaginateTerminationList.d.ts.map +1 -1
  96. package/dist/mjs/types/Interface/api/terminationList/QueryPaginateTerminationList.js +7 -0
  97. package/dist/mjs/types/Interface/api/terminationList/QueryPaginateTerminationList.js.map +1 -1
  98. package/dist/mjs/types/Interface/api/terminationList/TerminationList.d.ts +7 -0
  99. package/dist/mjs/types/Interface/api/terminationList/TerminationList.d.ts.map +1 -0
  100. package/dist/mjs/types/Interface/api/terminationList/TerminationList.js +42 -0
  101. package/dist/mjs/types/Interface/api/terminationList/TerminationList.js.map +1 -0
  102. package/dist/mjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.d.ts +0 -3
  103. package/dist/mjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.d.ts.map +1 -1
  104. package/dist/mjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.js +0 -8
  105. package/dist/mjs/types/Interface/api/vatDeclaration/QueryVatDeclaration.js.map +1 -1
  106. package/dist/mjs/types/Interface/models/ISocietyGescom.d.ts +11 -0
  107. package/dist/mjs/types/Interface/models/ISocietyGescom.d.ts.map +1 -1
  108. package/dist/mjs/types/Interface/models/ISocietyGescom.js.map +1 -1
  109. package/dist/mjs/types/index.d.ts +1 -0
  110. package/dist/mjs/types/index.d.ts.map +1 -1
  111. package/dist/mjs/types/index.js +1 -0
  112. package/dist/mjs/types/index.js.map +1 -1
  113. package/dist/mjs/utils/commercialManagement/templates/common.d.ts.map +1 -1
  114. package/dist/mjs/utils/commercialManagement/templates/common.js +18 -1
  115. package/dist/mjs/utils/commercialManagement/templates/common.js.map +1 -1
  116. package/dist/mjs/utils/payment.d.ts.map +1 -1
  117. package/dist/mjs/utils/payment.js +13 -8
  118. package/dist/mjs/utils/payment.js.map +1 -1
  119. package/dist/mjs/utils/prestation.js +1 -1
  120. package/dist/mjs/utils/prestation.js.map +1 -1
  121. package/dist/mjs/utils/tests/payment.spec.js +0 -16
  122. package/dist/mjs/utils/tests/payment.spec.js.map +1 -1
  123. package/package.json +1 -1
  124. package/ts/api/resources/Mail.ts +5 -2
  125. package/ts/api/resources/Vat.ts +1 -12
  126. package/ts/types/Enum/Log.ts +13 -0
  127. package/ts/types/Enum/Template.ts +12 -0
  128. package/ts/types/Enum/TypeSupportForNotation.ts +2 -2
  129. package/ts/types/Enum/VatDeclarationType.ts +67 -1
  130. package/ts/types/Interface/api/commercialManagement/Create.ts +57 -0
  131. package/ts/types/Interface/api/exercice/Create.ts +5 -0
  132. package/ts/types/Interface/api/payment/Util.ts +0 -1
  133. package/ts/types/Interface/api/terminationList/QueryPaginateTerminationList.ts +5 -0
  134. package/ts/types/Interface/api/terminationList/TerminationList.ts +28 -0
  135. package/ts/types/Interface/api/vatDeclaration/QueryVatDeclaration.ts +0 -6
  136. package/ts/types/Interface/models/ISocietyGescom.ts +11 -0
  137. package/ts/types/index.ts +1 -0
  138. package/ts/utils/commercialManagement/templates/common.ts +18 -1
  139. package/ts/utils/payment.ts +13 -9
  140. package/ts/utils/prestation.ts +1 -1
  141. package/ts/utils/tests/payment.spec.ts +0 -16
@@ -1 +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, LegalFormTypeEnum, getTaxesIncludedAmount } 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 nextYearlyAmountNonExpress = 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 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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList: {\n ...prestationList,\n isCatalog: true,\n },\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [listPartialExercicePrestationExpress[0]],\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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(1 + nbMonthDelay); //On ajoute 1 pour les frais de dossier\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);\n expect(listNonExpressPayments.length).toStrictEqual(1 + 3); //On ajoute 1 pour les frais de dossier\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: newListRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n \n const diff = getTaxesIncludedAmount(yearlyAmountNonExpress, idVat) - newListRegulations.reduce((acc, r:IRegulation) => acc + r.amount - r.amountUsed, 0);\n const amount = Math.round(100 * diff / nbMonthDelay) / 100;\n\n expect(payments[1].amount).toStrictEqual(amount);\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: newListRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const diff = getTaxesIncludedAmount(yearlyAmountNonExpress, idVat) - newListRegulations.reduce((acc, r:IRegulation) => acc + r.amount - r.amountUsed, 0);\n const amount = Math.round(100 * diff / 3) / 100;\n\n expect(payments[1].amount).toStrictEqual(amount);\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);\n const firstPaymentWithTaxRateForced = listNonExpressPayments[1].amount * 1.0275;\n expect(firstPaymentWithTaxRateForced - listNonExpressPayments.splice(-2)[0].amount).toBeLessThanOrEqual(0.01); //Permet de gérer le pb d'arrondi\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 50,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const paymentsOfFirstExo = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-06-01')) === 0)[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(Math.round(100 * (paymentsOfFirstExo + getTaxesIncludedAmount(appCost, idVat) * 1.0275)) / 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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: listPartialExercicePrestationExpressCloned,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\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 nextYearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(2);\n expect(payments[0]).toMatchObject(\n {\n amount: 1320, // 1200 * 1,1\n idPrestation: 1,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\n });\n expect(payments[1]).toMatchObject(\n {\n amount: 680, // 2000 - (1200 * 1,1)\n idPrestation: 1,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(4);\n expect(payments?.[1]?.datePayment).toStrictEqual(dayjs().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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n goToClient: dayjs('2024-06-06').toDate(),\n firstExerciceNonExpresssEndDate: dayjs('2024-12-31').toDate(), \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\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, nextYearlyAmountNonExpress: 1433 });\n expect(dayjs(payments.slice(-1)?.[0]?.datePayment).diff(dayjs(payments?.[0]?.datePayment), 'year', true)).toBeGreaterThan(1);\n });\n });\n});"]}
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, LegalFormTypeEnum, getTaxesIncludedAmount } 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 nextYearlyAmountNonExpress = 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 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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList: {\n ...prestationList,\n isCatalog: true,\n },\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [listPartialExercicePrestationExpress[0]],\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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(1 + nbMonthDelay); //On ajoute 1 pour les frais de dossier\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);\n expect(listNonExpressPayments.length).toStrictEqual(1 + 3); //On ajoute 1 pour les frais de dossier\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: newListRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n \n const diff = getTaxesIncludedAmount(yearlyAmountNonExpress, idVat) - newListRegulations.reduce((acc, r:IRegulation) => acc + r.amount - r.amountUsed, 0);\n const amount = Math.round(100 * diff / nbMonthDelay) / 100;\n\n expect(payments[1].amount).toStrictEqual(amount);\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: newListRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const diff = getTaxesIncludedAmount(yearlyAmountNonExpress, idVat) - newListRegulations.reduce((acc, r:IRegulation) => acc + r.amount - r.amountUsed, 0);\n const amount = Math.round(100 * diff / 3) / 100;\n\n expect(payments[1].amount).toStrictEqual(amount);\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const listNonExpressPayments = payments.filter(p => dayjs(p.closingDate).diff(newFirstExerciceNonExpresssEndDate) === 0);\n const firstPaymentWithTaxRateForced = listNonExpressPayments[1].amount * 1.0275;\n expect(firstPaymentWithTaxRateForced - listNonExpressPayments.splice(-2)[0].amount).toBeLessThanOrEqual(0.01); //Permet de gérer le pb d'arrondi\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 0,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: newFirstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations: [{\n amount: 50,\n amountUsed: 50,\n } as IRegulation],\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n\n const paymentsOfFirstExo = payments.filter(p => dayjs(p.datePayment).diff(dayjs('2025-06-01')) === 0)[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(Math.round(100 * (paymentsOfFirstExo + getTaxesIncludedAmount(appCost, idVat) * 1.0275)) / 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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: listPartialExercicePrestationExpressCloned,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\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 nextYearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(2);\n expect(payments[0]).toMatchObject(\n {\n amount: 1320, // 1200 * 1,1\n idPrestation: 1,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\n });\n expect(payments[1]).toMatchObject(\n {\n amount: 680, // 2000 - (1200 * 1,1)\n idPrestation: 1,\n idPaymentMethod: PaymentMethod.BANK_CARD.id,\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: false,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\n expect(payments.length).toBeGreaterThanOrEqual(4);\n expect(payments?.[1]?.datePayment).toStrictEqual(dayjs().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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress,\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate, \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\n prestationList,\n idVat,\n listPartialExercicePrestationExpress: [],\n listRegulations,\n yearlyAmountNonExpress,\n nextYearlyAmountNonExpress });\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 idTypeBrand: 1,\n firstExerciceNonExpresssEndDate: dayjs('2024-12-31').toDate(), \n idPrestation,\n isWithApplicationFees: true,\n idLegalForm: LegalFormTypeEnum.SARL,\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, nextYearlyAmountNonExpress: 1433 });\n expect(dayjs(payments.slice(-1)?.[0]?.datePayment).diff(dayjs(payments?.[0]?.datePayment), 'year', true)).toBeGreaterThan(1);\n });\n });\n});"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silexpert/core",
3
- "version": "1.1.388",
3
+ "version": "1.1.390",
4
4
  "description": "Silex Core perform HTTP Request and object binding. Silex core helps developers to retrieve and return formatted object",
5
5
  "homepage": "https://gitlab.compta-clementine.fr/dev/silex-api",
6
6
  "main": "dist/cjs/index.js",
@@ -244,8 +244,11 @@ export class Mail extends Resource {
244
244
  return this.axios.$post('/mails/migrate-users-mail-addresses', { limit, idUser });
245
245
  }
246
246
 
247
- getUserSignature(idUser: number, params: QueryGetSignature): Promise<string> {
248
- return this.axios.$get(`/mails/${idUser}/signature`, { params });
247
+ getUserSignature(idUser: number, params: QueryGetSignature, signal?: AbortSignal): Promise<string> {
248
+ return this.axios.$get(`/mails/${idUser}/signature`, {
249
+ params,
250
+ ...(signal ? { signal } : {}),
251
+ });
249
252
  }
250
253
 
251
254
  export(body: ExportEmailsParams): Promise<Blob> {
@@ -1,5 +1,5 @@
1
1
  import {
2
- BasePaginate, CreateRegistrationDetail, DeclareVatRegistration, IAccountingTransaction, ICustomerVat, QueryCerfa, QueryPaginatedRegistration, QueryPreviousVatDeclaration, QueryVatEntry, QueryVatMigrationEntry, ReadFormattedAccountingTransaction, ReadRegistration, ReadVatDeclarationUpdatedEntry, ReadVatEntry, ReadVatVariousOperations, UpdateOrCreateVatAdvance, UpdateOrCreateVatRegistration,
2
+ BasePaginate, CreateRegistrationDetail, DeclareVatRegistration, IAccountingTransaction, ICustomerVat, QueryPaginatedRegistration, QueryPreviousVatDeclaration, QueryVatEntry, QueryVatMigrationEntry, ReadFormattedAccountingTransaction, ReadRegistration, ReadVatDeclarationUpdatedEntry, ReadVatEntry, ReadVatVariousOperations, UpdateOrCreateVatAdvance, UpdateOrCreateVatRegistration,
3
3
  } from '../..';
4
4
  import { Resource } from '../Resource';
5
5
 
@@ -69,15 +69,4 @@ export class Vat extends Resource {
69
69
  getAllAdvances(idExercice: number): Promise<ICustomerVat[]> {
70
70
  return this.axios.$get(`/exercices/${idExercice}/vat/advances`);
71
71
  }
72
-
73
- getCerfaFile(query: QueryCerfa): Promise<Buffer> {
74
- return this.axios.$get('/vat-declarations/cerfa',
75
- {
76
- params: query,
77
- responseType: 'arraybuffer',
78
- headers: {
79
- Accept: 'application/pdf',
80
- },
81
- });
82
- }
83
72
  }
@@ -48,6 +48,7 @@ export enum LogType {
48
48
  ATTRIBUTION_MAIL = 36,
49
49
  UP_TO_DATE = 37,
50
50
  LOGIN_AS = 38,
51
+ ROLE = 39,
51
52
  }
52
53
 
53
54
  export const LogTypeDetail = {
@@ -500,4 +501,16 @@ export const LogTypeDetail = {
500
501
  },
501
502
  message: '%user%',
502
503
  },
504
+ ROLE: {
505
+ id: LogType.ROLE,
506
+ label: 'Role',
507
+ color: 'grey darken-3',
508
+ icon: null,
509
+ actions: {
510
+ post: 'à ajouté',
511
+ put: 'a modifié',
512
+ delete: 'a supprimé',
513
+ },
514
+ message: 'les roles (%roles%) à %user%',
515
+ },
503
516
  };
@@ -0,0 +1,12 @@
1
+ export enum BorderLineType {
2
+ DOTTED = 'dotted', // - Defines a dotted border
3
+ DASHED = 'dashed', // - Defines a dashed border
4
+ SOLID = 'solid', // - Defines a solid border
5
+ DOUBLE = 'double', // - Defines a double border
6
+ GROOVE = 'groove', // - Defines a 3D grooved border. The effect depends on the border-color value
7
+ RIDGE = 'ridge', // - Defines a 3D ridged border. The effect depends on the border-color value
8
+ INSET = 'inset', // - Defines a 3D inset border. The effect depends on the border-color value
9
+ OUTSET = 'outset', // - Defines a 3D outset border. The effect depends on the border-color value
10
+ NONE = 'none', // - Defines no border
11
+ HIDDEN = 'hidden', // - Defines a hidden border
12
+ }
@@ -1,5 +1,5 @@
1
1
  export const TypeSupportForNotation = [
2
2
  { value: 1, text: 'Google', src: 'https://lh3.googleusercontent.com/COxitqgJr1sJnIDe8-jiKhxDx1FrYbtRHKJ9z_hELisAlapwE9LUPh6fcXIfb5vwpbMl4xl9H9TRFPc5NOO8Sb3VSgIBrfRYvW6cUA' },
3
- { value: 2, text: 'Trustpilot', src: '../../../../assets/logo-trustpilot.png' },
4
- { value: 3, text: 'Application cliente' },
3
+ { value: 2, text: 'Trustpilot', src: 'https://logowik.com/content/uploads/images/trustpilot2525.jpg' },
4
+ { value: 3, text: 'Application client' },
5
5
  ];
@@ -44,6 +44,66 @@ export const accountInfo3310: AccountInfo[] = [
44
44
  fieldsToSubtract: [],
45
45
  type: 'debit',
46
46
  },
47
+ {
48
+ number: 445666,
49
+ fields: ['vat.importations.normalRate20.tax'],
50
+ fieldsToSubtract: [],
51
+ type: 'credit',
52
+ },
53
+ {
54
+ number: 445204,
55
+ fields: ['vat.importations.normalRate20.tax'],
56
+ fieldsToSubtract: [],
57
+ type: 'debit',
58
+ },
59
+ {
60
+ number: 445665,
61
+ fields: ['vat.importations.reduceRate10.tax'],
62
+ fieldsToSubtract: [],
63
+ type: 'credit',
64
+ },
65
+ {
66
+ number: 445203,
67
+ fields: ['vat.importations.reduceRate10.tax'],
68
+ fieldsToSubtract: [],
69
+ type: 'debit',
70
+ },
71
+ {
72
+ number: 445668,
73
+ fields: ['vat.importations.reduceRate8Dot5.tax'],
74
+ fieldsToSubtract: [],
75
+ type: 'credit',
76
+ },
77
+ {
78
+ number: 445206,
79
+ fields: ['vat.importations.reduceRate8Dot5.tax'],
80
+ fieldsToSubtract: [],
81
+ type: 'debit',
82
+ },
83
+ {
84
+ number: 445664,
85
+ fields: ['vat.importations.reduceRate5Dot5.tax'],
86
+ fieldsToSubtract: [],
87
+ type: 'credit',
88
+ },
89
+ {
90
+ number: 445202,
91
+ fields: ['vat.importations.reduceRate5Dot5.tax'],
92
+ fieldsToSubtract: [],
93
+ type: 'debit',
94
+ },
95
+ {
96
+ number: 445667,
97
+ fields: ['vat.importations.reduceRate2Dot1.tax'],
98
+ fieldsToSubtract: [],
99
+ type: 'credit',
100
+ },
101
+ {
102
+ number: 445205,
103
+ fields: ['vat.importations.reduceRate2Dot1.tax'],
104
+ fieldsToSubtract: [],
105
+ type: 'debit',
106
+ },
47
107
  {
48
108
  number: 445662,
49
109
  fields: ['vat.onIntracommunityAcquisition'],
@@ -66,7 +126,13 @@ export const accountInfo3310: AccountInfo[] = [
66
126
  {
67
127
  number: 445840,
68
128
  fields: ['vat.deductible.other.total', 'vat.deductible.toImpute'],
69
- fieldsToSubtract: [],
129
+ fieldsToSubtract: [
130
+ 'vat.importations.normalRate20.tax',
131
+ 'vat.importations.reduceRate10.tax',
132
+ 'vat.importations.reduceRate8Dot5.tax',
133
+ 'vat.importations.reduceRate5Dot5.tax',
134
+ 'vat.importations.reduceRate2Dot1.tax',
135
+ ],
70
136
  type: 'credit',
71
137
  },
72
138
  {
@@ -229,6 +229,63 @@ export class CreateCommercialSetting {
229
229
  @IsBoolean()
230
230
  @ToBoolean()
231
231
  shouldHideBrandName?: boolean;
232
+
233
+
234
+ @ApiPropertyOptional()
235
+ @IsOptional()
236
+ @IsNumber()
237
+ customerBlockBorderThickness?: number;
238
+
239
+ @ApiPropertyOptional()
240
+ @IsOptional()
241
+ @IsString()
242
+ customerBlockBorderColor?: string;
243
+
244
+ @ApiPropertyOptional()
245
+ @IsOptional()
246
+ @IsNumber()
247
+ lineSeparationThickness?: number;
248
+
249
+ @ApiPropertyOptional()
250
+ @IsOptional()
251
+ @IsString()
252
+ lineSeparationType?: string;
253
+
254
+ @ApiPropertyOptional()
255
+ @IsOptional()
256
+ @IsString()
257
+ lineSeparationColor?: string;
258
+
259
+ @ApiPropertyOptional()
260
+ @IsOptional()
261
+ @IsNumber()
262
+ columnSeparationThickness?: number;
263
+
264
+ @ApiPropertyOptional()
265
+ @IsOptional()
266
+ @IsString()
267
+ columnSeparationType?: string;
268
+
269
+ @ApiPropertyOptional()
270
+ @IsOptional()
271
+ @IsString()
272
+ columnSeparationColor?: string;
273
+
274
+ @ApiPropertyOptional()
275
+ @IsOptional()
276
+ @IsNumber()
277
+ externalBorderThickness?: number;
278
+
279
+ @ApiPropertyOptional()
280
+ @IsOptional()
281
+ @IsString()
282
+ externalBorderType?: string;
283
+
284
+ @ApiPropertyOptional()
285
+ @IsOptional()
286
+ @IsString()
287
+ externalBorderColor?: string;
288
+
232
289
  }
233
290
 
234
291
  export class CreateCommercialMail {
@@ -102,6 +102,11 @@ export class CreateProjectExercice {
102
102
  @ToBoolean()
103
103
  with2572: boolean;
104
104
 
105
+ @ApiProperty()
106
+ @IsBoolean()
107
+ @ToBoolean()
108
+ withBalanceSheetNote: boolean;
109
+
105
110
  @ApiProperty()
106
111
  @IsString()
107
112
  mailTo: string;
@@ -9,7 +9,6 @@ export interface PartialExercicePrestationExpress {
9
9
  export interface ParamsForPaymentsAuto {
10
10
  idTypeBrand: number;
11
11
  firstExerciceNonExpresssEndDate: Date;
12
- goToClient: Date;
13
12
  idPrestation: number;
14
13
  idLegalForm: number;
15
14
  isWithApplicationFees: boolean;
@@ -13,6 +13,11 @@ export class QueryPaginateTerminationList {
13
13
  @IsOptional()
14
14
  limit?: number;
15
15
 
16
+ @ApiPropertyOptional()
17
+ @IsInt()
18
+ @IsOptional()
19
+ idSociety?: number;
20
+
16
21
  @ApiPropertyOptional()
17
22
  @IsString()
18
23
  @IsOptional()
@@ -0,0 +1,28 @@
1
+ import {
2
+ IsBoolean,
3
+ IsInt,
4
+ IsOptional,
5
+ } from 'class-validator';
6
+ import { ApiProperty, ApiPropertyOptional } from '../../../../utils';
7
+ import { ToBoolean } from '../../../../utils/transforms/boolean.transform';
8
+
9
+ export class CountAndDisableBalanceSheetParams {
10
+ @ApiProperty()
11
+ @IsInt()
12
+ idSociety: number;
13
+
14
+ @ApiProperty()
15
+ @IsInt()
16
+ currentIdUser: number;
17
+
18
+ @ApiPropertyOptional()
19
+ @IsOptional()
20
+ @IsInt()
21
+ lastIdExerciceToProduce?: number;
22
+
23
+ @ApiPropertyOptional()
24
+ @IsOptional()
25
+ @IsBoolean()
26
+ @ToBoolean()
27
+ hasToDisableBalanceSheets?: boolean;
28
+ }
@@ -54,10 +54,4 @@ export class QueryVatEntry {
54
54
  @IsString()
55
55
  @IsOptional()
56
56
  type?: 'collected' | 'deductible';
57
- }
58
-
59
- export class QueryCerfa {
60
- @ApiProperty()
61
- @IsString()
62
- fileName: string;
63
57
  }
@@ -52,4 +52,15 @@ export interface ISocietyGescom {
52
52
  updatedAt?: Date | null;
53
53
  shouldHideBrandName?: boolean;
54
54
  shouldHideEmailHeader?: boolean;
55
+ customerBlockBorderThickness?: number | null;
56
+ customerBlockBorderColor?: string | null;
57
+ lineSeparationThickness?: number | null;
58
+ lineSeparationType?: string | null;
59
+ lineSeparationColor?: string | null;
60
+ columnSeparationThickness?: number | null;
61
+ columnSeparationType?: string | null;
62
+ columnSeparationColor?: string | null;
63
+ externalBorderThickness?: number | null;
64
+ externalBorderType?: string | null;
65
+ externalBorderColor?: string | null;
55
66
  }
package/ts/types/index.ts CHANGED
@@ -1018,6 +1018,7 @@ export * from './Interface/api/legalNotice/UpdateLegalNotice';
1018
1018
  export * from './Interface/api/wallet/QueryWallet';
1019
1019
  export * from './Interface/api/terminationList/QueryTerminationList';
1020
1020
  export * from './Interface/api/terminationList/DestroyTerminationList';
1021
+ export * from './Interface/api/terminationList/TerminationList';
1021
1022
  export * from './Interface/api/terminationList/CreateTerminationList';
1022
1023
  export * from './Interface/api/pdf/ReadPdfizer';
1023
1024
  export * from './Interface/api/gedFile/updateGedFile';
@@ -245,7 +245,7 @@ export class CommercialDocumentCommonHTML {
245
245
  .pdf-content .logo-placeholder { width: 300px; max-height: 150px;text-align: <%= settings && settings.logoAlignment === 'left' ? 'left' : 'right' %>; margin-bottom: <%= settings && settings.logoAlignment === 'left' ? '10px;' : '0px' %>}
246
246
  .pdf-content .logo-placeholder > svg, .pdf-content .logo-placeholder > img { max-width: 100%; max-height: 150px; }
247
247
  .pdf-content .document-reference { font-size: 20px !important; }
248
- .pdf-content .customer-border { border: 2px solid #EAEAEA; border-radius: 6px; padding: 7px; }
248
+ .pdf-content .customer-border { border: <%= settings && settings.customerBlockBorderThickness ? settings.customerBlockBorderThickness + 'px' : '2px' %> solid <% settings && settings.customerBlockBorderColor ? settings.customerBlockBorderColor : '#EAEAEA' %>; border-radius: 6px; padding: 7px; }
249
249
 
250
250
  /* Body */
251
251
  .pdf-content table.commercial-table-preview { border-spacing: 1px; border-collapse: collapse; }
@@ -265,6 +265,23 @@ export class CommercialDocumentCommonHTML {
265
265
  .pdf-content table.commercial-table-preview .discount-percent { color: #838384; font-size: smaller }
266
266
  .pdf-content a.payment-button { margin-left: 40px; display: flex; align-items: center; background-color: #EBF1FF; border-radius: 10px; font-weight: 450; font-size: 12px !important; color: #1656FF; border: none; padding: 8px 14px; text-decoration: none; }
267
267
  .pdf-content a.payment-button svg { margin-left: 15px; }
268
+
269
+ <% if (settings && !settings.areLineSeparationHidden) { %>
270
+ .pdf-content td { border-top: <%= settings && settings.lineSeparationThickness ? settings.lineSeparationThickness + 'px' : '2px' %> <%= settings && settings.lineSeparationType ? settings.lineSeparationType : 'solid' %> <%= settings && settings.lineSeparationColor ? settings.lineSeparationColor : '#EAEAEA' %> !important; border-bottom: <%= settings && settings.lineSeparationThickness ? settings.lineSeparationThickness + 'px' : '2px' %> <%= settings && settings.lineSeparationType ? settings.lineSeparationType : 'solid' %> <%= settings && settings.lineSeparationColor ? settings.lineSeparationColor : '#EAEAEA' %> !important; }
271
+ <% } %>
272
+
273
+ <% if (settings && !settings.areColumnsSeparationHidden) { %>
274
+ .pdf-content td { border-left: <%= settings && settings.columnSeparationThickness ? settings.columnSeparationThickness + 'px' : '2px' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : 'solid' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : '#EAEAEA' %> !important; border-right: <%= settings && settings.columnSeparationThickness ? settings.columnSeparationThickness + 'px' : '2px' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : 'solid' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : '#EAEAEA' %> !important; }
275
+ <% } %>
276
+
277
+ <% if (settings && !settings.areExternalBordersHidden) { %>
278
+ .pdf-content table.commercial-table-preview { border: <%= settings && settings.columnSeparationThickness ? settings.columnSeparationThickness + 'px' : '2px' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : 'solid' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : '#EAEAEA' %> !important; }
279
+ .pdf-content table.commercial-table-preview tr:last-child td { border-bottom: <%= settings && settings.columnSeparationThickness ? settings.columnSeparationThickness + 'px' : '2px' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : 'solid' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : '#EAEAEA' %> !important; }
280
+ .pdf-content table.commercial-table-preview thead td { border-top: <%= settings && settings.columnSeparationThickness ? settings.columnSeparationThickness + 'px' : '2px' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : 'solid' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : '#EAEAEA' %> !important; }
281
+ .pdf-content table.commercial-table-preview td:first-child { border-left: <%= settings && settings.columnSeparationThickness ? settings.columnSeparationThickness + 'px' : '2px' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : 'solid' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : '#EAEAEA' %> !important; }
282
+ .pdf-content table.commercial-table-preview td:last-child { border-right: <%= settings && settings.columnSeparationThickness ? settings.columnSeparationThickness + 'px' : '2px' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : 'solid' %> <%= settings && settings.columnSeparationColor ? settings.columnSeparationColor : '#EAEAEA' %> !important; }
283
+ <% } %>
284
+
268
285
  <% if (settings && settings.areLinesSeparationHidden) { %>
269
286
  .pdf-content td { border-top: none !important; border-bottom: none !important; }
270
287
  <% } %>
@@ -58,13 +58,15 @@ const groupPaymentsByServiceType = (payments: IPayment[], types: ('isComptable'
58
58
  return societyPayment;
59
59
  };
60
60
 
61
- const calculateFees = (amount: number, goToClient: Date, paymentDate: Date):number => {
61
+ const calculateFees = (amount: number, paymentDate: Date):number => {
62
62
  const yearlyPriceIncreasing = 1.0275;
63
63
 
64
- const oneYearLessIfIn3LastMonthsOfYear = dayjs(goToClient).month() >= 9 ? 1 : 0;
64
+ // Commenté car en fin d'année, pour appliquer le taux d'inflation annuel,
65
+ // un script enlève les 2,75€ appliqués pour appliquer le bon taux
66
+ // const oneYearLessIfIn3LastMonthsOfYear = dayjs(goToClient).month() >= 9 ? 1 : 0;
65
67
 
66
68
  if (dayjs(paymentDate).year() - dayjs().year() > 0) {
67
- const nbYearsMore = dayjs(paymentDate).year() - dayjs().year() - oneYearLessIfIn3LastMonthsOfYear;
69
+ const nbYearsMore = dayjs(paymentDate).year() - dayjs().year()/* - oneYearLessIfIn3LastMonthsOfYear */;
68
70
  // on applique X fois l'augmentation
69
71
  // ex. : si on lance l'appel en 2024, et qu'on génére un paiement pour 2026, on applique 2 fois l'augmentation
70
72
  // soit amount * yearlyPriceIncreasing * yearlyPriceIncreasing
@@ -90,7 +92,7 @@ const calculateFees = (amount: number, goToClient: Date, paymentDate: Date):numb
90
92
  * @returns { IPayment[] } list of payment to create for billing auto, after each presta go to onBoarding
91
93
  */
92
94
  const calculatePaymentsAuto = (params: ParamsForPaymentsAuto):PaymentAuto[] => {
93
- const { idTypeBrand, goToClient, isWithApplicationFees, firstExerciceNonExpresssEndDate, idPrestation, idLegalForm, prestationList, idVat, yearlyAmountNonExpress, nextYearlyAmountNonExpress, listPartialExercicePrestationExpress, listRegulations, recoveryDate } = params;
95
+ const { idTypeBrand, isWithApplicationFees, firstExerciceNonExpresssEndDate, idPrestation, idLegalForm, prestationList, idVat, yearlyAmountNonExpress, nextYearlyAmountNonExpress, listPartialExercicePrestationExpress, listRegulations, recoveryDate } = params;
94
96
 
95
97
  if (!yearlyAmountNonExpress) throw new Error('Le montant annuel des prestations non express ne peut pas être nul.');
96
98
 
@@ -245,10 +247,11 @@ const calculatePaymentsAuto = (params: ParamsForPaymentsAuto):PaymentAuto[] => {
245
247
 
246
248
  let hasGeneratedWholeYear = false;
247
249
  let isFirstNonExpress = true;
250
+ let countNonExpressGenerated = 0;
248
251
 
249
- //On génère des paiements jusqu'à ce qu'un exercice soit entier (12 mois), non express
250
- while (!hasGeneratedWholeYear) {
251
-
252
+ // On génère des paiements jusqu'à ce qu'un exercice soit entier (12 mois), non express
253
+ // et qu'au moins 13 mois de paiements ont été générés depuis la date de reprise
254
+ while (!hasGeneratedWholeYear || countNonExpressGenerated < 2) {
252
255
  //On compte le nb de mois restants entre la date à laquelle le paiement va être créé et la date de fin d'exercice
253
256
  let countMonthsBeforeExerciceEnd = Math.ceil(dayjs(exerciceEndDate).diff(paymentDate, 'months', true));
254
257
  if (countMonthsBeforeExerciceEnd < 3) countMonthsBeforeExerciceEnd = 3;
@@ -295,7 +298,7 @@ const calculatePaymentsAuto = (params: ParamsForPaymentsAuto):PaymentAuto[] => {
295
298
 
296
299
  // Si besoin, on applique les frais nécessaires :
297
300
  // - 2,75% d'augmentation chaque année, sauf si souscriptiuon dans les 3 derniers mois de l'année civile)
298
- amount = calculateFees(amount, goToClient, paymentDate);
301
+ amount = calculateFees(amount, paymentDate);
299
302
 
300
303
  listPayments.push({
301
304
  amount: Math.round(100 * amount) / 100,
@@ -312,6 +315,7 @@ const calculatePaymentsAuto = (params: ParamsForPaymentsAuto):PaymentAuto[] => {
312
315
  remainingAmount = 0;
313
316
  if (countMonthsBeforeExerciceEnd === 12) hasGeneratedWholeYear = true;
314
317
  isFirstNonExpress = false;
318
+ countNonExpressGenerated += 1;
315
319
  }
316
320
 
317
321
  remainingAmount = 0;
@@ -341,7 +345,7 @@ const calculatePaymentsAuto = (params: ParamsForPaymentsAuto):PaymentAuto[] => {
341
345
  // Si besoin, on applique les frais nécessaires :
342
346
  // - 2,75% d'augmentation chaque année, sauf si souscriptiuon dans les 3 derniers mois de l'année civile)
343
347
  // - frais d'application dès les second exo non express
344
- amount = calculateFees(amount, goToClient, paymentDate);
348
+ amount = calculateFees(amount, paymentDate);
345
349
 
346
350
  listPayments.push({
347
351
  amount: Math.round(100 * amount) / 100,
@@ -395,7 +395,7 @@ const calculatePrestationPrice = (
395
395
  /* Offre pourcentage offer */
396
396
  if (totalPercentage > 0) totalPrestation = totalPrestation - (totalPrestation * (totalPercentage / 100));
397
397
  /* Gesstioin du prix minimum acceptable pour la prestation */
398
- if (prestationList.minimumPrice && totalPrestation < prestationList.minimumPrice) totalPrestation = prestationList.minimumPrice;
398
+ if (prestationList && prestationList.minimumPrice && totalPrestation < prestationList.minimumPrice) totalPrestation = prestationList.minimumPrice;
399
399
  /* Gestion des options */
400
400
  let OptionTotalPrice: number = 0;
401
401
  if (optionsList.length) {