@acontplus/core 1.0.6 → 1.0.9

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 (104) hide show
  1. package/README.md +8 -0
  2. package/package.json +13 -15
  3. package/src/index.d.ts +8 -0
  4. package/src/index.js +9 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/adapters/axios.adapter.d.ts +9 -0
  7. package/src/lib/adapters/axios.adapter.js +20 -0
  8. package/src/lib/adapters/axios.adapter.js.map +1 -0
  9. package/src/lib/adapters/fetch.adapter.d.ts +8 -0
  10. package/src/lib/adapters/fetch.adapter.js +31 -0
  11. package/src/lib/adapters/fetch.adapter.js.map +1 -0
  12. package/src/lib/adapters/http-client-factory.d.ts +31 -0
  13. package/src/lib/adapters/http-client-factory.js +40 -0
  14. package/src/lib/adapters/http-client-factory.js.map +1 -0
  15. package/src/lib/adapters/index.d.ts +3 -0
  16. package/src/lib/adapters/index.js +4 -0
  17. package/src/lib/adapters/index.js.map +1 -0
  18. package/src/lib/constants/constants.d.ts +20 -0
  19. package/src/lib/constants/constants.js +24 -0
  20. package/src/lib/constants/constants.js.map +1 -0
  21. package/src/lib/constants/index.d.ts +1 -0
  22. package/src/lib/constants/index.js +2 -0
  23. package/src/lib/constants/index.js.map +1 -0
  24. package/src/lib/environments/environment.d.ts +7 -0
  25. package/src/lib/environments/environment.js +2 -0
  26. package/src/lib/environments/environment.js.map +1 -0
  27. package/src/lib/environments/index.d.ts +1 -0
  28. package/src/lib/environments/index.js +2 -0
  29. package/src/lib/environments/index.js.map +1 -0
  30. package/src/lib/models/api-response.d.ts +26 -0
  31. package/src/lib/models/api-response.js +3 -0
  32. package/src/lib/models/api-response.js.map +1 -0
  33. package/src/lib/models/base-entity.d.ts +8 -0
  34. package/src/lib/models/base-entity.js +2 -0
  35. package/src/lib/models/base-entity.js.map +1 -0
  36. package/src/lib/models/filter-params.d.ts +7 -0
  37. package/src/lib/models/filter-params.js +2 -0
  38. package/src/lib/models/filter-params.js.map +1 -0
  39. package/src/lib/models/index.d.ts +6 -0
  40. package/src/lib/models/index.js +7 -0
  41. package/src/lib/models/index.js.map +1 -0
  42. package/src/lib/models/legacy-api-response.d.ts +6 -0
  43. package/src/lib/models/legacy-api-response.js +8 -0
  44. package/src/lib/models/legacy-api-response.js.map +1 -0
  45. package/src/lib/models/paginated-result.d.ts +10 -0
  46. package/src/lib/models/paginated-result.js +2 -0
  47. package/src/lib/models/paginated-result.js.map +1 -0
  48. package/src/lib/models/pagination-params.d.ts +23 -0
  49. package/src/lib/models/pagination-params.js +55 -0
  50. package/src/lib/models/pagination-params.js.map +1 -0
  51. package/src/lib/ports/http.port.d.ts +11 -0
  52. package/src/lib/ports/http.port.js +2 -0
  53. package/src/lib/ports/http.port.js.map +1 -0
  54. package/src/lib/ports/index.d.ts +1 -0
  55. package/src/lib/ports/index.js +2 -0
  56. package/src/lib/ports/index.js.map +1 -0
  57. package/src/lib/pricing/calculations/discount.calculator.d.ts +56 -0
  58. package/src/lib/pricing/calculations/discount.calculator.js +99 -0
  59. package/src/lib/pricing/calculations/discount.calculator.js.map +1 -0
  60. package/src/lib/pricing/calculations/index.d.ts +5 -0
  61. package/src/lib/pricing/calculations/index.js +6 -0
  62. package/src/lib/pricing/calculations/index.js.map +1 -0
  63. package/src/lib/pricing/calculations/line-item.calculator.d.ts +34 -0
  64. package/src/lib/pricing/calculations/line-item.calculator.js +61 -0
  65. package/src/lib/pricing/calculations/line-item.calculator.js.map +1 -0
  66. package/src/lib/pricing/calculations/pricing-calculation.error.d.ts +3 -0
  67. package/src/lib/pricing/calculations/pricing-calculation.error.js +7 -0
  68. package/src/lib/pricing/calculations/pricing-calculation.error.js.map +1 -0
  69. package/src/lib/pricing/calculations/pricing.calculator.d.ts +15 -0
  70. package/src/lib/pricing/calculations/pricing.calculator.js +24 -0
  71. package/src/lib/pricing/calculations/pricing.calculator.js.map +1 -0
  72. package/src/lib/pricing/calculations/profit.calculator.d.ts +56 -0
  73. package/src/lib/pricing/calculations/profit.calculator.js +102 -0
  74. package/src/lib/pricing/calculations/profit.calculator.js.map +1 -0
  75. package/src/lib/pricing/calculations/tax.calculator.d.ts +57 -0
  76. package/src/lib/pricing/calculations/tax.calculator.js +98 -0
  77. package/src/lib/pricing/calculations/tax.calculator.js.map +1 -0
  78. package/src/lib/pricing/index.d.ts +7 -0
  79. package/src/lib/pricing/index.js +8 -0
  80. package/src/lib/pricing/index.js.map +1 -0
  81. package/src/lib/types/index.d.ts +1 -0
  82. package/src/lib/types/index.js +2 -0
  83. package/src/lib/types/index.js.map +1 -0
  84. package/src/lib/types/pricing.types.d.ts +32 -0
  85. package/src/lib/types/pricing.types.js +2 -0
  86. package/src/lib/types/pricing.types.js.map +1 -0
  87. package/src/lib/value-objects/base.vo.d.ts +7 -0
  88. package/src/lib/value-objects/base.vo.js +14 -0
  89. package/src/lib/value-objects/base.vo.js.map +1 -0
  90. package/src/lib/value-objects/entity-id.vo.d.ts +6 -0
  91. package/src/lib/value-objects/entity-id.vo.js +16 -0
  92. package/src/lib/value-objects/entity-id.vo.js.map +1 -0
  93. package/src/lib/value-objects/identification-number.vo.d.ts +19 -0
  94. package/src/lib/value-objects/identification-number.vo.js +132 -0
  95. package/src/lib/value-objects/identification-number.vo.js.map +1 -0
  96. package/src/lib/value-objects/index.d.ts +4 -0
  97. package/src/lib/value-objects/index.js +5 -0
  98. package/src/lib/value-objects/index.js.map +1 -0
  99. package/src/lib/value-objects/money.vo.d.ts +12 -0
  100. package/src/lib/value-objects/money.vo.js +21 -0
  101. package/src/lib/value-objects/money.vo.js.map +1 -0
  102. package/index.cjs.js +0 -742
  103. package/index.d.ts +0 -1
  104. package/index.esm.js +0 -724
