/** * Tipos del widget FinancialInstrumentPanel (FEAT-105-17) — sub-componente de * MasterDocument. * * Espejo TypeScript del read-model de Instrumento Financiero (IF) del backend * (`SupplierInvoiceFinancialInstrumentDto`, épica 105-16) más los contratos de * props del widget reutilizable. El IF es un registro netamente documental * (cheque/pagaré/letra) asociado a una Factura de Proveedor: NO contabiliza ni * emite eventos. Cardinalidad **máximo un IF activo por documento**; el borrado * es lógico (`isActive = false`). El mismo panel sirve para cualquier documento * MasterDocument inyectando sus endpoints e IO por props (precedente: * InstallmentsPanel / WithholdingsPanel). * * @see feat-105-17-instrumento-financiero-masterdocument-spec.md */ /** * Instrumento Financiero — espejo de `SupplierInvoiceFinancialInstrumentDto` * (camelCase). Tabla dedicada `core.supplier_invoice_financial_instruments`, * keyed por `documentId = document_headers.id`. */ export interface FinancialInstrumentDto { /** PK del instrumento. */ id: string; /** FK al documento (header). */ documentId: string; /** Tipo de instrumento (UUID). El nombre legible es opcional (ver GAP-2/GAP-4). */ instrumentTypeId: string; /** Número del instrumento (≤100). */ instrumentNumber: string; /** Fecha de emisión (YYYY-MM-DD). */ issueDate: string; /** Fecha de vencimiento (YYYY-MM-DD, ≥ issueDate). */ dueDate: string; /** Nombre del beneficiario (≤255). */ beneficiaryName: string; /** Monto (> 0). */ amount: number; /** Monto en moneda alterna (opcional). */ amountAlt: number | null; /** Instrumento activo (soft-delete: `false` lo desactiva). */ isActive: boolean; /** Versión de fila para concurrencia optimista. */ rowVersion: number; /** Auditoría. */ createdAt?: string; createdByUserId?: string; updatedAt?: string; updatedByUserId?: string; /** Nombre legible del tipo (FactBox y chip default). GAP-4: puede no venir. */ instrumentTypeName?: string; } /** * Forma cruda como puede llegar del backend. Números/booleanos defensivos; se * normaliza con {@link normalizeFinancialInstrument}. */ export interface RawFinancialInstrumentDto extends Partial> { id: string; documentId: string; } /** Normaliza un IF crudo del backend al DTO de UI. */ export declare function normalizeFinancialInstrument(raw: RawFinancialInstrumentDto): FinancialInstrumentDto; /** Payload del POST de creación (`CreateFinancialInstrumentDto`). */ export interface CreateFinancialInstrumentPayload { /** Tipo de instrumento (UUID, requerido). */ instrumentTypeId: string; /** Número del instrumento (requerido, ≤100). */ instrumentNumber: string; /** Fecha de emisión (requerida, YYYY-MM-DD). */ issueDate: string; /** Fecha de vencimiento (requerida, ≥ issueDate). */ dueDate: string; /** Nombre del beneficiario (requerido, ≤255). */ beneficiaryName: string; /** Monto (> 0). */ amount: number; /** Monto en moneda alterna (opcional). */ amountAlt?: number | null; } /** * Payload del PUT de modificación (`UpdateFinancialInstrumentDto`) — igual que * crear **+** `rowVersion` (requerido ≠ 0, concurrencia optimista). */ export interface UpdateFinancialInstrumentPayload extends CreateFinancialInstrumentPayload { /** Versión de fila requerida (concurrencia optimista). */ rowVersion: number; } /** * Cliente HTTP inyectado para las operaciones REST del widget. * * El kit no depende de `axios`; el documento consumidor inyecta su instancia ya * configurada (interceptores de auth/company) envuelta en esta firma. Debe * rechazar con un error que exponga `status` (número HTTP) para que el widget * distinga 409 (concurrencia) / 422 (negocio) / 403 (sin permiso) / 404. */ export type FinancialInstrumentHttpRequest = (method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, body?: unknown) => Promise; /** Error normalizado que el widget interpreta para el manejo de UI. */ export interface FinancialInstrumentHttpError extends Error { status?: number; /** `ProblemDetails.detail` ya traducido por `Accept-Language` (si llega). */ detail?: string; } /** Opción de tipo de instrumento para el `Select` del campo tipo. */ export interface InstrumentTypeOption { id: string; name: string; } /** * Loaders de catálogo inyectados (decoplan el widget del transporte/rutas * concretas, que son específicos del host). * * GAP-2: el catálogo de tipos de instrumento aún NO existe en Core. Mientras no * exista, se omite `catalogs`: el campo tipo cae a chip read-only con el default * de la condición de pago (o "—"). */ export interface FinancialInstrumentCatalogs { /** Lista de tipos de instrumento activos. */ loadInstrumentTypes: () => Promise; } /** * Props del panel principal `FinancialInstrumentPanel`. * * El widget es agnóstico del documento: recibe sus endpoints e IO por props, * lo que permite montarlo en cualquier MasterDocument. */ export interface FinancialInstrumentPanelProps { /** UUID del documento (PK de `document_headers.id`), no el número legible. */ documentId: string; /** * `true` solo cuando el documento es editable (DRAFT). Cuando es `false`, el * formulario es read-only y los botones Guardar/Eliminar se eliminan del DOM. */ isEditable: boolean; /** * `true` si el usuario tiene `capture_financial_instrument`. Gatea * Guardar (crear/editar) y Eliminar. */ canCapture: boolean; /** * `true` si el usuario tiene `change_default_financial_instrument`. Con él, el * tipo es un `Select`; sin él, queda fijo en el default y se muestra como chip * read-only (FR-84 / 105-17.02). */ canChangeDefaultType: boolean; /** * Endpoint GET del IF activo (BRECHA GAP-1 — el BE aún no lo expone). Si se * omite, el formulario solo se puebla con `initialInstrument` y con las * respuestas de las mutaciones (no puede arrancar en modo edición tras recarga). */ financialInstrumentEndpoint?: string; /** * Endpoint base de child: `/{id}/financial-instrument`. El POST va a la base; * el widget añade `/{fiId}` para PUT/DELETE. */ financialInstrumentBaseEndpoint: string; /** Cliente HTTP inyectado para las operaciones REST. */ httpRequest: FinancialInstrumentHttpRequest; /** Loaders de catálogo de tipos (opcional — GAP-2). */ catalogs?: FinancialInstrumentCatalogs; /** * Tipo de instrumento default sugerido por la condición de pago (GAP-3). Se usa * para pre-poblar el campo tipo al crear y para el chip read-only. */ defaultInstrumentTypeId?: string; /** Nombre del tipo default (GAP-3/GAP-4) para el chip read-only. */ defaultInstrumentTypeName?: string; /** * Datos iniciales (opcional). Útil cuando la carga proviene de la sección * FactBox (`dataSource: 'adapter'`) en vez de un GET dedicado. */ initialInstrument?: FinancialInstrumentDto | null; /** Clases CSS adicionales para el contenedor raíz. */ className?: string; } //# sourceMappingURL=types.d.ts.map