feat(web): serie, indicador y proyecto en la cabecera; dimensiones, proyecto, cuenta, referencia base y precio con IVA en el detalle

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-16 11:07:38 -05:00
1 parent 9f003ee4bf
commit f66ef108cf
22 files changed
+698 -100

No files matched your search

@@ -0,0 +1,56 @@
import { MENU } from '@basic-erp/sap-types';
/**
* Tipo de objeto de SAP de cada documento: es el `BaseType` de las líneas copiadas y el documento
* del que se piden las series de numeración. Facturas, boletas y sus reservas son el objeto 13.
*/
export const OBJECT_TYPES: Readonly<Record<string, number>> = {
'/ventas/ofertas': 23,
'/ventas/ordenes': 17,
'/ventas/entrega': 15,
'/ventas/devoluciones': 16,
'/ventas/facturas': 13,
'/ventas/boletas': 13,
'/ventas/facturas-reserva': 13,
'/ventas/boletas-reserva': 13,
'/ventas/notas-credito': 14,
'/compras/solicitudes': 1470000113,
'/compras/ofertas': 540000006,
'/compras/ordenes': 22,
'/compras/recepcion': 20,
'/compras/devoluciones': 21,
'/compras/facturas': 18,
'/compras/notas-credito': 19,
'/inventario/entradas': 59,
'/inventario/salidas': 60,
'/inventario/transferencias': 67,
'/inventario/solicitudes-traslado': 1250000001,
};
/** Primera pantalla de cada tipo de objeto (las facturas, boletas y reservas comparten el 13). */
const PATH_OF_OBJECT: ReadonlyMap<number, string> = new Map(
Object.entries(OBJECT_TYPES)
.reverse()
.map(([path, type]) => [type, path]),
);
/** Nombre del documento de un tipo de objeto (`17` → «Órdenes de venta»), o el número si no se conoce. */
export function objectLabel(type: unknown): string {
const code = Number(type);
const path = PATH_OF_OBJECT.get(code);
return (path && MENU.flatMap((m) => m.items).find((i) => i.path === path)?.label) || (code > 0 ? String(code) : '');
}
/**
* Código de subtipo con que SAP etiqueta las series de numeración, según el `DocumentSubType` del
* documento. Solo `bod_None` (`--`) está verificado contra SBODemoCL; los demás son los del enum de SAP
* y se confirman al tener series de ese subtipo.
*/
export const SERIES_SUBTYPE: Readonly<Record<string, string>> = {
bod_None: '--',
bod_InvoiceExempt: 'IX',
bod_DebitMemo: 'DN',
bod_Bill: 'IB',
bod_ExemptBill: 'EB',
bod_ExportInvoice: 'EI',
};