@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.
- package/README.md +8 -0
- package/package.json +13 -15
- package/src/index.d.ts +8 -0
- package/src/index.js +9 -0
- package/src/index.js.map +1 -0
- package/src/lib/adapters/axios.adapter.d.ts +9 -0
- package/src/lib/adapters/axios.adapter.js +20 -0
- package/src/lib/adapters/axios.adapter.js.map +1 -0
- package/src/lib/adapters/fetch.adapter.d.ts +8 -0
- package/src/lib/adapters/fetch.adapter.js +31 -0
- package/src/lib/adapters/fetch.adapter.js.map +1 -0
- package/src/lib/adapters/http-client-factory.d.ts +31 -0
- package/src/lib/adapters/http-client-factory.js +40 -0
- package/src/lib/adapters/http-client-factory.js.map +1 -0
- package/src/lib/adapters/index.d.ts +3 -0
- package/src/lib/adapters/index.js +4 -0
- package/src/lib/adapters/index.js.map +1 -0
- package/src/lib/constants/constants.d.ts +20 -0
- package/src/lib/constants/constants.js +24 -0
- package/src/lib/constants/constants.js.map +1 -0
- package/src/lib/constants/index.d.ts +1 -0
- package/src/lib/constants/index.js +2 -0
- package/src/lib/constants/index.js.map +1 -0
- package/src/lib/environments/environment.d.ts +7 -0
- package/src/lib/environments/environment.js +2 -0
- package/src/lib/environments/environment.js.map +1 -0
- package/src/lib/environments/index.d.ts +1 -0
- package/src/lib/environments/index.js +2 -0
- package/src/lib/environments/index.js.map +1 -0
- package/src/lib/models/api-response.d.ts +26 -0
- package/src/lib/models/api-response.js +3 -0
- package/src/lib/models/api-response.js.map +1 -0
- package/src/lib/models/base-entity.d.ts +8 -0
- package/src/lib/models/base-entity.js +2 -0
- package/src/lib/models/base-entity.js.map +1 -0
- package/src/lib/models/filter-params.d.ts +7 -0
- package/src/lib/models/filter-params.js +2 -0
- package/src/lib/models/filter-params.js.map +1 -0
- package/src/lib/models/index.d.ts +6 -0
- package/src/lib/models/index.js +7 -0
- package/src/lib/models/index.js.map +1 -0
- package/src/lib/models/legacy-api-response.d.ts +6 -0
- package/src/lib/models/legacy-api-response.js +8 -0
- package/src/lib/models/legacy-api-response.js.map +1 -0
- package/src/lib/models/paginated-result.d.ts +10 -0
- package/src/lib/models/paginated-result.js +2 -0
- package/src/lib/models/paginated-result.js.map +1 -0
- package/src/lib/models/pagination-params.d.ts +23 -0
- package/src/lib/models/pagination-params.js +55 -0
- package/src/lib/models/pagination-params.js.map +1 -0
- package/src/lib/ports/http.port.d.ts +11 -0
- package/src/lib/ports/http.port.js +2 -0
- package/src/lib/ports/http.port.js.map +1 -0
- package/src/lib/ports/index.d.ts +1 -0
- package/src/lib/ports/index.js +2 -0
- package/src/lib/ports/index.js.map +1 -0
- package/src/lib/pricing/calculations/discount.calculator.d.ts +56 -0
- package/src/lib/pricing/calculations/discount.calculator.js +99 -0
- package/src/lib/pricing/calculations/discount.calculator.js.map +1 -0
- package/src/lib/pricing/calculations/index.d.ts +5 -0
- package/src/lib/pricing/calculations/index.js +6 -0
- package/src/lib/pricing/calculations/index.js.map +1 -0
- package/src/lib/pricing/calculations/line-item.calculator.d.ts +34 -0
- package/src/lib/pricing/calculations/line-item.calculator.js +61 -0
- package/src/lib/pricing/calculations/line-item.calculator.js.map +1 -0
- package/src/lib/pricing/calculations/pricing-calculation.error.d.ts +3 -0
- package/src/lib/pricing/calculations/pricing-calculation.error.js +7 -0
- package/src/lib/pricing/calculations/pricing-calculation.error.js.map +1 -0
- package/src/lib/pricing/calculations/pricing.calculator.d.ts +15 -0
- package/src/lib/pricing/calculations/pricing.calculator.js +24 -0
- package/src/lib/pricing/calculations/pricing.calculator.js.map +1 -0
- package/src/lib/pricing/calculations/profit.calculator.d.ts +56 -0
- package/src/lib/pricing/calculations/profit.calculator.js +102 -0
- package/src/lib/pricing/calculations/profit.calculator.js.map +1 -0
- package/src/lib/pricing/calculations/tax.calculator.d.ts +57 -0
- package/src/lib/pricing/calculations/tax.calculator.js +98 -0
- package/src/lib/pricing/calculations/tax.calculator.js.map +1 -0
- package/src/lib/pricing/index.d.ts +7 -0
- package/src/lib/pricing/index.js +8 -0
- package/src/lib/pricing/index.js.map +1 -0
- package/src/lib/types/index.d.ts +1 -0
- package/src/lib/types/index.js +2 -0
- package/src/lib/types/index.js.map +1 -0
- package/src/lib/types/pricing.types.d.ts +32 -0
- package/src/lib/types/pricing.types.js +2 -0
- package/src/lib/types/pricing.types.js.map +1 -0
- package/src/lib/value-objects/base.vo.d.ts +7 -0
- package/src/lib/value-objects/base.vo.js +14 -0
- package/src/lib/value-objects/base.vo.js.map +1 -0
- package/src/lib/value-objects/entity-id.vo.d.ts +6 -0
- package/src/lib/value-objects/entity-id.vo.js +16 -0
- package/src/lib/value-objects/entity-id.vo.js.map +1 -0
- package/src/lib/value-objects/identification-number.vo.d.ts +19 -0
- package/src/lib/value-objects/identification-number.vo.js +132 -0
- package/src/lib/value-objects/identification-number.vo.js.map +1 -0
- package/src/lib/value-objects/index.d.ts +4 -0
- package/src/lib/value-objects/index.js +5 -0
- package/src/lib/value-objects/index.js.map +1 -0
- package/src/lib/value-objects/money.vo.d.ts +12 -0
- package/src/lib/value-objects/money.vo.js +21 -0
- package/src/lib/value-objects/money.vo.js.map +1 -0
- package/index.cjs.js +0 -742
- package/index.d.ts +0 -1
- 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 @@
|
|
|
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,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
|
+
}
|