coves y edocuments
This commit is contained in:
13
examples/test_extract_file.py
Normal file
13
examples/test_extract_file.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import os
|
||||||
|
from utils.peticiones import extract_pdf_bytes_from_xml
|
||||||
|
|
||||||
|
xml_path = os.path.abspath("./test.xml")
|
||||||
|
|
||||||
|
result = extract_pdf_bytes_from_xml(xml_path)
|
||||||
|
|
||||||
|
if result and result["pdf_bytes"]:
|
||||||
|
with open("output_test.pdf", "wb") as f:
|
||||||
|
f.write(result["pdf_bytes"])
|
||||||
|
print("PDF extraído y guardado como output_test.pdf")
|
||||||
|
else:
|
||||||
|
print("No se pudo extraer el PDF del XML.")
|
||||||
68
main.py
68
main.py
@@ -5,40 +5,40 @@ from api.api_v1.api import api_router
|
|||||||
|
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
# Configuración inicial del logging (debe estar al inicio del archivo)
|
# Configuración inicial del logging (debe estar al inicio del archivo)
|
||||||
logging.config.dictConfig({
|
# logging.config.dictConfig({
|
||||||
"version": 1,
|
# "version": 1,
|
||||||
"disable_existing_loggers": False,
|
# "disable_existing_loggers": False,
|
||||||
"formatters": {
|
# "formatters": {
|
||||||
"default": {
|
# "default": {
|
||||||
"()": "uvicorn.logging.DefaultFormatter",
|
# "()": "uvicorn.logging.DefaultFormatter",
|
||||||
"fmt": "%(levelprefix)s %(asctime)s | %(name)s | %(message)s",
|
# "fmt": "%(levelprefix)s %(asctime)s | %(name)s | %(message)s",
|
||||||
"datefmt": "%Y-%m-%d %H:%M:%S",
|
# "datefmt": "%Y-%m-%d %H:%M:%S",
|
||||||
"use_colors": True,
|
# "use_colors": True,
|
||||||
},
|
# },
|
||||||
"access": {
|
# "access": {
|
||||||
"()": "uvicorn.logging.AccessFormatter",
|
# "()": "uvicorn.logging.AccessFormatter",
|
||||||
"fmt": '%(levelprefix)s %(asctime)s | %(client_addr)s | "%(request_line)s" %(status_code)s',
|
# "fmt": '%(levelprefix)s %(asctime)s | %(client_addr)s | "%(request_line)s" %(status_code)s',
|
||||||
"datefmt": "%Y-%m-%d %H:%M:%S",
|
# "datefmt": "%Y-%m-%d %H:%M:%S",
|
||||||
},
|
# },
|
||||||
},
|
# },
|
||||||
"handlers": {
|
# "handlers": {
|
||||||
"default": {
|
# "default": {
|
||||||
"formatter": "default",
|
# "formatter": "default",
|
||||||
"class": "logging.StreamHandler",
|
# "class": "logging.StreamHandler",
|
||||||
"stream": "ext://sys.stdout",
|
# "stream": "ext://sys.stdout",
|
||||||
},
|
# },
|
||||||
"access": {
|
# "access": {
|
||||||
"formatter": "access",
|
# "formatter": "access",
|
||||||
"class": "logging.StreamHandler",
|
# "class": "logging.StreamHandler",
|
||||||
"stream": "ext://sys.stdout",
|
# "stream": "ext://sys.stdout",
|
||||||
},
|
# },
|
||||||
},
|
# },
|
||||||
"loggers": {
|
# "loggers": {
|
||||||
"": {"handlers": ["default"], "level": "DEBUG"},
|
# "": {"handlers": ["default"], "level": "DEBUG"},
|
||||||
"uvicorn.error": {"level": "DEBUG"},
|
# "uvicorn.error": {"level": "DEBUG"},
|
||||||
"uvicorn.access": {"handlers": ["access"], "level": "DEBUG", "propagate": False},
|
# "uvicorn.access": {"handlers": ["access"], "level": "DEBUG", "propagate": False},
|
||||||
},
|
# },
|
||||||
})
|
# })
|
||||||
|
|
||||||
def create_application() -> FastAPI:
|
def create_application() -> FastAPI:
|
||||||
"""Función factory para crear la aplicación FastAPI"""
|
"""Función factory para crear la aplicación FastAPI"""
|
||||||
|
|||||||
439
test.xml
439
test.xml
@@ -1,439 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
|
||||||
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
|
|
||||||
<S:Header>
|
|
||||||
<wsse:Security
|
|
||||||
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
|
|
||||||
S:mustUnderstand="1">
|
|
||||||
<wsu:Timestamp
|
|
||||||
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
|
||||||
<wsu:Created>2025-07-10T14:24:04Z</wsu:Created>
|
|
||||||
<wsu:Expires>2025-07-10T14:25:04Z</wsu:Expires>
|
|
||||||
</wsu:Timestamp>
|
|
||||||
</wsse:Security>
|
|
||||||
</S:Header>
|
|
||||||
<S:Body>
|
|
||||||
<ns2:consultarPedimentoCompletoRespuesta
|
|
||||||
xmlns="http://www.ventanillaunica.gob.mx/pedimentos/ws/oxml/comunes"
|
|
||||||
xmlns:ns2="http://www.ventanillaunica.gob.mx/pedimentos/ws/oxml/consultarpedimentocompleto"
|
|
||||||
xmlns:ns3="http://www.ventanillaunica.gob.mx/common/ws/oxml/respuesta"
|
|
||||||
xmlns:ns4="http://www.ventanillaunica.gob.mx/common/ws/oxml/resolucion"
|
|
||||||
xmlns:ns5="http://www.ventanillaunica.gob.mx/common/ws/oxml/respuestatra"
|
|
||||||
xmlns:ns6="http://www.ventanillaunica.gob.mx/common/ws/oxml/dictamen"
|
|
||||||
xmlns:ns7="http://www.ventanillaunica.gob.mx/common/ws/oxml/observacion"
|
|
||||||
xmlns:ns8="http://www.ventanillaunica.gob.mx/common/ws/oxml/requisito"
|
|
||||||
xmlns:ns9="http://www.ventanillaunica.gob.mx/common/ws/oxml/opinion">
|
|
||||||
<ns3:tieneError>false</ns3:tieneError>
|
|
||||||
<ns2:numeroOperacion>21277177344</ns2:numeroOperacion>
|
|
||||||
<ns2:pedimento>
|
|
||||||
<ns2:pedimento>2001238</ns2:pedimento>
|
|
||||||
<ns2:encabezado>
|
|
||||||
<ns2:tipoOperacion>
|
|
||||||
<ns2:clave>1</ns2:clave>
|
|
||||||
<ns2:descripcion>Importacion</ns2:descripcion>
|
|
||||||
</ns2:tipoOperacion>
|
|
||||||
<ns2:claveDocumento>
|
|
||||||
<ns2:clave>IN</ns2:clave>
|
|
||||||
<ns2:descripcion>IMPORTACION TEMPORAL DE INSUMOS POR IMMEX</ns2:descripcion>
|
|
||||||
</ns2:claveDocumento>
|
|
||||||
<ns2:destino>
|
|
||||||
<ns2:clave>9</ns2:clave>
|
|
||||||
<ns2:descripcion>INTERIOR DEL PAIS</ns2:descripcion>
|
|
||||||
</ns2:destino>
|
|
||||||
<ns2:aduanaEntradaSalida>
|
|
||||||
<ns2:clave>230</ns2:clave>
|
|
||||||
<ns2:descripcion>NOGALES, NOGALES, SONORA.</ns2:descripcion>
|
|
||||||
</ns2:aduanaEntradaSalida>
|
|
||||||
<ns2:tipoCambio>20.76130</ns2:tipoCambio>
|
|
||||||
<ns2:pesoBruto>6745.682</ns2:pesoBruto>
|
|
||||||
<ns2:medioTrasnporteSalida>
|
|
||||||
<ns2:clave>7</ns2:clave>
|
|
||||||
<ns2:descripcion>CARRETERO</ns2:descripcion>
|
|
||||||
</ns2:medioTrasnporteSalida>
|
|
||||||
<ns2:medioTrasnporteArribo>
|
|
||||||
<ns2:clave>7</ns2:clave>
|
|
||||||
<ns2:descripcion>CARRETERO</ns2:descripcion>
|
|
||||||
</ns2:medioTrasnporteArribo>
|
|
||||||
<ns2:medioTrasnporteEntrada>
|
|
||||||
<ns2:clave>7</ns2:clave>
|
|
||||||
<ns2:descripcion>CARRETERO</ns2:descripcion>
|
|
||||||
</ns2:medioTrasnporteEntrada>
|
|
||||||
<ns2:curpApoderadomandatario>GUMM710831HSRZRG08</ns2:curpApoderadomandatario>
|
|
||||||
<ns2:rfcAgenteAduanalSocFactura>GLG1502247K9</ns2:rfcAgenteAduanalSocFactura>
|
|
||||||
<ns2:valorDolares>0.00</ns2:valorDolares>
|
|
||||||
<ns2:valorAduanalTotal>1642523.00</ns2:valorAduanalTotal>
|
|
||||||
<ns2:valorComercialTotal>1642523.00</ns2:valorComercialTotal>
|
|
||||||
</ns2:encabezado>
|
|
||||||
<ns2:rectificacion>
|
|
||||||
<ns2:aduanaOriginal>
|
|
||||||
<ns2:clave>230</ns2:clave>
|
|
||||||
<ns2:descripcion>NOGALES, NOGALES, SONORA.</ns2:descripcion>
|
|
||||||
</ns2:aduanaOriginal>
|
|
||||||
<ns2:aduanaDespacho>
|
|
||||||
<ns2:clave>230</ns2:clave>
|
|
||||||
<ns2:descripcion>NOGALES, NOGALES, SONORA.</ns2:descripcion>
|
|
||||||
</ns2:aduanaDespacho>
|
|
||||||
<ns2:claveDocumento>
|
|
||||||
<ns2:clave>IN</ns2:clave>
|
|
||||||
<ns2:descripcion>IMPORTACION TEMPORAL DE INSUMOS POR IMMEX</ns2:descripcion>
|
|
||||||
</ns2:claveDocumento>
|
|
||||||
<ns2:fechaPago>2022-07-25-06:00</ns2:fechaPago>
|
|
||||||
<ns2:pedimentoOriginal>2009506</ns2:pedimentoOriginal>
|
|
||||||
<ns2:patenteOriginal>1653</ns2:patenteOriginal>
|
|
||||||
<ns2:fechaOriginal>2022-07-15-06:00</ns2:fechaOriginal>
|
|
||||||
</ns2:rectificacion>
|
|
||||||
<ns2:importadorExportador>
|
|
||||||
<ns2:rfc>MTK861014317</ns2:rfc>
|
|
||||||
<ns2:razonSocial>MAQUILAS TETA KAWI S.A. DE C.V. </ns2:razonSocial>
|
|
||||||
<ns2:domicilio>
|
|
||||||
<ns2:calle>CARRETERA INTERNACIONAL GUADALAJARA-NOGALES </ns2:calle>
|
|
||||||
<ns2:numeroExterior>KM 1969</ns2:numeroExterior>
|
|
||||||
<ns2:ciudadMunicipio>Empalme </ns2:ciudadMunicipio>
|
|
||||||
<ns2:codigoPostal>85340 </ns2:codigoPostal>
|
|
||||||
</ns2:domicilio>
|
|
||||||
<ns2:seguros>0.00</ns2:seguros>
|
|
||||||
<ns2:fletes>0.00</ns2:fletes>
|
|
||||||
<ns2:embalajes>0.00</ns2:embalajes>
|
|
||||||
<ns2:incrementables>0.00</ns2:incrementables>
|
|
||||||
<ns2:aaduanaDespacho>
|
|
||||||
<ns2:clave>230</ns2:clave>
|
|
||||||
<ns2:descripcion>NOGALES, NOGALES, SONORA.</ns2:descripcion>
|
|
||||||
</ns2:aaduanaDespacho>
|
|
||||||
<ns2:fechas>
|
|
||||||
<ns2:fecha>2022-07-05-06:00</ns2:fecha>
|
|
||||||
<ns2:tipo>
|
|
||||||
<ns2:clave>1</ns2:clave>
|
|
||||||
<ns2:descripcion>FECHA DE ENTRADA A TERRITORIO NAL.</ns2:descripcion>
|
|
||||||
</ns2:tipo>
|
|
||||||
</ns2:fechas>
|
|
||||||
<ns2:fechas>
|
|
||||||
<ns2:fecha>2022-07-15-06:00</ns2:fecha>
|
|
||||||
<ns2:tipo>
|
|
||||||
<ns2:clave>2</ns2:clave>
|
|
||||||
<ns2:descripcion>FECHA DE PAGO DE LAS CONTRIBUCIONES</ns2:descripcion>
|
|
||||||
</ns2:tipo>
|
|
||||||
</ns2:fechas>
|
|
||||||
<ns2:efectivo>1412.00</ns2:efectivo>
|
|
||||||
<ns2:otros>0</ns2:otros>
|
|
||||||
<ns2:total>1412.00</ns2:total>
|
|
||||||
<ns2:pais>
|
|
||||||
<clave>MEX</clave>
|
|
||||||
<descripcion>MEXICO (ESTADOS UNIDOS MEXICANOS)</descripcion>
|
|
||||||
</ns2:pais>
|
|
||||||
</ns2:importadorExportador>
|
|
||||||
<ns2:tasas>
|
|
||||||
<ns2:contribucion>
|
|
||||||
<ns2:clave>15</ns2:clave>
|
|
||||||
<ns2:descripcion>PREVALIDAAAA</ns2:descripcion>
|
|
||||||
</ns2:contribucion>
|
|
||||||
<ns2:tipoTasa>
|
|
||||||
<clave>2</clave>
|
|
||||||
<descripcion>ESPECIFICO</descripcion>
|
|
||||||
</ns2:tipoTasa>
|
|
||||||
<ns2:tasaAplicable>240.0000000000</ns2:tasaAplicable>
|
|
||||||
<ns2:formaPago>
|
|
||||||
<clave>0</clave>
|
|
||||||
<descripcion>EFECTIVO</descripcion>
|
|
||||||
</ns2:formaPago>
|
|
||||||
<ns2:importe>240.00</ns2:importe>
|
|
||||||
</ns2:tasas>
|
|
||||||
<ns2:tasas>
|
|
||||||
<ns2:contribucion>
|
|
||||||
<ns2:clave>23</ns2:clave>
|
|
||||||
<ns2:descripcion>IVA PREV</ns2:descripcion>
|
|
||||||
</ns2:contribucion>
|
|
||||||
<ns2:tipoTasa>
|
|
||||||
<clave>1</clave>
|
|
||||||
<descripcion>PORCENTUAL</descripcion>
|
|
||||||
</ns2:tipoTasa>
|
|
||||||
<ns2:tasaAplicable>16.0000000000</ns2:tasaAplicable>
|
|
||||||
<ns2:formaPago>
|
|
||||||
<clave>0</clave>
|
|
||||||
<descripcion>EFECTIVO</descripcion>
|
|
||||||
</ns2:formaPago>
|
|
||||||
<ns2:importe>38.00</ns2:importe>
|
|
||||||
</ns2:tasas>
|
|
||||||
<ns2:tasas>
|
|
||||||
<ns2:contribucion>
|
|
||||||
<ns2:clave>1</ns2:clave>
|
|
||||||
<ns2:descripcion>DTA</ns2:descripcion>
|
|
||||||
</ns2:contribucion>
|
|
||||||
<ns2:tipoTasa>
|
|
||||||
<clave>4</clave>
|
|
||||||
<descripcion>ESPECIFICO (CUOTA FIJA) DTA</descripcion>
|
|
||||||
</ns2:tipoTasa>
|
|
||||||
<ns2:tasaAplicable>378.0000000000</ns2:tasaAplicable>
|
|
||||||
<ns2:formaPago>
|
|
||||||
<clave>0</clave>
|
|
||||||
<descripcion>EFECTIVO</descripcion>
|
|
||||||
</ns2:formaPago>
|
|
||||||
<ns2:importe>1134.00</ns2:importe>
|
|
||||||
</ns2:tasas>
|
|
||||||
<ns2:proveedoresCompradores>
|
|
||||||
<ns2:identificadorFiscal>84-401607200</ns2:identificadorFiscal>
|
|
||||||
<ns2:proveedorComprador>LIBRA GUAYMAS LLC</ns2:proveedorComprador>
|
|
||||||
<ns2:valorMonedaExtranjera>0.000000</ns2:valorMonedaExtranjera>
|
|
||||||
<ns2:valorDolares>0.00</ns2:valorDolares>
|
|
||||||
</ns2:proveedoresCompradores>
|
|
||||||
<ns2:proveedoresCompradores>
|
|
||||||
<ns2:identificadorFiscal>84-401607200</ns2:identificadorFiscal>
|
|
||||||
<ns2:proveedorComprador>LIBRA GUAYMAS LLC</ns2:proveedorComprador>
|
|
||||||
<ns2:valorMonedaExtranjera>0.000000</ns2:valorMonedaExtranjera>
|
|
||||||
<ns2:valorDolares>0.00</ns2:valorDolares>
|
|
||||||
</ns2:proveedoresCompradores>
|
|
||||||
<ns2:proveedoresCompradores>
|
|
||||||
<ns2:identificadorFiscal>84-401607200</ns2:identificadorFiscal>
|
|
||||||
<ns2:proveedorComprador>LIBRA GUAYMAS LLC</ns2:proveedorComprador>
|
|
||||||
<ns2:valorMonedaExtranjera>0.000000</ns2:valorMonedaExtranjera>
|
|
||||||
<ns2:valorDolares>0.00</ns2:valorDolares>
|
|
||||||
</ns2:proveedoresCompradores>
|
|
||||||
<ns2:facturas>
|
|
||||||
<ns2:numero>COVE2258M9IT4</ns2:numero>
|
|
||||||
<ns2:terminoFacturacion>
|
|
||||||
<ns2:clave>FCA</ns2:clave>
|
|
||||||
<ns2:descripcion>FRANCO TRANSPORTISTA (... LUGAR DESIGNADO)</ns2:descripcion>
|
|
||||||
</ns2:terminoFacturacion>
|
|
||||||
<ns2:valorDolares>0.00</ns2:valorDolares>
|
|
||||||
<ns2:valorMonedaExtranjera>0.000000</ns2:valorMonedaExtranjera>
|
|
||||||
<ns2:identificadorFiscalProveedorComprador>84-401607200</ns2:identificadorFiscalProveedorComprador>
|
|
||||||
<ns2:proveedorComprador>LIBRA GUAYMAS LLC</ns2:proveedorComprador>
|
|
||||||
</ns2:facturas>
|
|
||||||
<ns2:facturas>
|
|
||||||
<ns2:numero>COVE2257S9033</ns2:numero>
|
|
||||||
<ns2:terminoFacturacion>
|
|
||||||
<ns2:clave>FCA</ns2:clave>
|
|
||||||
<ns2:descripcion>FRANCO TRANSPORTISTA (... LUGAR DESIGNADO)</ns2:descripcion>
|
|
||||||
</ns2:terminoFacturacion>
|
|
||||||
<ns2:valorDolares>0.00</ns2:valorDolares>
|
|
||||||
<ns2:valorMonedaExtranjera>0.000000</ns2:valorMonedaExtranjera>
|
|
||||||
<ns2:identificadorFiscalProveedorComprador>84-401607200</ns2:identificadorFiscalProveedorComprador>
|
|
||||||
<ns2:proveedorComprador>LIBRA GUAYMAS LLC</ns2:proveedorComprador>
|
|
||||||
</ns2:facturas>
|
|
||||||
<ns2:facturas>
|
|
||||||
<ns2:numero>COVE2257PY1Z4</ns2:numero>
|
|
||||||
<ns2:terminoFacturacion>
|
|
||||||
<ns2:clave>FCA</ns2:clave>
|
|
||||||
<ns2:descripcion>FRANCO TRANSPORTISTA (... LUGAR DESIGNADO)</ns2:descripcion>
|
|
||||||
</ns2:terminoFacturacion>
|
|
||||||
<ns2:valorDolares>0.00</ns2:valorDolares>
|
|
||||||
<ns2:valorMonedaExtranjera>0.000000</ns2:valorMonedaExtranjera>
|
|
||||||
<ns2:identificadorFiscalProveedorComprador>84-401607200</ns2:identificadorFiscalProveedorComprador>
|
|
||||||
<ns2:proveedorComprador>LIBRA GUAYMAS LLC</ns2:proveedorComprador>
|
|
||||||
</ns2:facturas>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>PC</clave>
|
|
||||||
<descripcion>PEDIMENTO CONSOLIDADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>ED</clave>
|
|
||||||
<descripcion>E_DOCUMENT DOCUMENTO DIGITALIZADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>0170220NCKKN2</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>ED</clave>
|
|
||||||
<descripcion>E_DOCUMENT DOCUMENTO DIGITALIZADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>0433220889CP2</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>ED</clave>
|
|
||||||
<descripcion>E_DOCUMENT DOCUMENTO DIGITALIZADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>0436220ER86M4</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>SO</clave>
|
|
||||||
<descripcion>SOCIO COMERCIAL CERTIFICADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>AA</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>ED</clave>
|
|
||||||
<descripcion>E_DOCUMENT DOCUMENTO DIGITALIZADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>0436220ER86H4</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>CI</clave>
|
|
||||||
<descripcion>CERTIFICACION EN MATERIA DE IVA E IEPS</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>AAA</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>IM</clave>
|
|
||||||
<descripcion>AUTORIZACION DE EMPRESA CON PROGRAMA IMMEX</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>45242006</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>PP</clave>
|
|
||||||
<descripcion>PROGRAMAS DE PROMOCIÓN SECTORIAL.</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>20011635</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>ED</clave>
|
|
||||||
<descripcion>E_DOCUMENT DOCUMENTO DIGITALIZADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>0170220NG6SJ4</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>RC</clave>
|
|
||||||
<descripcion>REMESAS DE CONSOLIDADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>1-3</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>ED</clave>
|
|
||||||
<descripcion>E_DOCUMENT DOCUMENTO DIGITALIZADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>0436220ESLMS1</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:identificadores>
|
|
||||||
<claveIdentificador>
|
|
||||||
<clave>IC</clave>
|
|
||||||
<descripcion>IMPORTADOR CERTIFICADO</descripcion>
|
|
||||||
</claveIdentificador>
|
|
||||||
<complemento1>O</complemento1>
|
|
||||||
</ns2:identificadores>
|
|
||||||
</ns2:identificadores>
|
|
||||||
<ns2:observaciones>PEDIMENTO CONSOLIDADO DE IMPORTACION DE CONFORMIDAD CON LOS
|
|
||||||
ARTICULOS 37, 37-A DE LA LEY ADUANERA Y REGLA DE COMERCIO EXTERIOR 1.9.19.,
|
|
||||||
CORRESPONDIENTE A LA SEMANA DEL 04 DE JULIO AL 10 DE JULIO DEL 2022. DE
|
|
||||||
CONFORMIDAD CON EL ARTICULO 89DE LA LEY ADUANERA SE REALIZA RECTIFICACION DE
|
|
||||||
PEDIMENTO PARA MODIFICAR LO SIGUIENTE: SE RECTIFICA PEDIMENTO EN: VALOR
|
|
||||||
COMERCIAL DICE: 73,817.52 DEBE DECIR: 79,114.63 PESO BRUTO DICE: 6695.390 DEBE
|
|
||||||
DECIR: 6745.682 SE RECTIFICA COVE DE FACTURA LIBRA7902RM DICE: COVE2257X6DZ1
|
|
||||||
DEBE DECIR: COVE2258M9IT4 SE CORRIGE PARTIDA # 81 EN CANTIDAD Y UNIDAD DE MEDIDA
|
|
||||||
SE AGREGAN PARTIDAS # 93, 94, 95 y 96. SE DIGITALIZA FACTURA E DOCUMENT
|
|
||||||
0170220NG6SJ4 SE DIGITALIZA REGLA 8va E DOCUMENT 0436220ESLMS1 - - Relacion de
|
|
||||||
facturas - - FACTR: LIBRA GUAYMAS
|
|
||||||
LLC,84-401607200,LIBRA7896RM,05-07-2022,COVE2257PY1Z4,USD,26,664.250 FACTR:
|
|
||||||
LIBRA GUAYMAS
|
|
||||||
LLC,84-401607200,LIBRA7898RM,06-07-2022,COVE2257S9033,USD,5,422.700 FACTR: LIBRA
|
|
||||||
GUAYMAS LLC,84-401607200,LIBRA7902RM,08-07-2022,COVE2258M9IT4,USD,47,027.680 </ns2:observaciones>
|
|
||||||
<ns2:partidas>96</ns2:partidas>
|
|
||||||
<ns2:partidas>56</ns2:partidas>
|
|
||||||
<ns2:partidas>7</ns2:partidas>
|
|
||||||
<ns2:partidas>69</ns2:partidas>
|
|
||||||
<ns2:partidas>43</ns2:partidas>
|
|
||||||
<ns2:partidas>95</ns2:partidas>
|
|
||||||
<ns2:partidas>64</ns2:partidas>
|
|
||||||
<ns2:partidas>70</ns2:partidas>
|
|
||||||
<ns2:partidas>8</ns2:partidas>
|
|
||||||
<ns2:partidas>65</ns2:partidas>
|
|
||||||
<ns2:partidas>16</ns2:partidas>
|
|
||||||
<ns2:partidas>79</ns2:partidas>
|
|
||||||
<ns2:partidas>20</ns2:partidas>
|
|
||||||
<ns2:partidas>48</ns2:partidas>
|
|
||||||
<ns2:partidas>26</ns2:partidas>
|
|
||||||
<ns2:partidas>18</ns2:partidas>
|
|
||||||
<ns2:partidas>27</ns2:partidas>
|
|
||||||
<ns2:partidas>54</ns2:partidas>
|
|
||||||
<ns2:partidas>34</ns2:partidas>
|
|
||||||
<ns2:partidas>93</ns2:partidas>
|
|
||||||
<ns2:partidas>44</ns2:partidas>
|
|
||||||
<ns2:partidas>17</ns2:partidas>
|
|
||||||
<ns2:partidas>90</ns2:partidas>
|
|
||||||
<ns2:partidas>37</ns2:partidas>
|
|
||||||
<ns2:partidas>9</ns2:partidas>
|
|
||||||
<ns2:partidas>11</ns2:partidas>
|
|
||||||
<ns2:partidas>51</ns2:partidas>
|
|
||||||
<ns2:partidas>73</ns2:partidas>
|
|
||||||
<ns2:partidas>36</ns2:partidas>
|
|
||||||
<ns2:partidas>66</ns2:partidas>
|
|
||||||
<ns2:partidas>63</ns2:partidas>
|
|
||||||
<ns2:partidas>40</ns2:partidas>
|
|
||||||
<ns2:partidas>88</ns2:partidas>
|
|
||||||
<ns2:partidas>19</ns2:partidas>
|
|
||||||
<ns2:partidas>59</ns2:partidas>
|
|
||||||
<ns2:partidas>15</ns2:partidas>
|
|
||||||
<ns2:partidas>2</ns2:partidas>
|
|
||||||
<ns2:partidas>94</ns2:partidas>
|
|
||||||
<ns2:partidas>68</ns2:partidas>
|
|
||||||
<ns2:partidas>78</ns2:partidas>
|
|
||||||
<ns2:partidas>32</ns2:partidas>
|
|
||||||
<ns2:partidas>39</ns2:partidas>
|
|
||||||
<ns2:partidas>89</ns2:partidas>
|
|
||||||
<ns2:partidas>62</ns2:partidas>
|
|
||||||
<ns2:partidas>4</ns2:partidas>
|
|
||||||
<ns2:partidas>47</ns2:partidas>
|
|
||||||
<ns2:partidas>74</ns2:partidas>
|
|
||||||
<ns2:partidas>41</ns2:partidas>
|
|
||||||
<ns2:partidas>80</ns2:partidas>
|
|
||||||
<ns2:partidas>6</ns2:partidas>
|
|
||||||
<ns2:partidas>42</ns2:partidas>
|
|
||||||
<ns2:partidas>28</ns2:partidas>
|
|
||||||
<ns2:partidas>92</ns2:partidas>
|
|
||||||
<ns2:partidas>49</ns2:partidas>
|
|
||||||
<ns2:partidas>12</ns2:partidas>
|
|
||||||
<ns2:partidas>13</ns2:partidas>
|
|
||||||
<ns2:partidas>84</ns2:partidas>
|
|
||||||
<ns2:partidas>10</ns2:partidas>
|
|
||||||
<ns2:partidas>31</ns2:partidas>
|
|
||||||
<ns2:partidas>87</ns2:partidas>
|
|
||||||
<ns2:partidas>50</ns2:partidas>
|
|
||||||
<ns2:partidas>76</ns2:partidas>
|
|
||||||
<ns2:partidas>22</ns2:partidas>
|
|
||||||
<ns2:partidas>30</ns2:partidas>
|
|
||||||
<ns2:partidas>53</ns2:partidas>
|
|
||||||
<ns2:partidas>71</ns2:partidas>
|
|
||||||
<ns2:partidas>38</ns2:partidas>
|
|
||||||
<ns2:partidas>3</ns2:partidas>
|
|
||||||
<ns2:partidas>33</ns2:partidas>
|
|
||||||
<ns2:partidas>45</ns2:partidas>
|
|
||||||
<ns2:partidas>23</ns2:partidas>
|
|
||||||
<ns2:partidas>25</ns2:partidas>
|
|
||||||
<ns2:partidas>21</ns2:partidas>
|
|
||||||
<ns2:partidas>67</ns2:partidas>
|
|
||||||
<ns2:partidas>85</ns2:partidas>
|
|
||||||
<ns2:partidas>14</ns2:partidas>
|
|
||||||
<ns2:partidas>46</ns2:partidas>
|
|
||||||
<ns2:partidas>29</ns2:partidas>
|
|
||||||
<ns2:partidas>35</ns2:partidas>
|
|
||||||
<ns2:partidas>91</ns2:partidas>
|
|
||||||
<ns2:partidas>24</ns2:partidas>
|
|
||||||
<ns2:partidas>72</ns2:partidas>
|
|
||||||
<ns2:partidas>82</ns2:partidas>
|
|
||||||
<ns2:partidas>61</ns2:partidas>
|
|
||||||
<ns2:partidas>86</ns2:partidas>
|
|
||||||
<ns2:partidas>83</ns2:partidas>
|
|
||||||
<ns2:partidas>77</ns2:partidas>
|
|
||||||
<ns2:partidas>75</ns2:partidas>
|
|
||||||
<ns2:partidas>58</ns2:partidas>
|
|
||||||
<ns2:partidas>81</ns2:partidas>
|
|
||||||
<ns2:partidas>55</ns2:partidas>
|
|
||||||
<ns2:partidas>57</ns2:partidas>
|
|
||||||
<ns2:partidas>5</ns2:partidas>
|
|
||||||
<ns2:partidas>52</ns2:partidas>
|
|
||||||
<ns2:partidas>60</ns2:partidas>
|
|
||||||
<ns2:partidas>1</ns2:partidas>
|
|
||||||
<ns2:diferenciasContribuciones>
|
|
||||||
<ns2:claveGravamen>
|
|
||||||
<ns2:descripcion>DTA</ns2:descripcion>
|
|
||||||
<ns2:clave>1</ns2:clave>
|
|
||||||
</ns2:claveGravamen>
|
|
||||||
<ns2:importePago>364.00</ns2:importePago>
|
|
||||||
<ns2:formaPago>
|
|
||||||
<clave>0</clave>
|
|
||||||
<descripcion>EFECTIVO</descripcion>
|
|
||||||
</ns2:formaPago>
|
|
||||||
</ns2:diferenciasContribuciones>
|
|
||||||
</ns2:pedimento>
|
|
||||||
</ns2:consultarPedimentoCompletoRespuesta>
|
|
||||||
</S:Body>
|
|
||||||
</S:Envelope>
|
|
||||||
@@ -129,36 +129,54 @@ def extract_acuse_documento_from_soap(soap_response_text): # Testeado
|
|||||||
logger.error(f"Error extrayendo acuseDocumento: {e}")
|
logger.error(f"Error extrayendo acuseDocumento: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def extract_pdf_bytes_from_xml(xml_path):
|
def extract_pdf_bytes_from_xml(xml_path):
|
||||||
tree = ET.parse(xml_path)
|
"""
|
||||||
root = tree.getroot()
|
Igual que extract_pdf_bytes_from_xml_content pero recibe una ruta de archivo.
|
||||||
# Busca el tag <File> (ajusta el namespace si es necesario)
|
"""
|
||||||
|
with open(xml_path, 'r', encoding='utf-8') as f:
|
||||||
|
xml_content = f.read()
|
||||||
|
return extract_pdf_bytes_from_xml_content(xml_content)
|
||||||
|
|
||||||
|
def extract_pdf_bytes_from_xml_content(xml_content: str):
|
||||||
|
"""
|
||||||
|
Extrae el PDF y metadatos desde un string XML.
|
||||||
|
"""
|
||||||
|
root = ET.fromstring(xml_content)
|
||||||
file_elem = root.find('.//File')
|
file_elem = root.find('.//File')
|
||||||
if file_elem is not None and file_elem.text:
|
if file_elem is None:
|
||||||
# Limpia el contenido base64
|
for elem in root.iter():
|
||||||
|
if elem.tag.endswith('File') and elem.text:
|
||||||
|
file_elem = elem
|
||||||
|
break
|
||||||
|
if file_elem is not None and file_elem.text and file_elem.text.strip():
|
||||||
base64_data = file_elem.text.strip().replace('\n', '').replace('\r', '')
|
base64_data = file_elem.text.strip().replace('\n', '').replace('\r', '')
|
||||||
pdf_bytes = base64.b64decode(base64_data)
|
pdf_bytes = base64.b64decode(base64_data)
|
||||||
cadena_original = None
|
cadena_original = None
|
||||||
sello_digital = None
|
sello_digital = None
|
||||||
|
|
||||||
# Buscar CadenaOriginal y SelloDigital en el XML
|
|
||||||
cadena_elem = root.find('.//CadenaOriginal')
|
cadena_elem = root.find('.//CadenaOriginal')
|
||||||
|
if cadena_elem is None:
|
||||||
|
for elem in root.iter():
|
||||||
|
if elem.tag.endswith('CadenaOriginal') and elem.text:
|
||||||
|
cadena_elem = elem
|
||||||
|
break
|
||||||
if cadena_elem is not None and cadena_elem.text:
|
if cadena_elem is not None and cadena_elem.text:
|
||||||
cadena_original = cadena_elem.text.strip()
|
cadena_original = cadena_elem.text.strip()
|
||||||
|
|
||||||
sello_elem = root.find('.//SelloDigital')
|
sello_elem = root.find('.//SelloDigital')
|
||||||
|
if sello_elem is None:
|
||||||
|
for elem in root.iter():
|
||||||
|
if elem.tag.endswith('SelloDigital') and elem.text:
|
||||||
|
sello_elem = elem
|
||||||
|
break
|
||||||
if sello_elem is not None and sello_elem.text:
|
if sello_elem is not None and sello_elem.text:
|
||||||
sello_digital = sello_elem.text.strip()
|
sello_digital = sello_elem.text.strip()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"pdf_bytes": pdf_bytes,
|
"pdf_bytes": pdf_bytes,
|
||||||
"cadena_original": cadena_original,
|
"cadena_original": cadena_original,
|
||||||
"sello_digital": sello_digital
|
"sello_digital": sello_digital
|
||||||
}
|
}
|
||||||
return pdf_bytes
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise ValueError("No se encontró el tag <File> con contenido válido.")
|
raise ValueError("No se encontró el tag <File> con contenido válido. Verifique que el XML contiene el tag <File> con datos base64.")
|
||||||
|
|
||||||
def decode_acuse_base64_content(base64_content): # Testeado
|
def decode_acuse_base64_content(base64_content): # Testeado
|
||||||
"""
|
"""
|
||||||
@@ -846,26 +864,14 @@ async def get_soap_edocument(credenciales, response_service, soap_controller, ed
|
|||||||
|
|
||||||
# Extraer contenido Base64 del acuse
|
# Extraer contenido Base64 del acuse
|
||||||
logger.info("Extrayendo documento binario del edocument...")
|
logger.info("Extrayendo documento binario del edocument...")
|
||||||
response = extract_pdf_bytes_from_xml(soap_response.text)
|
response = extract_pdf_bytes_from_xml_content(soap_response.text)
|
||||||
pdf_bytes = response.get('pdf_bytes')
|
pdf_bytes = response.get('pdf_bytes')
|
||||||
# cadena_original = response.get('cadena_original')
|
# cadena_original = response.get('cadena_original')
|
||||||
# sello_digital = response.get('sello_digital')
|
# sello_digital = response.get('sello_digital')
|
||||||
|
|
||||||
if not acuse_base64:
|
|
||||||
logger.error("No se pudo extraer el contenido del acuseDocumento")
|
|
||||||
raise HTTPException(status_code=500, detail="No se pudo extraer el documento del acuse")
|
|
||||||
|
|
||||||
# Decodificar contenido Base64
|
|
||||||
|
|
||||||
response_edoc = rest_controller.put_edocument(edocument_id=ide, data={
|
|
||||||
"numero_edocument": edocument['numero_edocument'],
|
|
||||||
"pedimento": response_service['pedimento'],
|
|
||||||
# "cadena_original": cadena_original,
|
|
||||||
# "sello_digital": sello_digital
|
|
||||||
})
|
|
||||||
if not pdf_bytes:
|
if not pdf_bytes:
|
||||||
logger.error("No se pudo decodificar el contenido Base64 del acuse")
|
logger.error("No se pudo decodificar el contenido Base64 del documento e-document")
|
||||||
raise HTTPException(status_code=500, detail="No se pudo decodificar el documento del acuse")
|
raise HTTPException(status_code=500, detail="No se pudo decodificar el documento del e-document")
|
||||||
|
|
||||||
# Verificar que es un PDF válido
|
# Verificar que es un PDF válido
|
||||||
if not pdf_bytes.startswith(b'%PDF'):
|
if not pdf_bytes.startswith(b'%PDF'):
|
||||||
@@ -904,7 +910,7 @@ async def get_soap_edocument(credenciales, response_service, soap_controller, ed
|
|||||||
logger.error(f"Error inesperado en get_acuse: {e}")
|
logger.error(f"Error inesperado en get_acuse: {e}")
|
||||||
import traceback
|
import traceback
|
||||||
logger.error(f"Traceback: {traceback.format_exc()}")
|
logger.error(f"Traceback: {traceback.format_exc()}")
|
||||||
raise HTTPException(status_code=500, detail=f"Error interno al procesar acuse: {str(e)}")
|
raise HTTPException(status_code=500, detail=f"Error interno al procesar acuse")
|
||||||
|
|
||||||
async def get_soap_cove(credenciales, response_service, soap_controller, cove, idx):
|
async def get_soap_cove(credenciales, response_service, soap_controller, cove, idx):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user