24 lines
560 B
TypeScript
24 lines
560 B
TypeScript
import { z } from "zod/v4";
|
|
|
|
const TAX_CODE_PATTERN = /^[a-z0-9_]+$/i;
|
|
const EMPTY_TAX_SLOT = "#";
|
|
|
|
export const TaxCombinationCodeSchema = z.string().refine(
|
|
(value) => {
|
|
const parts = value.split(";");
|
|
|
|
if (parts.length !== 3) {
|
|
return false;
|
|
}
|
|
|
|
return parts.every((part) => {
|
|
return part === EMPTY_TAX_SLOT || TAX_CODE_PATTERN.test(part);
|
|
});
|
|
},
|
|
{
|
|
message: "taxes must use format '<iva_code|#>;<rec_code|#>;<retention_code|#>'",
|
|
}
|
|
);
|
|
|
|
export type TaxCombinationCodeDTO = z.infer<typeof TaxCombinationCodeSchema>;
|