from typing import Dict, Any class Generador501: @staticmethod def preparar_json(datos_pedi: Dict[str, Any], totales: Dict[str, float], datos_cliente: Dict[str, Any], total_trailers: int) -> Dict[str, Any]: """ Unifica la lógica de Get_Regs501, _Def y _Expo en una sola estructura. """ # Lógica de Destino/Zona (Opcional) # OJO: usar "or ''" y no get(k, ''), porque un NULL de BD llega como None y el default no aplica destino = datos_pedi.get("Destino") or "" codigo_destino = "9" if "Interior" in destino else "7" if any(x in destino for x in ["Región", "Franja"]) else "" # Clave del Importador/Exportador clave_transfer = (datos_cliente.get("CLAVETRANSFER") or "").strip() if datos_cliente else "" # Construcción del Registro 501 registro = { "tipo_operacion_501": datos_pedi.get("Tipo") or "", "clave_documento_501": datos_pedi.get("Clave") or "", "numero_pedimento_501": (datos_pedi.get("Pedimento") or "")[8:15], "codigo_importador_exportador_501": clave_transfer if clave_transfer else " ", "monto_fletes_501": totales["flete"], "monto_seguros_501": totales["seguros"], "costo_embalajes_501": totales["embalajes"], "cargos_incrementables_501": totales["otros_incrementa"], "cargos_deducibles_501": 0, "peso_total_bruto_501": totales["peso_bruto"], "total_bultos_501": totales["bultos"], "metodo_transporte_entrada_501": str(datos_pedi.get("TransE") or ""), "metodo_transporte_arribo_501": str(datos_pedi.get("TransA") or ""), "metodo_transporte_salida_501": str(datos_pedi.get("TransS") or ""), "codigo_destino_zona_501": codigo_destino, "numero_referencia_501": "", "moneda_costos_incrementables_501": "ME", # O tomar de la primera factura "codigo_aduana_despacho_501": str(datos_pedi.get("Aduana") or ""), "numero_patente_501": (datos_pedi.get("Pedimento") or "")[3:7], "origenPedimento": 1, "total_vehiculos_501": total_trailers, "rfc_importador_exportador_501": " ", "curp_importador_exportador_501": " ", "nombre_completo_importador_exportador_501": " ", "calle_direccion_importador_exportador_501": " ", "numero_exterior_direccion_importador_exportador_501": " ", "numero_interior_direccion_importador_exportador_501": " ", "colonia_direccion_importador_exportador_501": " ", "localidad_direccion_importador_exportador_501": " ", "municipio_direccion_importador_exportador_501": " ", "estado_direccion_importador_exportador_501": " ", "pais_direccion_importador_exportador_501": " ", "codigo_postal_direccion_importador_exportador_501": " ", "monto_fletes_decrementables_501": 0, "monto_seguros_decrementables_501": 0, "monto_carga_decrementables_501": 0, "monto_descarga_decrementables_501": 0, "monto_otros_decrementables_501": 0, "MarcaBulto1_501": "S/N", "MarcaBulto2_501": "S/N" } return registro