python-satcfdi icon indicating copy to clipboard operation
python-satcfdi copied to clipboard

KeyError: 'Curp'

Open arielmol opened this issue 1 year ago • 4 comments

Extrañamente usando la versión de git instalando:

commit ea86c7fd35e76b9b9893beb395296313cb99fab7 (HEAD -> main, tag: 4.5.6, origin/main, origin/HEAD)
Author: SatCFDI <[email protected]>
Date:   Tue Aug 13 18:05:20 2024 -0600

    Added check_same_thread=False

En algunos servers sale lo siguiente:

[ERROR] KeyError: 'Curp'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 79, in lambda_handler
    cfdi = CFDI.from_string(xmldata)
  File "/opt/python/lib/python3.12/site-packages/satcfdi/xelement.py", line 61, in from_string
    return cls.from_xml(etree.fromstring(string, parser=parser))
  File "/opt/python/lib/python3.12/site-packages/satcfdi/xelement.py", line 49, in from_xml
    obj = cfdi_objectify[xml_root.tag](cls, xml_root)
  File "/opt/python/lib/python3.12/site-packages/satcfdi/transform/objectify.py", line 14769, in s_comprobante0
    return comprobante1(cls, node)
  File "/opt/python/lib/python3.12/site-packages/satcfdi/transform/objectify.py", line 10184, in comprobante1
    self['Complemento'] = complemento3(cls, el)
  File "/opt/python/lib/python3.12/site-packages/satcfdi/transform/objectify.py", line 10349, in complemento3
    self = {n.tag.rsplit('}', 1)[-1]: cfdi_objectify.get(n.tag, default_objectify)(cls, n) for n in node}
  File "/opt/python/lib/python3.12/site-packages/satcfdi/transform/objectify.py", line 14909, in s_nomina1
    return nomina1(cls, node)
  File "/opt/python/lib/python3.12/site-packages/satcfdi/transform/objectify.py", line 13981, in nomina1
    self['Receptor'] = receptor9(cls, el)
  File "/opt/python/lib/python3.12/site-packages/satcfdi/transform/objectify.py", line 14030, in receptor9
    self['Curp'] = node.attrib['Curp']
  File "src/lxml/etree.pyx", line 2545, in lxml.etree._Attrib.__getitem__

Lo raro es que pareciera depender del server, no he podido validar uno por uno la version de satcfdi pero dos son de main.

Y el CFDI es un CFDI de nomina que si tiene la CURP ya que en mi maquina local valida correctamente.

En el que sí valida use:

$ pip freeze
arrow @ file:///home/conda/feedstock_root/build_artifacts/arrow_1696128962909/work
beautifulsoup4==4.12.3
Brotli @ file:///home/conda/feedstock_root/build_artifacts/brotli-split_1695989787169/work
certifi @ file:///home/conda/feedstock_root/build_artifacts/certifi_1720457958366/work/certifi
cffi @ file:///home/conda/feedstock_root/build_artifacts/cffi_1723018375539/work
charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1698833585322/work
cryptography==42.0.8
cssselect2==0.7.0
distlib==0.3.8
filelock==3.15.4
fonttools==4.53.1
h2 @ file:///home/conda/feedstock_root/build_artifacts/h2_1634280454336/work
hpack==4.0.0
html5lib==1.1
hyperframe @ file:///home/conda/feedstock_root/build_artifacts/hyperframe_1619110129307/work
idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1724450538981/work
Jinja2==3.1.4
lxml==5.3.0
MarkupSafe==2.1.5
packaging==24.1
pillow==10.4.0
platformdirs==4.2.2
pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1711811537435/work
pydyf==0.11.0
pyOpenSSL==24.2.1
pyphen==0.16.0
pypng==0.20220715.0
PySocks @ file:///home/conda/feedstock_root/build_artifacts/pysocks_1661604839144/work
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1709299778482/work
pytz==2024.1
qrcode==7.4.2
requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1717057054362/work
satcfdi @ file:///home/ariel/projects/python-satcfdi
setuptools==72.2.0
six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
soupsieve==2.6
tabulate==0.9.0
tinycss2==1.3.0
types-python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/types-python-dateutil_1724221107168/work
typing_extensions==4.12.2
urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1719391292974/work
virtualenv==20.26.3
weasyprint==62.3
webencodings==0.5.1
wheel==0.44.0
XlsxWriter==3.2.0
zopfli==0.2.3
zstandard==0.23.0

arielmol avatar Aug 27 '24 23:08 arielmol

Al parecer esto tiene que ver con el encoding, he encontrado una variedad de encodings del sat.

  #  - XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines, with no line terminators
  #  - XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
  #  - UTF-8 Unicode text, with very long lines
  #  - UTF-8 Unicode text, with very long lines, with no line terminators
  #  - ASCII text, with very long lines

Y eso en las descargas directas del SAT e incluso descargas de varios PACs

arielmol avatar Aug 27 '24 23:08 arielmol

Ese error ocurre por que el campo de curp es requerido, se podria en teoria relajar un poco las validaciones para permitir que los campos sean opcionales

satcfdi avatar Sep 11 '24 05:09 satcfdi

No, ocurre porque el XML esta en otro encoding, el SAT aunque hagas descargas masivas te manda esos:

  #  - XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines, with no line terminators
  #  - XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
  #  - UTF-8 Unicode text, with very long lines
  #  - UTF-8 Unicode text, with very long lines, with no line terminators
  #  - ASCII text, with very long lines

arielmol avatar Sep 21 '24 01:09 arielmol

tienes un ejemplo de una factura que este fallando? para poder replicar el error

satcfdi avatar Oct 09 '24 17:10 satcfdi

Cerrando Issues Inactivos

satcfdi avatar Jun 23 '25 20:06 satcfdi