diff --git a/backend/api/v1/modules/a76/csv_templates/__init__.py b/backend/api/v1/modules/a76/csv_templates/__init__.py new file mode 100644 index 00000000..0bb939f9 --- /dev/null +++ b/backend/api/v1/modules/a76/csv_templates/__init__.py @@ -0,0 +1 @@ +# CSV templates: generate CSV from code (no physical XLS/XLSX files) diff --git a/backend/api/v1/modules/a76/csv_templates/registry.py b/backend/api/v1/modules/a76/csv_templates/registry.py new file mode 100644 index 00000000..e6486244 --- /dev/null +++ b/backend/api/v1/modules/a76/csv_templates/registry.py @@ -0,0 +1,147 @@ +""" +Registro central de plantillas CSV: template_id -> lista de cabeceras canónicas. +Construido a partir de los TEMPLATE_COLUMNS de cada módulo de imports. +""" +import csv +import io +from typing import Dict, List, Optional + +# Importar configs de cada módulo +from api.v1.modules.a76.imports.template_config import ( + TEMPLATE_COLUMNS as IMPORTS_TEMPLATE_COLUMNS, + _resolve_template_columns as resolve_imports_template, +) +from api.v1.modules.a76.parts.imports.template_config import TEMPLATE_COLUMNS as PARTS_TEMPLATE_COLUMNS +from api.v1.modules.a76.boms.imports.template_config import TEMPLATE_COLUMNS as BOMS_TEMPLATE_COLUMNS +from api.v1.modules.a76.classes.imports.template_config import TEMPLATE_COLUMNS as CLASSES_TEMPLATE_COLUMNS +from api.v1.modules.a76.customs_brokers.imports.template_config import ( + TEMPLATE_COLUMNS as CUSTOMS_BROKERS_TEMPLATE_COLUMNS, +) +from api.v1.modules.a76.clients_and_providers.imports.template_config import ( + TEMPLATE_COLUMNS as CLIENTS_PROVIDERS_TEMPLATE_COLUMNS, +) +from api.v1.modules.a76.general_catalogs.exchange_rate.imports.template_config import ( + TEMPLATE_COLUMNS as EXCHANGE_RATE_TEMPLATE_COLUMNS, +) +from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.imports.template_config import ( + TEMPLATE_COLUMNS as US_TARIFF_FRACTIONS_TEMPLATE_COLUMNS, +) +from api.v1.modules.a76.pedmientos.imports.template_config import ( + TEMPLATE_COLUMNS as PEDIMENTOS_TEMPLATE_COLUMNS, +) +from api.v1.modules.a76.transportation.vehicles.imports.template_config import ( + TEMPLATE_COLUMNS as VEHICLES_TEMPLATE_COLUMNS, +) +from api.v1.modules.a76.transportation.drivers.imports.template_config import ( + TEMPLATE_COLUMNS as DRIVERS_TEMPLATE_COLUMNS, +) +from api.v1.modules.a76.transportation.trailers.imports.template_config import ( + TEMPLATE_COLUMNS as TRAILERS_TEMPLATE_COLUMNS, +) + + +def _canonicals_from_columns(cols: Optional[List[Dict]]) -> List[str]: + """Extrae la lista de nombres canónicos en orden a partir de una lista de columnas.""" + if not cols: + return [] + return [item["canonical"] for item in cols] + + +def _build_registry() -> Dict[str, List[str]]: + registry: Dict[str, List[str]] = {} + + # a76/imports (facturas): imp_temp_header, imp_temp_details, imp_def_*, exp_def_* + for tid in ("imp_temp_header", "imp_temp_details", "imp_def_header", "imp_def_details", "exp_def_header", "exp_def_details"): + cols = resolve_imports_template(tid) + registry[tid] = _canonicals_from_columns(cols) + + # part_numbers (parts); "items" usa la misma plantilla + part_cols = PARTS_TEMPLATE_COLUMNS.get("part_numbers") + registry["part_numbers"] = _canonicals_from_columns(part_cols) + registry["items"] = _canonicals_from_columns(part_cols) + + # boms + registry["boms"] = _canonicals_from_columns(BOMS_TEMPLATE_COLUMNS.get("boms")) + + # material_classes + registry["material_classes"] = _canonicals_from_columns(CLASSES_TEMPLATE_COLUMNS.get("material_classes")) + + # customs_brokers + registry["customs_brokers"] = _canonicals_from_columns(CUSTOMS_BROKERS_TEMPLATE_COLUMNS.get("customs_brokers")) + + # clients_providers + registry["clients_providers"] = _canonicals_from_columns(CLIENTS_PROVIDERS_TEMPLATE_COLUMNS.get("client_providers")) + + # exchange_rates + registry["exchange_rates"] = _canonicals_from_columns(EXCHANGE_RATE_TEMPLATE_COLUMNS.get("exchange_rates")) + + # american_fractions + registry["american_fractions"] = _canonicals_from_columns( + US_TARIFF_FRACTIONS_TEMPLATE_COLUMNS.get("us_tariff_fractions") + ) + + # pedimentos + registry["pedimentos"] = _canonicals_from_columns(PEDIMENTOS_TEMPLATE_COLUMNS.get("pedimentos")) + + # transports (vehicles) + registry["transports"] = _canonicals_from_columns(VEHICLES_TEMPLATE_COLUMNS.get("vehicles")) + + # drivers + registry["drivers"] = _canonicals_from_columns(DRIVERS_TEMPLATE_COLUMNS.get("drivers")) + + # trailers + registry["trailers"] = _canonicals_from_columns(TRAILERS_TEMPLATE_COLUMNS.get("trailers")) + + return registry + + +_TEMPLATE_HEADERS: Dict[str, List[str]] = _build_registry() + +# Nombre de archivo sugerido para descarga (sin path) +TEMPLATE_FILENAMES: Dict[str, str] = { + "customs_brokers": "EstructuraCatAgenteAduanal.csv", + "clients_providers": "EstructuraCatClienteProv.csv", + "exchange_rates": "EstructuraCatTiposCambio.csv", + "american_fractions": "EstructuraCatFraccAme.csv", + "material_classes": "EstructuraCatClasesAF.csv", + "part_numbers": "EstructuraCatPartesAF.csv", + "items": "EstructuraCatPartesAF.csv", + "boms": "EstructuraBOMS.csv", + "pedimentos": "EstructuraCatPedimentos.csv", + "transports": "EstructuraCatTransportes.csv", + "drivers": "EstructuraCatConductor.csv", + "trailers": "EstructuraCatTrailers.csv", + "imp_temp_header": "EstructuraEncFacImpoTemp.csv", + "imp_temp_details": "EstructuraParFacImpoTempAF.csv", + "imp_def_header": "EstructuraEncFacImpoDef.csv", + "imp_def_details": "EstructuraParFacImpoDefAF.csv", + "exp_def_header": "EstructuraEncFacExpoCamReg.csv", + "exp_def_details": "EstructuraParExpoCamReg.csv", +} + + +def get_template_headers(template_id: str) -> Optional[List[str]]: + """Devuelve la lista de cabeceras canónicas para el template_id, o None si no existe.""" + return _TEMPLATE_HEADERS.get(template_id) + + +def get_template_filename(template_id: str) -> str: + """Nombre de archivo sugerido para la descarga.""" + return TEMPLATE_FILENAMES.get(template_id, f"plantilla_{template_id}.csv") + + +def generate_csv_content(template_id: str, include_bom: bool = True) -> Optional[bytes]: + """ + Genera el contenido CSV (solo fila de cabeceras) para el template_id. + UTF-8, opcionalmente con BOM para Excel. + """ + headers = get_template_headers(template_id) + if not headers: + return None + buf = io.StringIO() + writer = csv.writer(buf, lineterminator="\n") + writer.writerow(headers) + content = buf.getvalue().encode("utf-8") + if include_bom: + content = b"\xef\xbb\xbf" + content + return content diff --git a/backend/api/v1/modules/a76/csv_templates/routes.py b/backend/api/v1/modules/a76/csv_templates/routes.py new file mode 100644 index 00000000..26f1e264 --- /dev/null +++ b/backend/api/v1/modules/a76/csv_templates/routes.py @@ -0,0 +1,35 @@ +""" +Rutas para descargar plantillas CSV generadas desde código (sin archivos XLS/XLSX). +""" +from typing import Any, Dict + +from fastapi import APIRouter, Depends, HTTPException +from fastapi.responses import Response + +from core.security import get_current_user + +from .registry import generate_csv_content, get_template_filename + +router = APIRouter() + + +@router.get("/{template_id}", response_class=Response) +async def download_csv_template( + template_id: str, + current_user: Dict[str, Any] = Depends(get_current_user), +): + """ + Devuelve un CSV con solo la fila de cabeceras para la plantilla indicada. + Las cabeceras son los nombres canónicos definidos en cada template_config. + """ + content = generate_csv_content(template_id, include_bom=True) + if content is None: + raise HTTPException(status_code=404, detail=f"Plantilla desconocida: {template_id}") + filename = get_template_filename(template_id) + return Response( + content=content, + media_type="text/csv; charset=utf-8", + headers={ + "Content-Disposition": f'attachment; filename="{filename}"', + }, + ) diff --git a/backend/api/v1/modules/a76/router.py b/backend/api/v1/modules/a76/router.py index d7057536..e30a47df 100644 --- a/backend/api/v1/modules/a76/router.py +++ b/backend/api/v1/modules/a76/router.py @@ -15,6 +15,7 @@ from .classes import router as classes_router from .clients_and_providers import router as client_and_provider_router from .imports.routes import router as imports_router +from .csv_templates.routes import router as csv_templates_router from .invoice_settings.routes import router as invoice_settings_router from .item_presets.routes import router as item_presets_router from .general_catalogs.company import router as company_router @@ -54,6 +55,7 @@ router.include_router(general_catalogs_router, prefix="/a76", tags=["a76 / gener router.include_router(invoices_router, prefix="/a76", tags=["a76 / invoices"]) router.include_router(items_router, prefix="/a76", tags=["a76 / items"]) router.include_router(imports_router, prefix="/a76/imports", tags=["a76 / imports"]) +router.include_router(csv_templates_router, prefix="/a76/csv-templates", tags=["a76 / csv_templates"]) router.include_router(invoice_settings_router) router.include_router(item_presets_router, prefix="/a76/item-presets", tags=["a76 / item_presets"]) router.include_router(pedimentos_router, prefix="/a76") diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 0e8b57f9..ca30b42e 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -315,6 +315,35 @@ export const api = { delete: (endpoint: string, options: RequestInit = {}) => fetchApi(endpoint, { method: 'DELETE', ...options }), + /** + * Download CSV template by template_id (generated from code, no static file). + * Returns blob and suggested filename for the browser download. + */ + async getCsvTemplateDownload( + templateId: string + ): Promise<{ blob: Blob; filename: string }> { + const token = getToken(); + const headers: Record = {}; + if (token) headers['Authorization'] = `Bearer ${token}`; + const response = await fetch(`${API_BASE_URL}/v1/a76/csv-templates/${templateId}`, { + method: 'GET', + headers, + credentials: 'include' + }); + if (!response.ok) { + const msg = response.status === 404 ? 'Plantilla no encontrada' : `Error ${response.status}`; + throw new Error(msg); + } + const blob = await response.blob(); + let filename = `plantilla_${templateId}.csv`; + const disposition = response.headers.get('Content-Disposition'); + if (disposition) { + const match = /filename="?([^";\n]+)"?/.exec(disposition); + if (match) filename = match[1].trim(); + } + return { blob, filename }; + }, + // Endpoints específicos auth: { login: (credentials: { username: string; password: string; tenant_slug: string }) => diff --git a/frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte b/frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte index 3f17fc78..35d1f218 100644 --- a/frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte +++ b/frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte @@ -4,6 +4,7 @@ import { UploadCloud, Lock } from 'lucide-svelte'; import { cn } from '$lib/utils'; import { toast } from 'svelte-sonner'; + import { api } from '$lib/api'; let { items, @@ -88,7 +89,7 @@ } } - function handleContextMenu(e: MouseEvent, item: CsvUploadItem) { + async function handleContextMenu(e: MouseEvent, item: CsvUploadItem) { if (item.disabled) { e.preventDefault(); return; @@ -96,16 +97,23 @@ e.preventDefault(); - if (!item.templateUrl) return; + if (!item.templateId) return; - const link = document.createElement('a'); - link.href = item.templateUrl; - link.download = item.templateUrl.split('/').pop() || 'plantilla.xls'; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - - toast.info(`Descargando plantilla para ${item.title}...`); + try { + toast.info(`Descargando plantilla para ${item.title}...`); + const { blob, filename } = await api.getCsvTemplateDownload(item.templateId); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); + toast.success(`Plantilla descargada: ${filename}`); + } catch (err) { + toast.error(err instanceof Error ? err.message : 'Error al descargar la plantilla'); + } } diff --git a/frontend/src/lib/config/csv-upload.ts b/frontend/src/lib/config/csv-upload.ts index 9ab11d00..c51ceaae 100644 --- a/frontend/src/lib/config/csv-upload.ts +++ b/frontend/src/lib/config/csv-upload.ts @@ -28,7 +28,8 @@ export interface CsvUploadItem { group?: string; // For grouping within a tab modelTarget?: string; // The backend model this maps to description?: string; - templateUrl?: string; // Path to the template file in static/ + /** Backend template id for CSV download (e.g. customs_brokers, part_numbers). No physical file. */ + templateId?: string; disabled?: boolean; // New property to mark items as "Coming Soon" } @@ -131,49 +132,49 @@ export const catalogosConfig: CsvUploadItem[] = [ title: 'Agentes Aduanales', icon: User, modelTarget: 'CustomsBroker', - templateUrl: '/csv/EstructuraCatAgenteAduanal.xls' + templateId: 'customs_brokers' }, { id: 'clients_providers', title: 'Clientes y Proveedores', icon: Users, modelTarget: 'ClientProvider', - templateUrl: '/csv/EstructuraCatClienteProv.xls' + templateId: 'clients_providers' }, { id: 'exchange_rates', title: 'Tipo de Cambios', icon: DollarSign, modelTarget: 'ExchangeRate', - templateUrl: '/csv/EstructuraCatTiposCambio.xls' + templateId: 'exchange_rates' }, { id: 'american_fractions', title: 'Fracc. Ame.', icon: Globe, modelTarget: 'AmericanFraction', - templateUrl: '/csv/EstructuraCatFraccAme.xls' + templateId: 'american_fractions' }, { id: 'material_classes', title: 'Clases de Materiales', icon: Package, modelTarget: 'MaterialClass', - templateUrl: '/csv/EstructuraCatClasesAF.xls' + templateId: 'material_classes' }, { id: 'part_numbers', title: 'Números de parte', icon: Hash, modelTarget: 'Part', - templateUrl: '/csv/EstructuraCatPartesAF.xls', + templateId: 'part_numbers', }, { id: 'boms', title: 'BOMs', icon: Briefcase, modelTarget: 'Bom', - templateUrl: '/csv/EstructuraBOMS.xlsx', + templateId: 'boms', }, { id: 'items', @@ -181,7 +182,7 @@ export const catalogosConfig: CsvUploadItem[] = [ icon: FileText, group: 'Permisos', modelTarget: 'ItemPermission', - templateUrl: '/csv/EstructuraCatPartesAF.xls' + templateId: 'part_numbers' }, { id: 'headers', @@ -203,7 +204,7 @@ export const catalogosConfig: CsvUploadItem[] = [ title: 'Pedimentos', icon: FileDigit, modelTarget: 'Pedimento', - templateUrl: '/csv/EstructuraCatPedimentos.xls' + templateId: 'pedimentos' }, ]; @@ -213,28 +214,28 @@ export const transportesConfig: CsvUploadItem[] = [ title: 'Transportistas', icon: Ship, modelTarget: 'Transporter', - templateUrl: '/csv/EstructuraCatTransportistas.xlsx', + // No templateId: backend transporters/imports not implemented yet }, { id: 'transports', title: 'Transportes', icon: Truck, modelTarget: 'Transport', - templateUrl: '/csv/EstructuraCatTransportes.xls' + templateId: 'transports' }, { id: 'drivers', title: 'Conductores', icon: User, modelTarget: 'Driver', - templateUrl: '/csv/EstructuraCatConductor.xls' + templateId: 'drivers' }, { id: 'trailers', title: 'Trailers y Cajas', icon: Container, modelTarget: 'Trailer', - templateUrl: '/csv/EstructuraCatTrailers.xls' + templateId: 'trailers' }, ]; @@ -246,7 +247,7 @@ export const importacionConfig: CsvUploadItem[] = [ icon: FileText, group: 'Impo. Temp.', modelTarget: 'invoice_header', - templateUrl: '/csv/EstructuraEncFacImpoTemp.xls' + templateId: 'imp_temp_header' }, { id: 'imp_temp_details', @@ -254,7 +255,7 @@ export const importacionConfig: CsvUploadItem[] = [ icon: Package, group: 'Impo. Temp.', modelTarget: 'invoice_details', - templateUrl: '/csv/EstructuraParFacImpoTempAF.xls' + templateId: 'imp_temp_details' }, { id: 'imp_temp_series', @@ -271,7 +272,7 @@ export const importacionConfig: CsvUploadItem[] = [ icon: FileText, group: 'Impo. Def.', modelTarget: 'invoice_header', - templateUrl: '/csv/EstructuraEncFacImpoDef.xls' + templateId: 'imp_def_header' }, { id: 'imp_def_details', @@ -279,7 +280,7 @@ export const importacionConfig: CsvUploadItem[] = [ icon: Package, group: 'Impo. Def.', modelTarget: 'invoice_details', - templateUrl: '/csv/EstructuraParFacImpoDefAF.xls' + templateId: 'imp_def_details' }, { id: 'imp_def_series', @@ -324,7 +325,7 @@ export const exportacionConfig: CsvUploadItem[] = [ icon: FileText, group: 'Expo. Def./Cam. Reg.', modelTarget: 'invoice_header', - templateUrl: '/csv/EstructuraEncFacExpoCamReg.xls' + templateId: 'exp_def_header' }, { id: 'exp_def_details', @@ -332,7 +333,7 @@ export const exportacionConfig: CsvUploadItem[] = [ icon: Package, group: 'Expo. Def./Cam. Reg.', modelTarget: 'invoice_details', - templateUrl: '/csv/EstructuraParExpoCamReg.xls' + templateId: 'exp_def_details' }, { id: 'exp_def_series', diff --git a/frontend/static/csv/EstructuraBOMS.xlsx b/frontend/static/csv/EstructuraBOMS.xlsx deleted file mode 100644 index 4a998d0d..00000000 Binary files a/frontend/static/csv/EstructuraBOMS.xlsx and /dev/null differ diff --git a/frontend/static/csv/EstructuraCatAgenteAduanal.xls b/frontend/static/csv/EstructuraCatAgenteAduanal.xls deleted file mode 100644 index 8978a33e..00000000 --- a/frontend/static/csv/EstructuraCatAgenteAduanal.xls +++ /dev/null @@ -1 +0,0 @@ -TIPO(MEX=Mexicano,AME=AMERICANO) CLAVE AADUANAL PATENTE NOMBRE RFC DIRECCION CODIGO POSTAL CIUDAD ESTADO PAIS TELEFONO NUMERO FAX CORREO ELECTRONICO CURP diff --git a/frontend/static/csv/EstructuraCatClasesAF.xls b/frontend/static/csv/EstructuraCatClasesAF.xls deleted file mode 100644 index 96b7891a..00000000 --- a/frontend/static/csv/EstructuraCatClasesAF.xls +++ /dev/null @@ -1 +0,0 @@ -CLAVE CLASE DESCRIPCION ESPAÑOL DESCRIPCION INGLES TIPO DE MATERIAL U.M. COMERCIAL FRACCION ARANCELARIA FRACCION AMERICANA TASA DE DEPRECIACION REVISION FISICA (1/0) CODIGO DE PRODUCTO/SERVICIO CP diff --git a/frontend/static/csv/EstructuraCatClienteProv.xls b/frontend/static/csv/EstructuraCatClienteProv.xls deleted file mode 100644 index 1b2096cc..00000000 --- a/frontend/static/csv/EstructuraCatClienteProv.xls +++ /dev/null @@ -1 +0,0 @@ -PROCEDENCIA CLIENTE(E=Extranjero, N=Nacional) TIPO(C=Cliente,P=Proveedor,A=Ambos) CLAVE CLIENTE NOMBRE RFC CALLES NUM. EXTERIOR CODIGO POSTAL COLONIA o PARQUE IND. CIUDAD ESTADO PAIS TELEFONO NUMERO FAX CORREO ELECTRONICO CURP TIPO DE PROGRAMA SECON NUMERO DE PROGRAMA SECON FECHA AUT. SECON ##/##/#### ES PROGRAMA PROSEC? (SI o NO) NUMERO DE PROGRAMA PROSEC VINCULACION ES EMPRESA CERTIFICADA? REGISTRO DE EMPRESA CERT. INFORMACION ADICIONAL CONTACTO CLAVE MANUFACTURERO TAX I.D. CLAVE BROKER AMERICANO EXPO CLAVE BROKER AMERICANO IMPO CLAVE TRANSFERENCIA A.A. TRANSFORMADOR/SUBMAQUILA CLAVE INTERFACE diff --git a/frontend/static/csv/EstructuraCatConductor.xls b/frontend/static/csv/EstructuraCatConductor.xls deleted file mode 100644 index 30482cb7..00000000 --- a/frontend/static/csv/EstructuraCatConductor.xls +++ /dev/null @@ -1 +0,0 @@ -TRANSPORTISTA LINEA CLAVE CONDUCTOR LICENCIA PERMISO LINEA EXPRESS IDENTIFICACION ACE FECHA NACIMIENTO SEXO PAIS NACIMIENTO TRANSPORTA MAT. PELIGROSO? PERMISO MAT. PELIGROSO NOMBRE(S) APELLIDO PATERNO FORMA IDENTIFICACION 1 NUM. IDENTIFICACION 1 ESTADO PAIS FORMA IDENTIFICACION 2 NUM. IDENTIFICACION 2 ESTADO PAIS diff --git a/frontend/static/csv/EstructuraCatFraccAme.xls b/frontend/static/csv/EstructuraCatFraccAme.xls deleted file mode 100644 index dc1f5495..00000000 --- a/frontend/static/csv/EstructuraCatFraccAme.xls +++ /dev/null @@ -1 +0,0 @@ -FRACCION ARANCELARIA PREFIJO UNIDAD DE MEDIDA DESCRIPCION TIPO DE ADVALOREM ADVALOREM % ADVALOREM DLLS diff --git a/frontend/static/csv/EstructuraCatNumerosParte.xlsx b/frontend/static/csv/EstructuraCatNumerosParte.xlsx deleted file mode 100644 index d986c9a4..00000000 Binary files a/frontend/static/csv/EstructuraCatNumerosParte.xlsx and /dev/null differ diff --git a/frontend/static/csv/EstructuraCatPartesAF.xls b/frontend/static/csv/EstructuraCatPartesAF.xls deleted file mode 100644 index e989d04f..00000000 --- a/frontend/static/csv/EstructuraCatPartesAF.xls +++ /dev/null @@ -1 +0,0 @@ -NUMERO DE PARTE DESCRIPCION EN ESPAÑOL DESCRIPCION EN INGLES CLASE UNIDAD DE MEDIDA COMERCIAL COSTO UNITARIO TIPO MONEDA COSTO CLAVE MONEDA PESO UNITARIO TIPO PESO FRACCION PAIS PREFERENCIA SECTOR RUTA DE LA IMAGEN diff --git a/frontend/static/csv/EstructuraCatPedimentos.xls b/frontend/static/csv/EstructuraCatPedimentos.xls deleted file mode 100644 index b2e2f7f2..00000000 --- a/frontend/static/csv/EstructuraCatPedimentos.xls +++ /dev/null @@ -1 +0,0 @@ -NUMERO DE PEDIMENTO (##-####-######) TIPO MOV(I=Impotación,E=Expotación) CLAVE PEDIMENTO REGIMEN FECHA INICIO FECHA FINAL FECHA DE PAGO ADUANA Y SECCION DE CRUCE ACUSE ELECTRONICO INDIVIDUAL o CONSOLIDADO (IND,CON) MET TRANS ENTRADA MET TRANS ARRIVO MET TRANS SALIDA IEPS DTA CNT PREVALIDACION MONTO TIGIE PAGO IMPUESTO? (S/N) ES MIXTO (SI/NO) OBS RECTIFICA OPCION DESTINO(Interior del Pais/Región Fronteriza/Franja Fronteriza) VALOR IVA VALOR ME VALOR ADUANAS FLETE VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES ESTATUS (ABIERTO/CERRADO) PERSONA REV FECHA CIERRE FECHA REVISION FECHA AUTORIZACION FECHA RECIBIDO REPRESENTANTE AA CLAVE DEST ORIGEN FECHA ENTRADA RECINTO FECHA EXTRACCION RECINTO ERRORES FORMA PAGO DTA FORMA PAGO IGI FORMA PAGO PREVAL FORMA PAGO IVA RECARGOS MULTAS IVA DE PREV CUOTAS CONPENSATORIAS IDENTIFICADORES IEPS 2 FORMA DE PAGO IEPS 2 DTA 2 FORMA DE PAGO DTA 2 IVA 2 FORMA DE PAGO IVA 2 IGI 2 FORMA DE PAGO IGI 2 PREVALIDACION FORMA DE PAGO PREVALIDACION 2 CNT 2 FORMA DE PAGO CNT 2 diff --git a/frontend/static/csv/EstructuraCatTiposCambio.xls b/frontend/static/csv/EstructuraCatTiposCambio.xls deleted file mode 100644 index 916d24d3..00000000 --- a/frontend/static/csv/EstructuraCatTiposCambio.xls +++ /dev/null @@ -1 +0,0 @@ -FECHA (##/##/####) TIPO DE CAMBIO diff --git a/frontend/static/csv/EstructuraCatTrailers.xls b/frontend/static/csv/EstructuraCatTrailers.xls deleted file mode 100644 index 52f1e1d0..00000000 --- a/frontend/static/csv/EstructuraCatTrailers.xls +++ /dev/null @@ -1 +0,0 @@ -CLAVE TRAILER/CAJA NUMERO ACE TIPO DE TRAILER PRECINTO CODIGO DE ENTIDAD PLACAS ESTADO PAIS diff --git a/frontend/static/csv/EstructuraCatTransportes.xls b/frontend/static/csv/EstructuraCatTransportes.xls deleted file mode 100644 index 32093ebf..00000000 --- a/frontend/static/csv/EstructuraCatTransportes.xls +++ /dev/null @@ -1 +0,0 @@ -CLAVE CLAVE ACE CLAVE TRANSPORTE VIN TIPO TRANSPORTE CODIGO DE ENTIDAD TRANSPONDEDOR NUMERO DOT PLACAS CIUDAD ESTADO PAIS PRECINTO EMPRESA ASEGURADORA NUM. ASEGURADORA MONTO ASEGURADO FECHA DE ASEGURADORA diff --git a/frontend/static/csv/EstructuraCatTransportistas.xlsx b/frontend/static/csv/EstructuraCatTransportistas.xlsx deleted file mode 100644 index 5db52269..00000000 Binary files a/frontend/static/csv/EstructuraCatTransportistas.xlsx and /dev/null differ diff --git a/frontend/static/csv/EstructuraEncFacExpoCamReg.xls b/frontend/static/csv/EstructuraEncFacExpoCamReg.xls deleted file mode 100644 index 0fe4fd4c..00000000 --- a/frontend/static/csv/EstructuraEncFacExpoCamReg.xls +++ /dev/null @@ -1 +0,0 @@ -PEDIMENTO REMESA NUMERO FACTURA FECHA FACTURA TIPO DE CAMBIO REGIMEN CLAVE PROVEEDOR CLAVE VENDIDO A: CLAVE ENVIADO A AGENTE ADUANAL CLAVE TRANSPORTISTA NOMBRE CONDUCTOR TIPO TRANSPORTE NUMERO TRANSPORTE TIPO MONEDA CLAVE MONEDA FLETES VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES CLAVE INCOTERM PRECINTO TIPO PESO MANIFIESTO E-DOCUMENT NUM. OPERACION ENVIADO POR ADUANA DE CRUCE OBSERVACIONES E OBSERVACIONES I FACTURA ALTERNA diff --git a/frontend/static/csv/EstructuraEncFacImpoDef.xls b/frontend/static/csv/EstructuraEncFacImpoDef.xls deleted file mode 100644 index 2708c0ed..00000000 --- a/frontend/static/csv/EstructuraEncFacImpoDef.xls +++ /dev/null @@ -1 +0,0 @@ -PEDIMENTO REMESA NUMERO FACTURA FECHA FACTURA TIPO DE CAMBIO REGIMEN CLAVE PROVEEDOR CLAVE VENDIDO A: CLAVE ENVIADO A AGENTE ADUANAL CLAVE TRANSPORTISTA NOMBRE CONDUCTOR TIPO TRANSPORTE NUMERO TRANSPORTE TIPO MONEDA CLAVE MONEDA FLETES VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES CLAVE INCOTERM PRECINTO FECHA EMISION TIPO PESO E-DOCUMENT NUM. OPERACION ADUANA DE CRUCE OBSERVACIONES E OBSERVACIONES I diff --git a/frontend/static/csv/EstructuraEncFacImpoTemp.xls b/frontend/static/csv/EstructuraEncFacImpoTemp.xls deleted file mode 100644 index 13fcbd22..00000000 --- a/frontend/static/csv/EstructuraEncFacImpoTemp.xls +++ /dev/null @@ -1 +0,0 @@ -PEDIMENTO REMESA NUMERO FACTURA FECHA FACTURA TIPO DE CAMBIO REGIMEN CLAVE PROVEEDOR CLAVE VENDIDO A: CLAVE ENVIADO A AGENTE ADUANAL CLAVE TRANSPORTISTA NOMBRE CONDUCTOR TIPO TRANSPORTE NUMERO TRANSPORTE TIPO MONEDA CLAVE MONEDA FLETES VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES CLAVE INCOTERM PRECINTO FECHA EMISION TIPO PESO E-DOCUMENT NUM. OPERACION ADUANA DE CRUCE OBSERVACIONES E OBSERVACIONES I FACTURA ALTERNA diff --git a/frontend/static/csv/EstructuraParExpoCamReg.xls b/frontend/static/csv/EstructuraParExpoCamReg.xls deleted file mode 100644 index 76bd69af..00000000 --- a/frontend/static/csv/EstructuraParExpoCamReg.xls +++ /dev/null @@ -1 +0,0 @@ -NUMERO FACTURA EXPO. LINEA EXPO. TIPO DE IMPO. FACTURA IMPO. LINEA IMPO. GENERA DESCARGA CANTIDAD EXPORTADA/DESCARGAR COSTO UNITARIO PESO NETO PESO BRUTO SE PAGO IMPUESTO? (SI o NO) FORMA DE PAGO DESCRIPCION EXTRA INFORMACION ADICIONAL AGREGAR(A)/SUSTITUIR(S) LOTE NUMERO ENTRADA ES PARTIDA/SUBPARTIDA LINEA PRINCIPAL FRACCION AMERICANA FRACCION ARANCELARIA diff --git a/frontend/static/csv/EstructuraParFacImpoDefAF.xls b/frontend/static/csv/EstructuraParFacImpoDefAF.xls deleted file mode 100644 index 93bcae74..00000000 --- a/frontend/static/csv/EstructuraParFacImpoDefAF.xls +++ /dev/null @@ -1 +0,0 @@ -NUMERO FACTURA LINEA CLASE CANTIDAD IMPORTADA UNIDAD DE MEDIDA COSTO UNITARIO PESO NETO PESO BRUTO CANTIDAD BULTOS CLAVE BULTOS PAIS ORIGEN FRACCION ARANCELARIA PREFERENCIA ARANCELARIA SECTOR FRACCION AMERICANA ORDEN DE COMPRA DESCRIPCION ESPAÑOL DESCRIPCION INGLES MARCA MODELO ES PARTIDA O SUBPARTIDA LINEA PRINCIPAL NUM. PARTE SE PAGO IMPUESTO? (SI o NO) FORMA DE PAGO METODO DE VALORACION DESCRIPCION EXTRA INFORMACION ADICIONAL AGREGAR(A)/SUSTITUIR(S) VALOR TOTAL LOTE NUMERO ENTRADA ID TYPE diff --git a/frontend/static/csv/EstructuraParFacImpoTempAF.xls b/frontend/static/csv/EstructuraParFacImpoTempAF.xls deleted file mode 100644 index cc78d0b5..00000000 --- a/frontend/static/csv/EstructuraParFacImpoTempAF.xls +++ /dev/null @@ -1 +0,0 @@ -NUMERO FACTURA LINEA CLASE CANTIDAD IMPORTADA UNIDAD DE MEDIDA COSTO UNITARIO PESO NETO PESO BRUTO CANTIDAD BULTOS CLAVE BULTOS PAIS ORIGEN FRACCION ARANCELARIA PREFERENCIA ARANCELARIA SECTOR FRACCION AMERICANA ORDEN DE COMPRA DESCRIPCION ESPAÑOL DESCRIPCION INGLES MARCA MODELO ES PARTIDA O SUBPARTIDA LINEA PRINCIPAL NUM. PARTE SE PAGO IMPUESTO? (SI o NO) FORMA DE PAGO METODO DE VALORACION DESCRIPCION EXTRA INFORMACION ADICIONAL AGREGAR(A)/SUSTITUIR(S) TOTAL NUMERO ENTRADA LOTE ID TYPE