From 678f91ecdc0c1de5401d31cfe30e8dd745226aef Mon Sep 17 00:00:00 2001 From: hreyes Date: Thu, 12 Mar 2026 12:54:33 -0600 Subject: [PATCH] feature/checkpoin-before-table --- frontend/src/lib/api/dashboard/a76/items.ts | 6 + .../edit/items/fa/item-sheet-fa.svelte | 165 +++++++++++++----- .../edit/items/fa/tab-continuation.svelte | 54 +++++- .../src/lib/config/invoice-item-visibility.ts | 95 +++++++++- 4 files changed, 271 insertions(+), 49 deletions(-) diff --git a/frontend/src/lib/api/dashboard/a76/items.ts b/frontend/src/lib/api/dashboard/a76/items.ts index c1ac4cbb..1d986317 100644 --- a/frontend/src/lib/api/dashboard/a76/items.ts +++ b/frontend/src/lib/api/dashboard/a76/items.ts @@ -161,6 +161,7 @@ export interface Item { fcc_key?: string; has_certificate?: boolean; certificate_number?: string; + certificate_end_date?: string; octave_permit?: string; // Flags @@ -174,6 +175,11 @@ export interface Item { igi_payment_method?: string; igi_amount?: number; + // Export valuation (Met Valor, Valor Det., Motivo De Uso) + valuation_method?: string; + valuation_determined_value?: number; + valuation_reason?: string; + // Additional notes wildcard_field?: string; diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte index d645d531..e5230066 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte @@ -72,6 +72,24 @@ return visibility.showCrTrackingHeader; }); + /** Show link-to-import block for import (CR tracking) or for export when showExportLinkToImportBlock. */ + const showLinkToImportBlock = $derived.by(() => { + const normalizedOperationType = operationType ?? invoice?.operation_type; + if (normalizedOperationType === 1 || normalizedOperationType === 'exp') { + return visibility.showExportLinkToImportBlock; + } + return visibility.showCrTrackingHeader; + }); + const isExport = $derived.by(() => { + const op = operationType ?? invoice?.operation_type; + return op === 1 || op === 'exp'; + }); + /** Show repair-import block (Factura de Expo / Línea de Expo) for REP/REPAR. */ + const showRepairBlock = $derived.by(() => { + const op = operationType ?? invoice?.operation_type; + if (op === 1 || op === 'exp') return false; + return visibility.showRepairLinkToExportBlock; + }); const visibleTabs = $derived.by(() => [ { value: 'generales', label: 'General', visible: true }, { value: 'continuacion', label: 'Continuación', visible: true }, @@ -117,52 +135,117 @@
{#if line} - {#if showCrTrackingBlock} -
-
-
+ {/if}
\ No newline at end of file diff --git a/frontend/src/lib/config/invoice-item-visibility.ts b/frontend/src/lib/config/invoice-item-visibility.ts index 2720f168..f0ce0a22 100644 --- a/frontend/src/lib/config/invoice-item-visibility.ts +++ b/frontend/src/lib/config/invoice-item-visibility.ts @@ -1,9 +1,36 @@ +/** Export invoice types that affect item visibility (tipo factura for operation_type === exp). */ +export type ExportInvoiceType = 'NODES' | 'AFIJO' | 'DONAC' | 'SCRAP'; + export interface InvoiceItemVisibility { showCrTrackingHeader: boolean; showEighthRule: boolean; showFdaFcc: boolean; showCertificateOfOrigin: boolean; showIdentifiersTab: boolean; + /** Show block: Genera Descarga? + Tipo Importación + Tipo Búsqueda + Factura de Impo + Línea (expo, or import CR). */ + showExportLinkToImportBlock: boolean; + /** Show Met Valor, Valor Det., Motivo De Uso in Continuación tab (expo). */ + showExportValuationFields: boolean; + /** Show Met Valor, Valor Det., Motivo De Uso for import (e.g. Cambio de Régimen). */ + showValuationFields: boolean; + /** Show block: Genera Descarga? + Factura de Expo + Línea de Expo (importación reparación, REP). */ + showRepairLinkToExportBlock: boolean; + /** Continuación tab: TAX PAID + Forma Pago. */ + showContinuationTaxPayment: boolean; + /** Continuación tab: IGI Amount + IGI Payment Method. */ + showContinuationIgi: boolean; + /** Continuación tab: Machinery and equipment location. */ + showContinuationLocation: boolean; + /** Continuación tab: Military Equipment checkbox. */ + showContinuationMilitary: boolean; + /** Continuación tab: Own Equipment + Omit Annex 31. */ + showContinuationOwnOmitAnnex: boolean; + /** Continuación tab: Lot + Entry No. */ + showContinuationLotEntry: boolean; + /** Continuación tab: Consider in A31. */ + showContinuationConsiderA31: boolean; + /** Continuación tab: Extra Description in Spanish. */ + showContinuationExtraDescription: boolean; } const defaultVisibility: InvoiceItemVisibility = { @@ -11,7 +38,19 @@ const defaultVisibility: InvoiceItemVisibility = { showEighthRule: true, showFdaFcc: true, showCertificateOfOrigin: true, - showIdentifiersTab: true + showIdentifiersTab: true, + showExportLinkToImportBlock: false, + showExportValuationFields: false, + showValuationFields: false, + showRepairLinkToExportBlock: false, + showContinuationTaxPayment: true, + showContinuationIgi: true, + showContinuationLocation: true, + showContinuationMilitary: true, + showContinuationOwnOmitAnnex: true, + showContinuationLotEntry: true, + showContinuationConsiderA31: true, + showContinuationExtraDescription: true }; function normalizeInvoiceType(invoiceType?: string | null): string { @@ -45,12 +84,40 @@ function normalizeOperationType(operationType?: string | number | null): 'imp' | return null; } +const EXPORT_INVOICE_TYPES: ExportInvoiceType[] = ['NODES', 'AFIJO', 'DONAC', 'SCRAP']; + +function normalizeExportInvoiceType(exportInvoiceType?: string | null): ExportInvoiceType { + const normalized = String(exportInvoiceType || '') + .trim() + .toUpperCase(); + if (EXPORT_INVOICE_TYPES.includes(normalized as ExportInvoiceType)) { + return normalized as ExportInvoiceType; + } + return 'AFIJO'; +} + export function getVisibility( invoiceType?: string | null, operationType?: string | number | null ): InvoiceItemVisibility { if (normalizeOperationType(operationType) === 'exp') { - return defaultVisibility; + const exportType = normalizeExportInvoiceType(invoiceType); + // Base visibility for export: existing flags stay true; export-only flags set by type. + const expVisibility: InvoiceItemVisibility = { + ...defaultVisibility, + showExportLinkToImportBlock: true, + showExportValuationFields: true + }; + // Per-type overrides can be added here (e.g. hide valuation for SCRAP). + switch (exportType) { + case 'NODES': + case 'AFIJO': + case 'DONAC': + case 'SCRAP': + return expVisibility; + default: + return expVisibility; + } } switch (normalizeInvoiceType(invoiceType)) { @@ -65,7 +132,29 @@ export function getVisibility( case 'CR': return { ...defaultVisibility, - showEighthRule: false + showEighthRule: false, + showValuationFields: true + }; + + case 'REP': + case 'REPAR': + // Continuación: solo campos de la captura (sin Valoración, FDA/FCC, Regla Octava, Own/Omit, Lote/Entrada, Consider A31) + return { + ...defaultVisibility, + showCrTrackingHeader: false, + showRepairLinkToExportBlock: true, + showValuationFields: false, + showFdaFcc: false, + showCertificateOfOrigin: true, + showEighthRule: false, + showContinuationTaxPayment: true, + showContinuationIgi: true, + showContinuationLocation: true, + showContinuationMilitary: true, + showContinuationOwnOmitAnnex: false, + showContinuationLotEntry: false, + showContinuationConsiderA31: false, + showContinuationExtraDescription: true }; case 'MEX':