FactuGES_ERP/modules/customers/src/api/application/mappers/tax-definition-to-tax.mapper.ts
2026-06-25 13:49:59 +02:00

45 lines
1.2 KiB
TypeScript

import type { TaxDefinitionPublicFamily, TaxDefinitionPublicModel } from "@erp/catalogs/api";
import { Tax, type TaxGroup, TaxPercentage } from "@erp/core/api";
import { Result } from "@repo/rdx-utils";
/**
* Sirve para mapear TaxDefinitionPublicModel a Tax,
* que es el modelo de dominio que se para proforma e issued-invoices.
*/
export class TaxDefinitionToTaxMapper {
public toTax(taxDefinition: TaxDefinitionPublicModel): Result<Tax> {
const group = this.toTaxGroup(taxDefinition.taxFamily);
if (group.isFailure) {
return Result.fail(group.error);
}
return Tax.create({
code: taxDefinition.code,
name: taxDefinition.name,
rate: TaxPercentage.create({
value: taxDefinition.rate.value,
}).data,
group: group.data,
calculationBehavior: taxDefinition.calculationBehavior,
});
}
private toTaxGroup(taxFamily: TaxDefinitionPublicFamily): Result<TaxGroup> {
switch (taxFamily) {
case "iva":
case "igic":
case "ipsi":
case "retention":
return Result.ok(taxFamily);
case "surcharge":
return Result.ok("surcharge");
default:
return Result.fail(new Error(`Unsupported tax family: ${String(taxFamily)}`));
}
}
}