refactor(web): el formulario base recibe de cada pantalla los campos de cabecera, pie y línea

Todas las pantallas declaran su DocumentLayout (catálogo FIELDS): ventas y compras dejan de tener la
cabecera escrita en el HTML; el folio solo lo llevan los documentos tributarios.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-14 15:10:40 -05:00
1 parent c734dcbd0a
commit 8b0b8afc87
9 files changed
+320 -257

No files matched your search

@@ -97,19 +97,6 @@ export function linesPayload(lines: readonly GridLine[], spec: LinesSpec = MARKE
});
}
/** Errores que se pueden detectar sin preguntarle a SAP. Lista vacía = se puede guardar. */
export function validateDocument(header: DocRecord, lines: readonly GridLine[], partnerLabel: string): string[] {
const errors: string[] = [];
if (isEmpty(header['CardCode'])) errors.push(`Indique el ${partnerLabel.toLowerCase()}.`);
if (isEmpty(header['DocDate'])) errors.push('Indique la fecha de contabilización.');
const real = lines.filter((l) => !isBlankLine(l));
if (!real.length) errors.push('Agregue al menos una línea con artículo.');
real.forEach((l, i) => {
if (num(l['Quantity']) <= 0) errors.push(`Línea ${i + 1}: la cantidad debe ser mayor que cero.`);
});
return errors;
}
/** Un campo obligatorio y su nombre para el aviso. */
export interface RequiredField {
key: string;