CFDI's expedidos por el SAT (México) de XML a objetos python
Project description
CFDI a JSON (json_cfdi)
Empezando
Desde PYPI
❯ pipenv install json_cfdi
Desde el código fuente
❯ git clone https://gitlab.com/workyhr/json_cfdi
❯ cd json_cfdi
❯ python3 setup.py install
Testing (Instalar y lanzar ambiente)
# instalar virtualenv
❯ python -m pip install virtualenv
# crear ambiente
❯ virtualenv .env
# activar ambiente
❯ source .env/bin/activate
# instalar requerimientos
❯ python -m pip install -r requirements.txt
# levantar
❯ cd json_cfdi
# lanzar tests
❯ pytest tests/
Descripción
Una forma consistente dev-friendly de procesar archivos xml y consultarlos en modelos python manejables y consistentes.
- Sin validaciones.
- Sin descarga adicional de catálogos del SAT (lo cual lo hace muy lento).
- Rápido.
- Fácil de usar.
Basado en la lista de CFDI y complementos del sat:
- CFDI
3.3y4.0http://omawww.sat.gob.mx/tramitesyservicios/Paginas/anexo_20_version3-3.htm - complementos: http://omawww.sat.gob.mx/factura/Paginas/emite_complementosdefactura.htm
Se hicieron tests haciendo uso de estos recursos, muchas gracias :)
- https://www.cryptosys.net/firmasat/cfdv40-examples.html
- https://www.cryptosys.net/firmasat/cfdv33-examples.html
Versiones de CFDI
- CFDI
Uso
Instalación
pip install json_cfdi
Uso
cfdi.to_model()
Util para procesar los xmls como objetos python.
from json_cfdi import CFDI
with open("nomina-john.xml") as file:
cfdi = CFDI(file)
model = cfdi.to_model() # acceder al contenido en forma de objeto python
model.version # '4.0'
model.receptor.nombre # John Doe
model.emisor.nombre # Company SA de CV
cfdi.to_json()
from json_cfdi import CFDI
with open("nomina-john.xml") as file:
cfdi = CFDI(file)
json_obj = cfdi.to_json() # acceder al contenido en forma de objeto python
type(json_obj) # <str>
cfdi.to_dict()
Espacialmente útil para microservicios.
from json_cfdi import CFDI
with open("nomina-john.xml") as file:
cfdi = CFDI(file)
dict_obj = cfdi.to_dict() # acceder al contenido en forma de objeto python
dict_obj.get("version") # '4.0'
dict_obj.get("receptor").get("nombre") # John Doe
dict_obj.get("emisor").get("nombre") # Company SA de CV
cfdi.to_raw()
Util para extraer la información tal cual se obtiene de la interpretación de los XSD's.
from json_cfdi import CFDI
with open("nomina-john.xml") as file:
cfdi = CFDI(file)
raw_obj = cfdi.to_raw() # acceder al contenido en forma de objeto python
raw_obj.get("attributes").get("Version") # '4.0'
raw_obj.get("children")[0].get("Receptor").get("Nombre") # John Doe
Personalización
Para leer correctamente el archivo es necesario cargar los XSD adecuados al tipo de complementos que contenga el CFDI.
from json_cfdi import CFDI
from json_cfdi.wrappers.locations import nomina12b
from json_cfdi.wrappers.schemas import get_context
context = get_context()
context["locations"] += [nomina12b] # cargar el contexto de nomina1.2
# version 3.3
with open("cfdi33-nomina-john.xml") as file:
cfdi33 = CFDI(file, context=context)
# version 4.0
with open("cfdi40-nomina-john.xml") as file:
cfdi40 = CFDI(file, version=4, context=context)
Si necesitar cargar XSDs que no tengan soporte por json_cfdi siempre
puedes cargar tus propios archivos:
from json_cfdi import CFDI
from json_cfdi.wrappers.schemas import get_context
context = get_context()
context["locations"] += [
("http://www.sat.gob.mx/nomina12", "path/a/nomina12.xsd"),
...
]
with open("nomina-john.xml") as file:
cfdi = CFDI(file, context=context)
Addendas
No hay soporte para addendas ya que requiere que se den de alta locations
que no son parte de estandar de CFDI o complementos del SAT.
Aún así deberías poder cargar tus propios contextos y acceder a ellos
usando obj.addenda. La información que obtegas será en formato JSON.
from json_cfdi import CFDI
from json_cfdi.wrappers.schemas import get_context
context = get_context()
context["locations"] += [
("http://www.tuempresa.com/addenda", "path/a/addenda.xsd"),
...
]
with open("nomina-con-addenda-john.xml") as file:
cfdi = CFDI(file, context=context)
model = cfdi.to_model()
model.addenda # {...} en formato json
Complementos
se pueden cargar complementos de forma personalizada (ver sección de uso arriba).
Tabla de complementos
Otros
CFDI (factura) de retenciones Es un comprobante que ampara las retenciones efectuadas y los pagos realizados a residentes nacionales y en el extranjero. Cuando en el desarrollo de tu actividad económica estés obligado a incluir en un CFDI las retenciones de impuestos que efectúas, o por los pagos realizados, incluye los complementos:
Tabla de complementos
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.