feat: base de bancos (recursos de pagos recibidos y efectuados, acción Cancel, menú Bancos, tabla con ventana de selección)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-16 13:23:27 -05:00
1 parent 08977741de
commit 369be317ab
13 files changed
+304 -10

No files matched your search

+31
View File
@@ -32,4 +32,35 @@ describe('recursos del Service Layer', () => {
expect(r.write as string[], p).toContain(p);
}
});
it('los pagos recibidos y efectuados se crean y se anulan (Cancel), pero no se modifican', () => {
for (const [name, path] of [['IncomingPayments', '/bancos/pagos-recibidos'], ['VendorPayments', '/bancos/pagos-efectuados']] as const) {
const r = SL_RESOURCE_MAP.get(name)!;
expect(r.methods, name).toEqual(['GET', 'POST']);
expect(r.actions, name).toEqual(['Cancel']);
expect(r.write, name).toBe(path);
expect(r.read, name).toEqual([path]);
}
});
it('solo los pagos tienen acciones sobre un registro', () => {
expect(SL_RESOURCES.filter((r) => r.actions?.length).map((r) => r.name)).toEqual(['IncomingPayments', 'VendorPayments']);
});
it('las facturas y notas de crédito se pueden consultar desde la pantalla de pagos, sin poder modificarlas', () => {
for (const [name, pay] of [['Invoices', '/bancos/pagos-recibidos'], ['CreditNotes', '/bancos/pagos-recibidos'], ['PurchaseInvoices', '/bancos/pagos-efectuados'], ['PurchaseCreditNotes', '/bancos/pagos-efectuados']] as const) {
const r = SL_RESOURCE_MAP.get(name)!;
expect(r.read as string[], name).toContain(pay);
expect(r.write as string | string[], name).not.toContain(pay);
}
});
it('el pago de clientes no lee las facturas de proveedores ni al revés', () => {
expect(SL_RESOURCE_MAP.get('PurchaseInvoices')!.read as string[]).not.toContain('/bancos/pagos-recibidos');
expect(SL_RESOURCE_MAP.get('Invoices')!.read as string[]).not.toContain('/bancos/pagos-efectuados');
});
it('los bancos son un catálogo de solo lectura', () => {
expect(SL_RESOURCE_MAP.get('Banks')!.methods).toEqual(['GET']);
});
});