Files
Investidor-V2/resources/js/lib/iva-diagnostics.ts
T

27 lines
1.4 KiB
TypeScript

export type IvaIssue = {
category: 'missing_field' | 'invalid_value' | 'out_of_scope' | 'period_unavailable' | 'system_configuration';
field: string | null;
label: string;
received: unknown;
expected: string;
message: string;
};
export type IvaDiagnostic = {
label: string;
rule_version: number;
validity: { start: string; end: string | null };
source: { title?: string; diploma?: string; article?: string; url?: string };
issues: IvaIssue[];
};
export const ivaIssueCategories = {
missing_field: 'Campo em falta', invalid_value: 'Valor inválido', out_of_scope: 'Fora do âmbito',
period_unavailable: 'Regra indisponível para o período', system_configuration: 'Configuração do sistema',
};
export function ivaReceived(value: unknown): string {
const labels: Record<string, string> = { domestic: 'Operação interna', internal_general_net: 'Operação interna à taxa geral, sobre base líquida', import: 'Importação', export: 'Exportação', refund: 'Reembolso', unknown: 'Não sei', non_resident: 'Operação com não residente', other: 'Outra operação' };
return typeof value === 'string' && value !== '' ? (labels[value] ?? value) : 'Não recebido';
}
export function ivaIssueText(issue: IvaIssue): string {
return `${issue.label}: ${ivaIssueCategories[issue.category]}. Recebido: ${ivaReceived(issue.received)}. Esperado: ${issue.expected}. ${issue.message}`;
}