@acontplus/core 1.0.6 → 1.0.8

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 +9 -11
  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,98 @@
1
+ import { DecimalConverter, ParameterValidator } from '@acontplus/utils';
2
+ import { PricingCalculationError } from './pricing-calculation.error';
3
+ /**
4
+ * Calculadora especializada para impuestos (IVA, IGV, etc.)
5
+ */
6
+ export class TaxCalculator {
7
+ constructor(decimales = 4) {
8
+ this.decimales = decimales;
9
+ }
10
+ /**
11
+ * Calcula el valor del impuesto basado en el precio base y la tasa
12
+ * @param basePrice - Precio sin impuestos
13
+ * @param taxRate - Porcentaje del impuesto (ej: 21 para 21%)
14
+ * @returns Valor del impuesto calculado
15
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
16
+ * @example
17
+ * ```typescript
18
+ * const calculadora = new TaxCalculator();
19
+ * const valorIva = calculadora.calculateTaxAmount(100, 21); // 21
20
+ * ```
21
+ */
22
+ calculateTaxAmount(basePrice, taxRate) {
23
+ try {
24
+ ParameterValidator.validatePositiveNumber(basePrice, 'basePrice');
25
+ ParameterValidator.validatePositiveNumber(taxRate, 'taxRate');
26
+ const multiplicador = DecimalConverter.multiplyAsNumber(basePrice, taxRate);
27
+ return DecimalConverter.divideAsNumber(multiplicador, 100);
28
+ }
29
+ catch (error) {
30
+ throw new PricingCalculationError('calculateTaxAmount', error);
31
+ }
32
+ }
33
+ /**
34
+ * Calcula el precio incluyendo impuestos
35
+ * @param basePrice - Precio sin impuestos
36
+ * @param taxRate - Porcentaje del impuesto
37
+ * @returns Precio total con impuestos incluidos
38
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
39
+ * @example
40
+ * ```typescript
41
+ * const precioConIva = calculadora.calculatePriceWithTax(100, 21); // 121
42
+ * ```
43
+ */
44
+ calculatePriceWithTax(basePrice, taxRate) {
45
+ try {
46
+ const taxAmount = this.calculateTaxAmount(basePrice, taxRate);
47
+ return DecimalConverter.addAsNumber(basePrice, taxAmount);
48
+ }
49
+ catch (error) {
50
+ throw new PricingCalculationError('calculatePriceWithTax', error);
51
+ }
52
+ }
53
+ /**
54
+ * Calcula el precio base a partir de un precio que ya incluye impuestos
55
+ * @param priceWithTax - Precio que incluye impuestos
56
+ * @param taxRate - Porcentaje del impuesto aplicado
57
+ * @returns Precio base sin impuestos
58
+ * @throws {PricingCalculationError} Si ocurre un error en el cálculo
59
+ * @example
60
+ * ```typescript
61
+ * const precioBase = calculadora.calculateBasePriceFromTaxIncluded(121, 21); // 100
62
+ * ```
63
+ */
64
+ calculateBasePriceFromTaxIncluded(priceWithTax, taxRate) {
65
+ try {
66
+ ParameterValidator.validatePositiveNumber(priceWithTax, 'priceWithTax');
67
+ ParameterValidator.validatePositiveNumber(taxRate, 'taxRate');
68
+ const taxMultiplier = DecimalConverter.divideAsNumber(taxRate, 100);
69
+ const divisor = DecimalConverter.addAsNumber(1, taxMultiplier);
70
+ return DecimalConverter.divideAsNumber(priceWithTax, divisor);
71
+ }
72
+ catch (error) {
73
+ throw new PricingCalculationError('calculateBasePriceFromTaxIncluded', error);
74
+ }
75
+ }
76
+ /**
77
+ * Obtiene los detalles completos del cálculo de impuestos
78
+ * @param basePrice - Precio sin impuestos
79
+ * @param taxRate - Porcentaje del impuesto
80
+ * @returns Objeto con todos los detalles del cálculo
81
+ * @example
82
+ * ```typescript
83
+ * const detalles = calculadora.getTaxCalculationDetails(100, 21);
84
+ * // { montoBase: 100, taxRate: 21, valorImpuesto: 21, montoTotal: 121 }
85
+ * ```
86
+ */
87
+ getTaxCalculationDetails(basePrice, taxRate) {
88
+ const taxAmount = this.calculateTaxAmount(basePrice, taxRate);
89
+ const totalAmount = this.calculatePriceWithTax(basePrice, taxRate);
90
+ return {
91
+ baseAmount: basePrice,
92
+ taxRate,
93
+ taxAmount,
94
+ totalAmount,
95
+ };
96
+ }
97
+ }
98
+ //# sourceMappingURL=tax.calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tax.calculator.js","sourceRoot":"","sources":["../../../../../../../packages/core/src/lib/pricing/calculations/tax.calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE;;GAEG;AACH,MAAM,OAAO,aAAa;IACxB,YAAoB,YAAY,CAAC;QAAb,cAAS,GAAT,SAAS,CAAI;IAAG,CAAC;IAErC;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,SAAiB,EAAE,OAAe;QACnD,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAClE,kBAAkB,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAE9D,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC5E,OAAO,gBAAgB,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,oBAAoB,EAAE,KAAc,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,qBAAqB,CAAC,SAAiB,EAAE,OAAe;QACtD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,uBAAuB,EAAE,KAAc,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,iCAAiC,CAAC,YAAoB,EAAE,OAAe;QACrE,IAAI,CAAC;YACH,kBAAkB,CAAC,sBAAsB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACxE,kBAAkB,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAE9D,MAAM,aAAa,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAC/D,OAAO,gBAAgB,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,uBAAuB,CAAC,mCAAmC,EAAE,KAAc,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,wBAAwB,CAAC,SAAiB,EAAE,OAAe;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEnE,OAAO;YACL,UAAU,EAAE,SAAS;YACrB,OAAO;YACP,SAAS;YACT,WAAW;SACZ,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export { PricingCalculator } from './calculations/pricing.calculator';
2
+ export * from './calculations/tax.calculator';
3
+ export * from './calculations/discount.calculator';
4
+ export * from './calculations/profit.calculator';
5
+ export * from './calculations/line-item.calculator';
6
+ export * from '../types/pricing.types';
7
+ export * from './calculations';
@@ -0,0 +1,8 @@
1
+ export { PricingCalculator } from './calculations/pricing.calculator';
2
+ export * from './calculations/tax.calculator';
3
+ export * from './calculations/discount.calculator';
4
+ export * from './calculations/profit.calculator';
5
+ export * from './calculations/line-item.calculator';
6
+ export * from '../types/pricing.types';
7
+ export * from './calculations';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/pricing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './pricing.types';
@@ -0,0 +1,2 @@
1
+ export * from './pricing.types';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,32 @@
1
+ export interface PricingConfig {
2
+ defaultDecimals?: number;
3
+ roundingMode?: 'round' | 'ceil' | 'floor';
4
+ errorHandling?: 'throw' | 'return-null' | 'return-default';
5
+ }
6
+ export interface TaxCalculation {
7
+ baseAmount: number;
8
+ taxRate: number;
9
+ taxAmount: number;
10
+ totalAmount: number;
11
+ }
12
+ export interface DiscountCalculation {
13
+ originalPrice: number;
14
+ discountRate: number;
15
+ discountAmount: number;
16
+ finalPrice: number;
17
+ }
18
+ export interface ProfitMarginCalculation {
19
+ salePrice: number;
20
+ cost: number;
21
+ profitAmount: number;
22
+ profitMargin: number;
23
+ }
24
+ export interface LineItemCalculation {
25
+ unitPrice: number;
26
+ quantity: number;
27
+ subtotal: number;
28
+ discountAmount: number;
29
+ subtotalAfterDiscount: number;
30
+ taxAmount: number;
31
+ total: number;
32
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pricing.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.types.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/types/pricing.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export declare abstract class BaseVo<T> {
2
+ protected readonly value: T;
3
+ protected constructor(value: T);
4
+ protected abstract validate(value: T): void;
5
+ getValue(): T;
6
+ equals(other: BaseVo<T>): boolean;
7
+ }
@@ -0,0 +1,14 @@
1
+ // src/domain/value-objects/base.vo.ts
2
+ export class BaseVo {
3
+ constructor(value) {
4
+ this.value = value;
5
+ this.validate(value);
6
+ }
7
+ getValue() {
8
+ return this.value;
9
+ }
10
+ equals(other) {
11
+ return JSON.stringify(this.value) === JSON.stringify(other.value);
12
+ }
13
+ }
14
+ //# sourceMappingURL=base.vo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.vo.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/value-objects/base.vo.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,MAAM,OAAgB,MAAM;IAC1B,YAAyC,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;QAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAID,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,KAAgB;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { BaseVo } from './base.vo';
2
+ export declare class EntityIdVo extends BaseVo<string> {
3
+ constructor(value: string);
4
+ static generate(): EntityIdVo;
5
+ protected validate(value: string): void;
6
+ }
@@ -0,0 +1,16 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { BaseVo } from './base.vo';
3
+ export class EntityIdVo extends BaseVo {
4
+ constructor(value) {
5
+ super(value);
6
+ }
7
+ static generate() {
8
+ return new EntityIdVo(uuidv4());
9
+ }
10
+ validate(value) {
11
+ if (!value || value.trim().length === 0) {
12
+ throw new Error('EntityIdVo cannot be empty');
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=entity-id.vo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-id.vo.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/value-objects/entity-id.vo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,OAAO,UAAW,SAAQ,MAAc;IAC5C,YAAY,KAAa;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED,MAAM,CAAC,QAAQ;QACb,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAES,QAAQ,CAAC,KAAa;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { SRI_DOCUMENT_TYPE } from '../constants';
2
+ import { BaseVo } from './base.vo';
3
+ export declare class IdentificationNumberVo extends BaseVo<string> {
4
+ private readonly id;
5
+ private readonly type;
6
+ constructor(id: string);
7
+ private determineType;
8
+ validate(): boolean;
9
+ private isValidCedulaAlgorithm;
10
+ private isValidRucAlgorithm;
11
+ private isValidSociedadRuc;
12
+ private static validateCedula;
13
+ isValidCedula(): boolean;
14
+ isValidRuc(): boolean;
15
+ getId(): string;
16
+ getType(): SRI_DOCUMENT_TYPE;
17
+ static tryCreate(id: string): boolean;
18
+ getRucType(): string | null;
19
+ }
@@ -0,0 +1,132 @@
1
+ import { SRI_DOCUMENT_TYPE } from '../constants';
2
+ import { BaseVo } from './base.vo';
3
+ export class IdentificationNumberVo extends BaseVo {
4
+ constructor(id) {
5
+ super(id);
6
+ this.id = id?.trim() || '';
7
+ this.type = this.determineType();
8
+ if (!this.validate()) {
9
+ throw new Error(`Número de identificación inválido: ${this.id}`);
10
+ }
11
+ }
12
+ determineType() {
13
+ if (this.id.length === 10)
14
+ return SRI_DOCUMENT_TYPE.CEDULA;
15
+ if (this.id.length === 13)
16
+ return SRI_DOCUMENT_TYPE.RUC;
17
+ throw new Error('Número de identificación debe tener 10 o 13 dígitos');
18
+ }
19
+ validate() {
20
+ if (this.type === SRI_DOCUMENT_TYPE.CEDULA) {
21
+ return this.isValidCedulaAlgorithm();
22
+ }
23
+ if (this.type === SRI_DOCUMENT_TYPE.RUC) {
24
+ return this.isValidRucAlgorithm();
25
+ }
26
+ return false;
27
+ }
28
+ // Validación completa de cédula ecuatoriana con algoritmo
29
+ isValidCedulaAlgorithm() {
30
+ if (!/^\d{10}$/.test(this.id))
31
+ return false;
32
+ // Verificar que los primeros 2 dígitos sean una provincia válida (01-24)
33
+ const provincia = parseInt(this.id.substring(0, 2));
34
+ if (provincia < 1 || provincia > 24)
35
+ return false;
36
+ // Algoritmo de validación del dígito verificador
37
+ const coeficientes = [2, 1, 2, 1, 2, 1, 2, 1, 2];
38
+ let suma = 0;
39
+ for (let i = 0; i < 9; i++) {
40
+ const valor = parseInt(this.id.charAt(i)) * coeficientes[i];
41
+ suma += valor > 9 ? valor - 9 : valor;
42
+ }
43
+ const digitoVerificador = suma % 10 === 0 ? 0 : 10 - (suma % 10);
44
+ return digitoVerificador === parseInt(this.id.charAt(9));
45
+ }
46
+ // Validación de RUC más flexible
47
+ isValidRucAlgorithm() {
48
+ if (!/^\d{13}$/.test(this.id))
49
+ return false;
50
+ // Los primeros 10 dígitos deben ser una cédula válida para personas naturales
51
+ // o seguir reglas específicas para sociedades
52
+ const tercerDigito = parseInt(this.id.charAt(2));
53
+ // RUC de persona natural (tercer dígito < 6)
54
+ if (tercerDigito < 6) {
55
+ const cedula = this.id.substring(0, 10);
56
+ const tempCedula = IdentificationNumberVo.validateCedula(cedula);
57
+ return tempCedula && this.id.endsWith('001');
58
+ }
59
+ // RUC de sociedad privada (tercer dígito = 9)
60
+ if (tercerDigito === 9) {
61
+ return this.isValidSociedadRuc();
62
+ }
63
+ // RUC de entidad pública (tercer dígito = 6)
64
+ if (tercerDigito === 6) {
65
+ return this.id.endsWith('0001');
66
+ }
67
+ return false;
68
+ }
69
+ isValidSociedadRuc() {
70
+ const coeficientes = [4, 3, 2, 7, 6, 5, 4, 3, 2];
71
+ let suma = 0;
72
+ for (let i = 0; i < 9; i++) {
73
+ suma += parseInt(this.id.charAt(i)) * coeficientes[i];
74
+ }
75
+ const residuo = suma % 11;
76
+ const digitoVerificador = residuo === 0 ? 0 : 11 - residuo;
77
+ return digitoVerificador === parseInt(this.id.charAt(9)) && this.id.endsWith('001');
78
+ }
79
+ // Método auxiliar estático para validar cédula sin crear instancia
80
+ static validateCedula(cedula) {
81
+ if (!/^\d{10}$/.test(cedula))
82
+ return false;
83
+ const provincia = parseInt(cedula.substring(0, 2));
84
+ if (provincia < 1 || provincia > 24)
85
+ return false;
86
+ const coeficientes = [2, 1, 2, 1, 2, 1, 2, 1, 2];
87
+ let suma = 0;
88
+ for (let i = 0; i < 9; i++) {
89
+ const valor = parseInt(cedula.charAt(i)) * coeficientes[i];
90
+ suma += valor > 9 ? valor - 9 : valor;
91
+ }
92
+ const digitoVerificador = suma % 10 === 0 ? 0 : 10 - (suma % 10);
93
+ return digitoVerificador === parseInt(cedula.charAt(9));
94
+ }
95
+ // Métodos públicos mejorados
96
+ isValidCedula() {
97
+ return this.type === SRI_DOCUMENT_TYPE.CEDULA && this.isValidCedulaAlgorithm();
98
+ }
99
+ isValidRuc() {
100
+ return this.type === SRI_DOCUMENT_TYPE.RUC && this.isValidRucAlgorithm();
101
+ }
102
+ getId() {
103
+ return this.id;
104
+ }
105
+ getType() {
106
+ return this.type;
107
+ }
108
+ // Método estático mejorado
109
+ static tryCreate(id) {
110
+ try {
111
+ new IdentificationNumberVo(id);
112
+ return true;
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ // Método adicional para obtener información del tipo de RUC
119
+ getRucType() {
120
+ if (this.type !== SRI_DOCUMENT_TYPE.RUC)
121
+ return null;
122
+ const tercerDigito = parseInt(this.id.charAt(2));
123
+ if (tercerDigito < 6)
124
+ return 'Persona Natural';
125
+ if (tercerDigito === 6)
126
+ return 'Entidad Pública';
127
+ if (tercerDigito === 9)
128
+ return 'Sociedad Privada';
129
+ return 'Desconocido';
130
+ }
131
+ }
132
+ //# sourceMappingURL=identification-number.vo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identification-number.vo.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/value-objects/identification-number.vo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './base.vo';
2
+ export * from './entity-id.vo';
3
+ export * from './money.vo';
4
+ export * from './identification-number.vo';
@@ -0,0 +1,5 @@
1
+ export * from './base.vo';
2
+ export * from './entity-id.vo';
3
+ export * from './money.vo';
4
+ export * from './identification-number.vo';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/value-objects/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { BaseVo } from './base.vo';
2
+ export declare class MoneyVo extends BaseVo<{
3
+ amount: number;
4
+ currency: string;
5
+ }> {
6
+ constructor(amount: number, currency?: string);
7
+ protected validate(value: {
8
+ amount: number;
9
+ currency: string;
10
+ }): void;
11
+ add(other: MoneyVo): MoneyVo;
12
+ }
@@ -0,0 +1,21 @@
1
+ // src/domain/value-objects/money.vo.ts
2
+ import { BaseVo } from './base.vo';
3
+ export class MoneyVo extends BaseVo {
4
+ constructor(amount, currency = 'USD') {
5
+ super({ amount, currency });
6
+ }
7
+ validate(value) {
8
+ if (value.amount < 0)
9
+ throw new Error('Amount cannot be negative');
10
+ if (!value.currency || value.currency.length !== 3) {
11
+ throw new Error('Invalid currency code');
12
+ }
13
+ }
14
+ add(other) {
15
+ if (this.value.currency !== other.value.currency) {
16
+ throw new Error('Cannot add different currencies');
17
+ }
18
+ return new MoneyVo(this.value.amount + other.value.amount, this.value.currency);
19
+ }
20
+ }
21
+ //# sourceMappingURL=money.vo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money.vo.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/value-objects/money.vo.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,OAAO,OAAQ,SAAQ,MAA4C;IACvE,YAAY,MAAc,EAAE,QAAQ,GAAG,KAAK;QAC1C,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9B,CAAC;IAES,QAAQ,CAAC,KAA2C;QAC5D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,KAAc;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClF,CAAC;CACF"}