@@ -0,0 +1,56 @@
1
+ import { DiscountCalculation } from '../../types';
2
+ /**
3
+ * Calculadora especializada para descuentos
4
+ */
5
+ export declare class DiscountCalculator {
6
+ private decimales;
7
+ constructor(decimales?: number);
8
+ /**
9
+ * Calcula el valor del descuento a partir del porcentaje
10
+ * @param originalPrice - Precio antes del descuento
11
+ * @param discountPercentage - Porcentaje de descuento a aplicar (0-100)
12
+ * @returns Valor del descuento en moneda
13
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
14
+ * @example
15
+ * ```typescript
16
+ * const valorDescuento = calculadora.calculateDiscountAmount(100, 10); // 10
17
+ * ```
18
+ */
19
+ calculateDiscountAmount(originalPrice: number, discountPercentage: number): number;
20
+ /**
21
+ * Aplica un descuento al precio original
22
+ * @param originalPrice - Precio antes del descuento
23
+ * @param discountPercentage - Porcentaje de descuento a aplicar
24
+ * @returns Precio final después del descuento
25
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
26
+ * @example
27
+ * ```typescript
28
+ * const precioConDescuento = calculadora.applyDiscount(100, 10); // 90
29
+ * ```
30
+ */
31
+ applyDiscount(originalPrice: number, discountPercentage: number): number;
32
+ /**
33
+ * Calcula el porcentaje de descuento a partir de los valores
34
+ * @param originalPrice - Precio antes del descuento
35
+ * @param discountAmount - Valor del descuento aplicado
36
+ * @returns Porcentaje de descuento
37
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
38
+ * @example
39
+ * ```typescript
40
+ * const porcentaje = calculadora.calculateDiscountPercentage(100, 10); // 10
41
+ * ```
42
+ */
43
+ calculateDiscountPercentage(originalPrice: number, discountAmount: number): number;
44
+ /**
45
+ * Obtiene los detalles completos del cálculo de descuento
46
+ * @param originalPrice - Precio antes del descuento
47
+ * @param discountPercentage - Porcentaje de descuento a aplicar
48
+ * @returns Objeto con todos los detalles del cálculo
49
+ * @example
50
+ * ```typescript
51
+ * const detalles = calculadora.getDiscountCalculationDetails(100, 10);
52
+ * // { originalPrice: 100, discountRate: 10, discountAmount: 10, finalPrice: 90 }
53
+ * ```
54
+ */
55
+ getDiscountCalculationDetails(originalPrice: number, discountPercentage: number): DiscountCalculation;
56
+ }
@@ -0,0 +1,99 @@
1
+ import { DecimalConverter, InvalidParameterError, ParameterValidator } from '@acontplus/utils';
2
+ import { PricingCalculationError } from './pricing-calculation.error';
3
+ /**
4
+ * Calculadora especializada para descuentos
5
+ */
6
+ export class DiscountCalculator {
7
+ constructor(decimales = 4) {
8
+ this.decimales = decimales;
9
+ }
10
+ /**
11
+ * Calcula el valor del descuento a partir del porcentaje
12
+ * @param originalPrice - Precio antes del descuento
13
+ * @param discountPercentage - Porcentaje de descuento a aplicar (0-100)
14
+ * @returns Valor del descuento en moneda
15
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
16
+ * @example
17
+ * ```typescript
18
+ * const valorDescuento = calculadora.calculateDiscountAmount(100, 10); // 10
19
+ * ```
20
+ */
21
+ calculateDiscountAmount(originalPrice, discountPercentage) {
22
+ try {
23
+ ParameterValidator.validatePositiveNumber(originalPrice, 'originalPrice');
24
+ ParameterValidator.validatePercentage(discountPercentage, 'discountPercentage');
25
+ const percentage = DecimalConverter.divideAsNumber(discountPercentage, 100);
26
+ return DecimalConverter.multiplyAsNumber(originalPrice, percentage);
27
+ }
28
+ catch (error) {
29
+ throw new PricingCalculationError('calculateDiscountAmount', error);
30
+ }
31
+ }
32
+ /**
33
+ * Aplica un descuento al precio original
34
+ * @param originalPrice - Precio antes del descuento
35
+ * @param discountPercentage - Porcentaje de descuento a aplicar
36
+ * @returns Precio final después del descuento
37
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
38
+ * @example
39
+ * ```typescript
40
+ * const precioConDescuento = calculadora.applyDiscount(100, 10); // 90
41
+ * ```
42
+ */
43
+ applyDiscount(originalPrice, discountPercentage) {
44
+ try {
45
+ const discountAmount = this.calculateDiscountAmount(originalPrice, discountPercentage);
46
+ return DecimalConverter.subtractAsNumber(originalPrice, discountAmount);
47
+ }
48
+ catch (error) {
49
+ throw new PricingCalculationError('applyDiscount', error);
50
+ }
51
+ }
52
+ /**
53
+ * Calcula el porcentaje de descuento a partir de los valores
54
+ * @param originalPrice - Precio antes del descuento
55
+ * @param discountAmount - Valor del descuento aplicado
56
+ * @returns Porcentaje de descuento
57
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
58
+ * @example
59
+ * ```typescript
60
+ * const porcentaje = calculadora.calculateDiscountPercentage(100, 10); // 10
61
+ * ```
62
+ */
63
+ calculateDiscountPercentage(originalPrice, discountAmount) {
64
+ try {
65
+ ParameterValidator.validatePositiveNumber(originalPrice, 'originalPrice');
66
+ ParameterValidator.validatePositiveNumber(discountAmount, 'discountAmount');
67
+ if (discountAmount > originalPrice) {
68
+ throw new InvalidParameterError('discountAmount', 'No puede ser mayor que el precio original');
69
+ }
70
+ const percentage = DecimalConverter.divideAsNumber(discountAmount, originalPrice);
71
+ return DecimalConverter.multiplyAsNumber(percentage, 100);
72
+ }
73
+ catch (error) {
74
+ throw new PricingCalculationError('calculateDiscountPercentage', error);
75
+ }
76
+ }
77
+ /**
78
+ * Obtiene los detalles completos del cálculo de descuento
79
+ * @param originalPrice - Precio antes del descuento
80
+ * @param discountPercentage - Porcentaje de descuento a aplicar
81
+ * @returns Objeto con todos los detalles del cálculo
82
+ * @example
83
+ * ```typescript
84
+ * const detalles = calculadora.getDiscountCalculationDetails(100, 10);
85
+ * // { originalPrice: 100, discountRate: 10, discountAmount: 10, finalPrice: 90 }
86
+ * ```
87
+ */
88
+ getDiscountCalculationDetails(originalPrice, discountPercentage) {
89
+ const discountAmount = this.calculateDiscountAmount(originalPrice, discountPercentage);
90
+ const finalPrice = this.applyDiscount(originalPrice, discountPercentage);
91
+ return {
92
+ originalPrice,
93
+ discountRate: discountPercentage,
94
+ discountAmount,
95
+ finalPrice,
96
+ };
97
+ }
98
+ }
99
+ //# sourceMappingURL=discount.calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discount.calculator.js","sourceRoot":"","sources":["../../../../../../../packages/core/src/lib/pricing/calculations/discount.calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B,YAAoB,YAAY,CAAC;QAAb,cAAS,GAAT,SAAS,CAAI;IAAG,CAAC;IAErC;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,aAAqB,EAAE,kBAA0B;QACvE,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAC1E,kBAAkB,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;YAEhF,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YAC5E,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,yBAAyB,EAAE,KAAc,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,aAAa,CAAC,aAAqB,EAAE,kBAA0B;QAC7D,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;YACvF,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,eAAe,EAAE,KAAc,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,2BAA2B,CAAC,aAAqB,EAAE,cAAsB;QACvE,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAC1E,kBAAkB,CAAC,sBAAsB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YAE5E,IAAI,cAAc,GAAG,aAAa,EAAE,CAAC;gBACnC,MAAM,IAAI,qBAAqB,CAC7B,gBAAgB,EAChB,2CAA2C,CAC5C,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YAClF,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,6BAA6B,EAAE,KAAc,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,6BAA6B,CAC3B,aAAqB,EACrB,kBAA0B;QAE1B,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAEzE,OAAO;YACL,aAAa;YACb,YAAY,EAAE,kBAAkB;YAChC,cAAc;YACd,UAAU;SACX,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export * from './discount.calculator';
2
+ export * from './line-item.calculator';
3
+ export * from './pricing.calculator';
4
+ export * from './profit.calculator';
5
+ export * from './tax.calculator';
@@ -0,0 +1,6 @@
1
+ export * from './discount.calculator';
2
+ export * from './line-item.calculator';
3
+ export * from './pricing.calculator';
4
+ export * from './profit.calculator';
5
+ export * from './tax.calculator';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/core/src/lib/pricing/calculations/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { LineItemCalculation } from '../../types';
2
+ /**
3
+ * Calculadora especializada para líneas de productos/servicios en facturas
4
+ */
5
+ export declare class LineItemCalculator {
6
+ private decimales;
7
+ constructor(decimales?: number);
8
+ /**
9
+ * Calcula el total de una línea de producto incluyendo descuentos e impuestos
10
+ * @param unitPrice - Precio por unidad del producto
11
+ * @param quantity - Cantidad de productos
12
+ * @param discountAmount - Valor del descuento a aplicar (por defecto 0)
13
+ * @param taxAmount - Valor del impuesto a aplicar (por defecto 0)
14
+ * @returns Objeto con todos los cálculos de la línea
15
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
16
+ * @example
17
+ * ```typescript
18
+ * const linea = calculadora.calcularTotalLinea(50, 2, 10, 8.4);
19
+ * // Resultado: subtotal: 100, con descuento: 90, total con impuesto: 98.4
20
+ * ```
21
+ */
22
+ calculateLineItemTotal(unitPrice: number, quantity: number, discountAmount?: number, taxAmount?: number): LineItemCalculation;
23
+ /**
24
+ * Calcula el subtotal antes de aplicar descuentos
25
+ * @param unitPrice - Precio por unidad
26
+ * @param quantity - Cantidad de productos
27
+ * @returns Subtotal calculado
28
+ * @example
29
+ * ```typescript
30
+ * const subtotal = calculadora.calculateSubtotal(25, 4); // 100
31
+ * ```
32
+ */
33
+ calculateSubtotal(unitPrice: number, quantity: number): number;
34
+ }
@@ -0,0 +1,61 @@
1
+ import { DecimalConverter, ParameterValidator } from '@acontplus/utils';
2
+ import { PricingCalculationError } from './pricing-calculation.error';
3
+ /**
4
+ * Calculadora especializada para líneas de productos/servicios en facturas
5
+ */
6
+ export class LineItemCalculator {
7
+ constructor(decimales = 4) {
8
+ this.decimales = decimales;
9
+ }
10
+ /**
11
+ * Calcula el total de una línea de producto incluyendo descuentos e impuestos
12
+ * @param unitPrice - Precio por unidad del producto
13
+ * @param quantity - Cantidad de productos
14
+ * @param discountAmount - Valor del descuento a aplicar (por defecto 0)
15
+ * @param taxAmount - Valor del impuesto a aplicar (por defecto 0)
16
+ * @returns Objeto con todos los cálculos de la línea
17
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
18
+ * @example
19
+ * ```typescript
20
+ * const linea = calculadora.calcularTotalLinea(50, 2, 10, 8.4);
21
+ * // Resultado: subtotal: 100, con descuento: 90, total con impuesto: 98.4
22
+ * ```
23
+ */
24
+ calculateLineItemTotal(unitPrice, quantity, discountAmount = 0, taxAmount = 0) {
25
+ try {
26
+ ParameterValidator.validatePositiveNumber(unitPrice, 'unitPrice');
27
+ ParameterValidator.validatePositiveNumber(quantity, 'quantity');
28
+ ParameterValidator.validatePositiveNumber(discountAmount, 'discountAmount');
29
+ ParameterValidator.validatePositiveNumber(taxAmount, 'taxAmount');
30
+ const subtotal = DecimalConverter.multiplyAsNumber(unitPrice, quantity);
31
+ const subtotalAfterDiscount = DecimalConverter.subtractAsNumber(subtotal, discountAmount);
32
+ const total = DecimalConverter.addAsNumber(subtotalAfterDiscount, taxAmount);
33
+ return {
34
+ unitPrice,
35
+ quantity,
36
+ subtotal,
37
+ discountAmount,
38
+ subtotalAfterDiscount,
39
+ taxAmount,
40
+ total,
41
+ };
42
+ }
43
+ catch (error) {
44
+ throw new PricingCalculationError('calcularTotalLinea', error);
45
+ }
46
+ }
47
+ /**
48
+ * Calcula el subtotal antes de aplicar descuentos
49
+ * @param unitPrice - Precio por unidad
50
+ * @param quantity - Cantidad de productos
51
+ * @returns Subtotal calculado
52
+ * @example
53
+ * ```typescript
54
+ * const subtotal = calculadora.calculateSubtotal(25, 4); // 100
55
+ * ```
56
+ */
57
+ calculateSubtotal(unitPrice, quantity) {
58
+ return DecimalConverter.multiplyAsNumber(unitPrice, quantity);
59
+ }
60
+ }
61
+ //# sourceMappingURL=line-item.calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-item.calculator.js","sourceRoot":"","sources":["../../../../../../../packages/core/src/lib/pricing/calculations/line-item.calculator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B,YAAoB,YAAY,CAAC;QAAb,cAAS,GAAT,SAAS,CAAI;IAAG,CAAC;IAErC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CACpB,SAAiB,EACjB,QAAgB,EAChB,cAAc,GAAG,CAAC,EAClB,SAAS,GAAG,CAAC;QAEb,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAClE,kBAAkB,CAAC,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChE,kBAAkB,CAAC,sBAAsB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YAC5E,kBAAkB,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAElE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACxE,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC1F,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAE7E,OAAO;gBACL,SAAS;gBACT,QAAQ;gBACR,QAAQ;gBACR,cAAc;gBACd,qBAAqB;gBACrB,SAAS;gBACT,KAAK;aACN,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,oBAAoB,EAAE,KAAc,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,SAAiB,EAAE,QAAgB;QACnD,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAW,CAAC;IAC1E,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export declare class PricingCalculationError extends Error {
2
+ constructor(operation: string, originalError?: Error);
3
+ }
@@ -0,0 +1,7 @@
1
+ export class PricingCalculationError extends Error {
2
+ constructor(operation, originalError) {
3
+ super(`Pricing calculation failed for operation: ${operation}. ${originalError?.message || ''}`);
4
+ this.name = 'PricingCalculationError';
5
+ }
6
+ }
7
+ //# sourceMappingURL=pricing-calculation.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-calculation.error.js","sourceRoot":"","sources":["../../../../../../../packages/core/src/lib/pricing/calculations/pricing-calculation.error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,SAAiB,EAAE,aAAqB;QAClD,KAAK,CACH,6CAA6C,SAAS,KAAK,aAAa,EAAE,OAAO,IAAI,EAAE,EAAE,CAC1F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { DiscountCalculator } from './discount.calculator';
2
+ import { LineItemCalculator } from './line-item.calculator';
3
+ import { ProfitCalculator } from './profit.calculator';
4
+ import { TaxCalculator } from './tax.calculator';
5
+ import { PricingConfig } from '../../types';
6
+ export declare class PricingCalculator {
7
+ private config;
8
+ readonly tax: TaxCalculator;
9
+ readonly discount: DiscountCalculator;
10
+ readonly profit: ProfitCalculator;
11
+ readonly lineItem: LineItemCalculator;
12
+ constructor(config?: PricingConfig);
13
+ updateConfig(newConfig: Partial<PricingConfig>): void;
14
+ getConfig(): PricingConfig;
15
+ }
@@ -0,0 +1,24 @@
1
+ import { DiscountCalculator } from './discount.calculator';
2
+ import { LineItemCalculator } from './line-item.calculator';
3
+ import { ProfitCalculator } from './profit.calculator';
4
+ import { TaxCalculator } from './tax.calculator';
5
+ export class PricingCalculator {
6
+ constructor(config = {}) {
7
+ this.config = {
8
+ defaultDecimals: config.defaultDecimals ?? 4,
9
+ roundingMode: config.roundingMode ?? 'round',
10
+ errorHandling: config.errorHandling ?? 'throw',
11
+ };
12
+ this.tax = new TaxCalculator(this.config.defaultDecimals);
13
+ this.discount = new DiscountCalculator(this.config.defaultDecimals);
14
+ this.profit = new ProfitCalculator(this.config.defaultDecimals);
15
+ this.lineItem = new LineItemCalculator(this.config.defaultDecimals);
16
+ }
17
+ updateConfig(newConfig) {
18
+ this.config = { ...this.config, ...newConfig };
19
+ }
20
+ getConfig() {
21
+ return { ...this.config };
22
+ }
23
+ }
24
+ //# sourceMappingURL=pricing.calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.calculator.js","sourceRoot":"","sources":["../../../../../../../packages/core/src/lib/pricing/calculations/pricing.calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,OAAO,iBAAiB;IAO5B,YAAY,SAAwB,EAAE;QACpC,IAAI,CAAC,MAAM,GAAG;YACZ,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC;YAC5C,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,OAAO;YAC5C,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,OAAO;SAC/C,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACtE,CAAC;IAED,YAAY,CAAC,SAAiC;QAC5C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ import { ProfitMarginCalculation } from '../../types';
2
+ /**
3
+ * Calculadora especializada para márgenes de ganancia y utilidades
4
+ */
5
+ export declare class ProfitCalculator {
6
+ private decimals;
7
+ constructor(decimals?: number);
8
+ /**
9
+ * Calcula el precio de venta a partir del costo y el margen de ganancia
10
+ * @param cost - Costo del producto o servicio
11
+ * @param profitMarginPercentage - Porcentaje de margen de ganancia deseado
12
+ * @returns Precio de venta calculado
13
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
14
+ * @example
15
+ * ```typescript
16
+ * const precioVenta = calculadora.calculateSalePriceFromMargin(80, 25); // 100
17
+ * ```
18
+ */
19
+ calculateSalePriceFromMargin(cost: number, profitMarginPercentage: number): number;
20
+ /**
21
+ * Calcula el porcentaje de margen de ganancia a partir del precio de venta y costo
22
+ * @param salePrice - Precio de venta del producto
23
+ * @param cost - Costo del producto
24
+ * @returns Porcentaje de margen de ganancia
25
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
26
+ * @example
27
+ * ```typescript
28
+ * const margen = calculadora.calculateProfitMarginPercentage(100, 80); // 25
29
+ * ```
30
+ */
31
+ calculateProfitMarginPercentage(salePrice: number, cost: number): number;
32
+ /**
33
+ * Calcula el valor de la ganancia
34
+ * @param salePrice - Precio de venta
35
+ * @param cost - Costo del producto
36
+ * @returns Valor de la ganancia obtenida
37
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
38
+ * @example
39
+ * ```typescript
40
+ * const ganancia = calculadora.calculateProfitAmount(100, 80); // 20
41
+ * ```
42
+ */
43
+ calculateProfitAmount(salePrice: number, cost: number): number;
44
+ /**
45
+ * Obtiene los detalles completos del cálculo de ganancia
46
+ * @param salePrice - Precio de venta
47
+ * @param cost - Costo del producto
48
+ * @returns Objeto con todos los detalles del cálculo
49
+ * @example
50
+ * ```typescript
51
+ * const detalles = calculadora.obtenerDetallesCalculoGanancia(100, 80);
52
+ * // { salePrice: 100, cost: 80, profitAmount: 20, profitMargin: 25 }
53
+ * ```
54
+ */
55
+ getProfitCalculationDetails(salePrice: number, cost: number): ProfitMarginCalculation;
56
+ }
@@ -0,0 +1,102 @@
1
+ import { DecimalConverter, InvalidParameterError, ParameterValidator } from '@acontplus/utils';
2
+ import { PricingCalculationError } from './pricing-calculation.error';
3
+ /**
4
+ * Calculadora especializada para márgenes de ganancia y utilidades
5
+ */
6
+ export class ProfitCalculator {
7
+ constructor(decimals = 4) {
8
+ this.decimals = decimals;
9
+ }
10
+ /**
11
+ * Calcula el precio de venta a partir del costo y el margen de ganancia
12
+ * @param cost - Costo del producto o servicio
13
+ * @param profitMarginPercentage - Porcentaje de margen de ganancia deseado
14
+ * @returns Precio de venta calculado
15
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
16
+ * @example
17
+ * ```typescript
18
+ * const precioVenta = calculadora.calculateSalePriceFromMargin(80, 25); // 100
19
+ * ```
20
+ */
21
+ calculateSalePriceFromMargin(cost, profitMarginPercentage) {
22
+ try {
23
+ ParameterValidator.validatePositiveNumber(cost, 'cost');
24
+ ParameterValidator.validatePositiveNumber(profitMarginPercentage, 'profitMarginPercentage');
25
+ const marginMultiplier = DecimalConverter.divideAsNumber(profitMarginPercentage, 100);
26
+ const profitAmount = DecimalConverter.multiplyAsNumber(cost, marginMultiplier);
27
+ return DecimalConverter.addAsNumber(cost, profitAmount);
28
+ }
29
+ catch (error) {
30
+ throw new PricingCalculationError('calculateSalePriceFromMargin', error);
31
+ }
32
+ }
33
+ /**
34
+ * Calcula el porcentaje de margen de ganancia a partir del precio de venta y costo
35
+ * @param salePrice - Precio de venta del producto
36
+ * @param cost - Costo del producto
37
+ * @returns Porcentaje de margen de ganancia
38
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
39
+ * @example
40
+ * ```typescript
41
+ * const margen = calculadora.calculateProfitMarginPercentage(100, 80); // 25
42
+ * ```
43
+ */
44
+ calculateProfitMarginPercentage(salePrice, cost) {
45
+ try {
46
+ ParameterValidator.validatePositiveNumber(salePrice, 'salePrice');
47
+ ParameterValidator.validatePositiveNumber(cost, 'cost');
48
+ if (salePrice < cost) {
49
+ throw new InvalidParameterError('salePrice', 'El precio de venta no puede ser menor que el costo');
50
+ }
51
+ const profitAmount = DecimalConverter.subtractAsNumber(salePrice, cost);
52
+ const profitRatio = DecimalConverter.divideAsNumber(profitAmount, cost);
53
+ return DecimalConverter.multiplyAsNumber(profitRatio, 100);
54
+ }
55
+ catch (error) {
56
+ throw new PricingCalculationError('calculateProfitMarginPercentage', error);
57
+ }
58
+ }
59
+ /**
60
+ * Calcula el valor de la ganancia
61
+ * @param salePrice - Precio de venta
62
+ * @param cost - Costo del producto
63
+ * @returns Valor de la ganancia obtenida
64
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
65
+ * @example
66
+ * ```typescript
67
+ * const ganancia = calculadora.calculateProfitAmount(100, 80); // 20
68
+ * ```
69
+ */
70
+ calculateProfitAmount(salePrice, cost) {
71
+ try {
72
+ ParameterValidator.validatePositiveNumber(salePrice, 'salePrice');
73
+ ParameterValidator.validatePositiveNumber(cost, 'cost');
74
+ return DecimalConverter.subtractAsNumber(salePrice, cost);
75
+ }
76
+ catch (error) {
77
+ throw new PricingCalculationError('calculateProfitAmount', error);
78
+ }
79
+ }
80
+ /**
81
+ * Obtiene los detalles completos del cálculo de ganancia
82
+ * @param salePrice - Precio de venta
83
+ * @param cost - Costo del producto
84
+ * @returns Objeto con todos los detalles del cálculo
85
+ * @example
86
+ * ```typescript
87
+ * const detalles = calculadora.obtenerDetallesCalculoGanancia(100, 80);
88
+ * // { salePrice: 100, cost: 80, profitAmount: 20, profitMargin: 25 }
89
+ * ```
90
+ */
91
+ getProfitCalculationDetails(salePrice, cost) {
92
+ const profitAmount = this.calculateProfitAmount(salePrice, cost);
93
+ const profitMargin = this.calculateProfitMarginPercentage(salePrice, cost);
94
+ return {
95
+ salePrice,
96
+ cost,
97
+ profitAmount,
98
+ profitMargin,
99
+ };
100
+ }
101
+ }
102
+ //# sourceMappingURL=profit.calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profit.calculator.js","sourceRoot":"","sources":["../../../../../../../packages/core/src/lib/pricing/calculations/profit.calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,YAAoB,WAAW,CAAC;QAAZ,aAAQ,GAAR,QAAQ,CAAI;IAAG,CAAC;IAEpC;;;;;;;;;;OAUG;IACH,4BAA4B,CAAC,IAAY,EAAE,sBAA8B;QACvE,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxD,kBAAkB,CAAC,sBAAsB,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;YAE5F,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,cAAc,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;YACtF,MAAM,YAAY,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAC/E,OAAO,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,8BAA8B,EAAE,KAAc,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,+BAA+B,CAAC,SAAiB,EAAE,IAAY;QAC7D,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAClE,kBAAkB,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAExD,IAAI,SAAS,GAAG,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,qBAAqB,CAC7B,WAAW,EACX,oDAAoD,CACrD,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxE,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACxE,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,iCAAiC,EAAE,KAAc,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,qBAAqB,CAAC,SAAiB,EAAE,IAAY;QACnD,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAClE,kBAAkB,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAExD,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAW,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,uBAAuB,EAAE,KAAc,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,2BAA2B,CAAC,SAAiB,EAAE,IAAY;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,+BAA+B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE3E,OAAO;YACL,SAAS;YACT,IAAI;YACJ,YAAY;YACZ,YAAY;SACb,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,57 @@
1
+ import { TaxCalculation } from '../../types';
2
+ /**
3
+ * Calculadora especializada para impuestos (IVA, IGV, etc.)
4
+ */
5
+ export declare class TaxCalculator {
6
+ private decimales;
7
+ constructor(decimales?: number);
8
+ /**
9
+ * Calcula el valor del impuesto basado en el precio base y la tasa
10
+ * @param basePrice - Precio sin impuestos
11
+ * @param taxRate - Porcentaje del impuesto (ej: 21 para 21%)
12
+ * @returns Valor del impuesto calculado
13
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
14
+ * @example
15
+ * ```typescript
16
+ * const calculadora = new TaxCalculator();
17
+ * const valorIva = calculadora.calculateTaxAmount(100, 21); // 21
18
+ * ```
19
+ */
20
+ calculateTaxAmount(basePrice: number, taxRate: number): number;
21
+ /**
22
+ * Calcula el precio incluyendo impuestos
23
+ * @param basePrice - Precio sin impuestos
24
+ * @param taxRate - Porcentaje del impuesto
25
+ * @returns Precio total con impuestos incluidos
26
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
27
+ * @example
28
+ * ```typescript
29
+ * const precioConIva = calculadora.calculatePriceWithTax(100, 21); // 121
30
+ * ```
31
+ */
32
+ calculatePriceWithTax(basePrice: number, taxRate: number): number;
33
+ /**
34
+ * Calcula el precio base a partir de un precio que ya incluye impuestos
35
+ * @param priceWithTax - Precio que incluye impuestos
36
+ * @param taxRate - Porcentaje del impuesto aplicado
37
+ * @returns Precio base sin impuestos
38
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
39
+ * @example
40
+ * ```typescript
41
+ * const precioBase = calculadora.calculateBasePriceFromTaxIncluded(121, 21); // 100
42
+ * ```
43
+ */
44
+ calculateBasePriceFromTaxIncluded(priceWithTax: number, taxRate: number): number;
45
+ /**
46
+ * Obtiene los detalles completos del cálculo de impuestos
47
+ * @param basePrice - Precio sin impuestos
48
+ * @param taxRate - Porcentaje del impuesto
49
+ * @returns Objeto con todos los detalles del cálculo
50
+ * @example
51
+ * ```typescript
52
+ * const detalles = calculadora.getTaxCalculationDetails(100, 21);
53
+ * // { montoBase: 100, taxRate: 21, valorImpuesto: 21, montoTotal: 121 }
54
+ * ```
55
+ */
56
+ getTaxCalculationDetails(basePrice: number, taxRate: number): TaxCalculation;
57
+ }