Bienvenido a la documentación de admin-cfdi¶
Contents:
Introducción¶
admin-cfdi es una aplicación de escritorio desarrollada en Python para descargar documentos CFDI (facturas electrónicas) directamente del SAT, permite también, descargar CFDIs desde correos electrónicos, validarlos y administrarlos.

admin-cfdi es software libre bajo la licencia GNU GPL 3 y corre en GNU/Linux y otros sistemas operativos. Se tienen también dos aplicaciones de línea de comando que permiten automatizar operaciones mediante un script:
descarga-cfdi
descarga CFDIs que cumplan determinado criterio, por
ejemplo todos los CFDIs recibidos en el mes de enero de 2015:
descarga-cfdi --año 2015 --mes 01
Abriendo Firefox...
Conectando...
Conectado...
Buscando...
Factura 1 de 13
Factura 2 de 13
Factura 3 de 13
Factura 4 de 13
Factura 5 de 13
Factura 6 de 13
Factura 7 de 13
Factura 8 de 13
Factura 9 de 13
Factura 10 de 13
Factura 11 de 13
Factura 12 de 13
Factura 13 de 13
Desconectando...
Desconectado..
Los CFDIs se guardan por omisión en la carpeta cfdi-descarga:
12FB2D4B-CAE0-41CF-B344-13FE5135C773.xml 5A5108B2-2171-49B0-86D4-539DD205786A.xml CB969AF4-0E13-441B-9CC7-0AA11831317F.xml
1FBFA93D-F171-0B0E-CF71-4216C214E66F.xml 61F50926-7C47-4269-B612-3777881050A4.xml F1ABE4CE-9444-4F77-A3E5-57A6559F6CB3.xml
2968F314-90D6-4000-BBA5-E17988F2870F.xml 79FE35B0-636E-4163-8BA2-38E053E97E4C.xml FF31423C-E1BC-4A3D-9A7B-472FFE9988F9.xml
2CF33F44-2E2A-4F4C-904C-6213D3E8F12C.xml
cfdi2pdf
convierte los CFDIs de una carpeta origen a formato PDF:
cfdi2pdf -o cfdi-descarga/ -d cfdi-pdf/
Generando: ../cfdi-descarga/2CF33F44-2E2A-4F4C-904C-6213D3E8F12C.xml
Generando: ../cfdi-descarga/79FE35B0-636E-4163-8BA2-38E053E97E4C.xml
Generando: ../cfdi-descarga/61F50926-7C47-4269-B612-3777881050A4.xml
Generando: ../cfdi-descarga/1FBFA93D-F171-0B0E-CF71-4216C214E66F.xml
Generando: ../cfdi-descarga/F1ABE4CE-9444-4F77-A3E5-57A6559F6CB3.xml
Generando: ../cfdi-descarga/2968F314-90D6-4000-BBA5-E17988F2870F.xml
Generando: ../cfdi-descarga/FF31423C-E1BC-4A3D-9A7B-472FFE9988F9.xml
Generando: ../cfdi-descarga/CB969AF4-0E13-441B-9CC7-0AA11831317F.xml
Generando: ../cfdi-descarga/5A5108B2-2171-49B0-86D4-539DD205786A.xml
Generando: ../cfdi-descarga/12FB2D4B-CAE0-41CF-B344-13FE5135C773.xml
Un ejemplo de los archivos PDF generados:

Instalación¶
Para instalar admin-cfdi descarga la ultima versión de producción desde Github e instala con el comando.
sudo python setup.py install
Si lo prefieres usa un entorno virtual.
Para LinuxMint
- Crea el entorno virtual
pyvenv-3.4 test_admin --without-pip
- Activalo
cd test_admin/ source bin/activate
- Instala pip
wget https://bootstrap.pypa.io/get-pip.py python get-pip.py
- Instala admin-cfdi
python setup.py install
Para ArchLinux
- Crea el entorno virtual
pyvenv test_admin
- Activalo
cd test_admin/ source bin/activate
- Instala admin-cfdi
python setup.py install
Uso¶
Aplicaciones¶
Admincfdi incluye las siguientes aplicaciones:
- admin-cfdi
- descarga-cfdi
- cfdi2pdf
admin-cfdi es una aplicación gráfica, descarga-cfdi y cfdi2pdf son aplicaciones de línea de comando.
admin-cfdi¶
La descarga de los archivos XML del sitio web del SAT se maneja en la primera pestaña de la interfase gráfica.
Primeramente el usuario debe llenar datos y/o seleccionar opciones en estos tres apartados:
- Datos de acceso
- Tipo de consulta
- Opciones de búsqueda
El proceso de la descarga se inicia mediante el botón
Descargar
.
descarga-cfdi¶
El avance del proceso se indica al usuario mediante textos cortos que se muestran en una línea de estado de la interfase gráfica, en esta secuencia:
Abriendo Firefox...
Conectando...
Conectado...
Buscando...
Factura 1 de 12
Factura 2 de 12
Factura 3 de 12
Factura 4 de 12
Factura 5 de 12
Factura 6 de 12
Factura 7 de 12
Factura 8 de 12
Factura 9 de 12
Factura 10 de 12
Factura 11 de 12
Factura 12 de 12
Desconectando...
Desconectado...
Pruebas funcionales de descarga del SAT¶
Estas pruebas sirven para varios propósitos:
- Saber si el sitio del SAT esta funcionando normalmente,
- Saber si nuestra conexión entre la PC y el sito del SAT está funcionando y si su desempeño es el esperado,
- Saber si el sitio del SAT cambió su funcionamiento del tal forma que sea necesario actualizar la librería de descarga de admincfdi.
Las pruebas realizan descargas mediante varios modos de búsqueda y validan que la cantidad de archivos descargados sea la esperada. No requieren interacción mientas corren.
Es necesario crear un archivo de credenciales y un archivo de configuración para las pruebas. El archivo de configuración especifica los criterios de cada búsqueda. Este es un ejemplo:
[uuid]
uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
expected=1
[rfc_emisor]
rfc_emisor=XXXXXXXXXXXX
año=2014
mes=09
día=26
expected=1
[año_mes_día]
año=2014
mes=09
día=26
expected=1
[mes_completo_por_día]
año=2014
mes=09
expected=5
Se necesitan estas cuatro secciones. Hay que ajustar los
valores para que la cantidad de CFDIs no sea muy grande. La
variable expected
se ajusta a la cantidad de CFDIs que se
descargan, para las credenciales que se utilicen.
Para ejecutar:
python functional_DescargaSAT.py
....
----------------------------------------------------------------------
Ran 4 tests in 254.376s
Agregar el parámetro -v
para tener un renglón por
cada prueba que se ejecuta:
python functional_DescargaSAT.py -v
test_año_mes_día (__main__.DescargaSAT) ... ok
test_mes_completo (__main__.DescargaSAT) ... ok
test_rfc (__main__.DescargaSAT) ... ok
test_uuid (__main__.DescargaSAT) ... ok
----------------------------------------------------------------------
Ran 4 tests in 254.376s
Desarrollo¶
Este capítulo contiene información útil para quienes desean desarrollar aplicaciones que trabajen con CFDIs, para lo cual pueden usar una o más de las clases disponibles dentro del paquete admincfdi.
Estructura¶
El paquete admincfdi incluye los siguientes módulos:
- pyutil Tiene varias clases que implementan las funcionalidades usadas por las aplicaciones.
- values Tiene la clase Global que centraliza valores que se usan en los otros módulos. Por ejemplo, las URLs y valores id de la página web de CFDIs del SAT están en el atributo SAT, es un diccionario que es usado en la descarga de CFDIs.
admin-cfdi¶
El botón Descargar
está ligado al método
admin-cfdi.Application.button_download_sat_click()
de la aplicación, que ejecuta
estos dos métodos:
admin-cfdi.Application._validate_download_sat()
admin-cfdi.Application._download_sat()
Descarga de facturas del SAT¶
El proceso de descarga mediante la aplicación de CFDIs del SAT consiste en estos pasos:
- Conectar
- Buscar
- Descargar
- Desconectar
Los detalles de cada paso:
Conectar
- Lanzar el navegador
- Navegar a la página de login de CFDIs
- Llenar el usuario y la contraseña (RFC y CIEC)
- Enviar los datos al servidor
- Esperar la respuesta
- En caso de éxito, se carga una página con el título NetIQ Access Manager
- En caso de falla, un elemento
div
con idxacerror
deja de estar oculto y muestra su texto que empieza con El RFC o contraseña son incorrectos.
Buscar
Navegar a la página de búsqueda de facturas emitidas, o a la de facturas recibidas
Esperar a que el título cambie a Buscar CFDI
- Llenar los datos de la búsqueda
Si la búsqueda es por UUID, llenar el UUID en el input con id
ctl00_MainContent_TxtUUID
.- Si la búsqueda es por fecha:
Hacer clic en el botón de radio a la izquierda de Fecha de Emisión con id
ctl00_MainContent_RdoFechas
.Esperar a que el input a la derecha de RFC Emisor con id
ctl00_MainContent_TxtRfcReceptor
esté habilitado y se pueda hacer clic en él.- Si se buscan facturas emitidas:
Habilitar los inputs con id
ctl00_MainContent_CldFechaInicial2_Calendario_text
ctl00_MainContent_CldFechaFinal2_Calendario_text
y asignar valor de fecha inicial y fecha final de emisión usando formato
dd/mm/aaaa
Asignar a los selects no visibles de tiempo final con ids
ctl00_MainContent_CldFechaFinal2_DdlHora
ctl00_MainContent_CldFechaFinal2_DdlMinuto
ctl00_MainContent_CldFechaFinal2_DdlSegundo
una cadena con un valor en el rango que corresponde respectivamente: 1 a 23, 1 a 59 y 1 a 59. No usar ceros a la izquierda para valores menores a 10: usar 5, no 05. Por omisión hay que llenar cada select con el valor máximo correspondiente.
- Se se buscan facturas recibidas:
Asignar a los selects no visibles con ids
DdlAnio
ctl00_MainContent_CldFecha_DdlMes
ctl00_MainContent_CldFecha_DdlDia
ctl00_MainContent_CldFecha_DdlHora
ctl00_MainContent_CldFecha_DdlMinuto
ctl00_MainContent_CldFecha_DdlSegundo
ctl00_MainContent_CldFecha_DdlHoraFin
ctl00_MainContent_CldFecha_DdlMinutoFin
ctl00_MainContent_CldFecha_DdlSegundoFin
los valores de los parámetros año, mes, día, hora_inicial, minuto_inicial, segundo_inicial, hora_final, minuto_final y segundo_final respectivamente. Los valores de horas, minutos y segundos no deben llevar 0 a la izquierda. El valor de día requiere 0 a la izquierda para valores menores a 10.
Enviar la forma de búsqueda al servidor mediante método POST, los datos que se envían se muestran más bajo.
Esperar a que no sea visible el elemento div de los resultados, o el botón mismo de enviar
Esperar a que uno de los dos div con id
ctl00_MainContent_PnlResultados
o idctl00_MainContent_PnlNoResultados
esté visible.Si el div con id
ctl00_MainContent_PnlResultados
es visible:- Esperar que un elemento con name
BtnDescarga
se le pueda hacer clic - Encontrar la lista todos los elementos con name
BtnDescarga
. Son los íconos de descarga a la izquierda en cada renglón.
- Esperar que un elemento con name
La lista de resultados está paginada en 500 elementos. Si los resultados son más de 500, una opción es dividir la búsqueda en dos o más búsquedas en las que se agregan criterios: La búsqueda de un mes se puede dividir en búsquedas por día; la búsqueda de un día puede dividirse en búsquedas en un rango de horas en ese día.
Descargar
Iterar en cada elemento de la lista de resultados:
- Concatenar la URL base
de CFDIs con el valor del atributo
onclick
del elemento - Hacer la solicitud GET a esta URL
- Concatenar la URL base
de CFDIs con el valor del atributo
- Desconectar
- Cerrar la sesión
- Cerrar el navegador. Este paso se realiza a pesar de que ocurra una falla en el paso anterior.
En caso de alguna falla en los primeros tres pasos, la aplicación debe realizar el paso 4.
Los datos que se envían por la forma de búsqueda de facturas recibidas:
- ctl00$ScriptManager1=ctl00$MainContent$UpnlBusqueda|ctl00$MainContent$BtnBusqueda
- __CSRFTOKEN=%2FwEFJGNjZmIzNzZmLTE4OWUtNDQwNS1iNmZiLWU2NWE4MDQ0Y2EwZA%3D%3D
- ctl00$MainContent$TxtUUID=
- ctl00$MainContent$FiltroCentral=RdoFechas
- ctl00$MainContent$CldFecha$DdlAnio=2014
- ctl00$MainContent$CldFecha$DdlMes=1
- ctl00$MainContent$CldFecha$DdlDia=0
- ctl00$MainContent$CldFecha$DdlHora=0
- ctl00$MainContent$CldFecha$DdlMinuto=0
- ctl00$MainContent$CldFecha$DdlSegundo=0
- ctl00$MainContent$CldFecha$DdlHoraFin=23
- ctl00$MainContent$CldFecha$DdlMinutoFin=59
- ctl00$MainContent$CldFecha$DdlSegundoFin=59
- ctl00$MainContent$TxtRfcReceptor=
- ctl00$MainContent$DdlEstadoComprobante=-1
- ctl00$MainContent$hfInicialBool=false
- ctl00$MainContent$ddlComplementos=-1
- __EVENTTARGET=
- __EVENTARGUMENT=
- __LASTFOCUS=
- __VIEWSTATE=<datos codificados>
- __VIEWSTATEGENERATOR=FE9DB3F4
- __VIEWSTATEENCRYPTED=
- __ASYNCPOST=true
- ctl00$MainContent$BtnBusqueda=Buscar CFDI
Los datos que se envían por la forma de búsqueda de facturas emitidas:
- ctl00$ScriptManager1=ctl00$MainContent$UpnlBusqueda|ctl00$MainContent$BtnBusqueda
- __CSRFTOKEN=%2FwEFJGNjZmIzNzZmLTE4OWUtNDQwNS1iNmZiLWU2NWE4MDQ0Y2EwZA%3D%3D
- ctl00$MainContent$TxtUUID=
- ctl00$MainContent$FiltroCentral=RdoFechas
- ctl00$MainContent$hfInicial=2015
- ctl00$MainContent$hfInicialBool=false
- ctl00$MainContent$CldFechaInicial2$Calendario_text=18/05/2015
- ctl00$MainContent$CldFechaInicial2$DdlHora=0
- ctl00$MainContent$CldFechaInicial2$DdlMinuto=0
- ctl00$MainContent$CldFechaInicial2$DdlSegundo=0
- ctl00$MainContent$hfFinal=2015
- ctl00$MainContent$CldFechaFinal2$Calendario_text=19/05/2015
- ctl00$MainContent$CldFechaFinal2$DdlHora=23
- ctl00$MainContent$CldFechaFinal2$DdlMinuto=59
- ctl00$MainContent$CldFechaFinal2$DdlSegundo=59
- ctl00$MainContent$TxtRfcReceptor=
- ctl00$MainContent$DdlEstadoComprobante=-1
- ctl00$MainContent$ddlComplementos=-1
- ctl00$MainContent$hfDatos=
- ctl00$MainContent$hfFlag=
- ctl00$MainContent$hfAux=
- __EVENTTARGET=
- __EVENTARGUMENT=
- __LASTFOCUS=
- __VIEWSTATE=<datos codificados>
- __VIEWSTATEGENERATOR=3D1378D8
- __VIEWSTATEENCRYPTED=
- __ASYNCPOST=true
- ctl00$MainContent$BtnBusqueda=Buscar CFDI
API¶
El módulo admincfdi.pyutil
provee varias clases, las cuales
pueden ser usadas por las aplicaciones. En las siguientes
secciones se explican y dan ejemplos de uso cada una de estas clases.
SAT¶
ValidCFDI¶
Util¶
Mail¶
LibO¶
NumerosLetras¶
CFDIPDF¶
DescargaSAT¶
Lleva a cabo al descarga de CFDIs del sitio del SAT. Para descargar un conjunto de CFDIs con ciertos criterios de búsqueda, se utilizan los siguientes pasos:
Instanciar
DescargaSAT
:descarga = DescargaSAT()
Crear un perfil de Firefox:
profile = descarga.get_firefox_profile(carpeta_destino)
Conectar al sitio del SAT, lanzando Firefox:
descarga.connect(profile, rfc=rfc, ciec=pwd)
Realizar una búsqueda, guardando la lista de resultados obtenida:
docs = descarga.search(facturas_emitidas=facturas_emitidas, uuid=uuid, rfc_emisor=rfc_emisor, año=año, mes=mes, día=día, mes_completo_por_día=mes_completo_por_día)
Descargar los CFDIs:
descarga.download(docs)
Desconectar la sesión del sitio del SAT y terminar Firefox:
descarga.disconnect()
Los pasos 4. de búsqueda y 5. de descarga pueden repetirse, si se desean descargar dos o más conjuntos de CFDIs con diferentes criterios de búsqueda, manteniendo la sesión original abierta.
Como ejemplo, a continuación se muestra el uso de los
pasos en las aplicaciones admin-cfdi
y descarga-cfdi
que son parte del proyecto:
descarga = DescargaSAT()
profile = descarga.get_firefox_profile(args.carpeta_destino)
try:
descarga.connect(profile, rfc=rfc, ciec=pwd)
docs = descarga.search(facturas_emitidas= args.facturas_emitidas,
uuid=args.uuid,
rfc_emisor=args.rfc_emisor,
año=args.año,
mes=args.mes,
día=args.día,
mes_completo_por_día=args.mes_completo_por_día)
descarga.download(docs)
except Exception as e:
print (e)
finally:
descarga.disconnect()
Las cláusulas try/except/finally
son para manejar alguna
excepción que ocurra en cualquiera de los pasos, y garantizar
que en cualquier caso se hace la desconexión de la sesión
y se termina Firefox.
CSVPDF¶
Referencia¶
admincfdi¶
Admin CFDI
pyutil¶
values¶
-
class
admincfdi.values.
Global
¶ -
CADENA
= '||{version}|{UUID}|{FechaTimbrado}|{selloCFD}|{noCertificadoSAT}||'¶
-
CELL_TYPE
= 'ScCellObj'¶
-
CLEAN
= '\\{(\\w.+)\\}'¶
-
COLORS
= {'DEFAULT': '#d9d9d9', 'FOCUS_IN': '#ffffca', 'FOCUS_OUT': '#ffffff'}¶
-
CONF_LOG
= {'loggers': {'AdminCFDI_screen': {'level': 'DEBUG', 'propagate': True, 'handlers': ['to_screen']}, 'AdminCFDI': {'level': 'ERROR', 'handlers': ['to_file']}}, 'version': 1, 'formatters': {'myFormat': {'datefmt': '%d-%b-%Y %H:%M:%S', 'format': '%(asctime)s - %(levelname)s - %(lineno)s - %(message)s'}}, 'disable_existing_loggers': False, 'handlers': {'to_file': {'formatter': 'myFormat', 'class': 'logging.FileHandler', 'filename': '/home/docs/admincfdi.log'}, 'to_screen': {'formatter': 'myFormat', 'class': 'logging.StreamHandler'}}}¶
-
CONTROLS
= {'button_save_xml_user': {'width': 100}, 'button_delete_report_user': {'width': 100}, 'button_delete_mail_server': {'width': 100}, 'button_save_report_user': {'width': 100}, 'button_save_emisor': {'width': 100}, 'button_save_pdf_user': {'width': 100}, 'button_delete_report_title': {'width': 100}, 'button_delete_pdf_user': {'width': 100}, 'button_exit': {'width': 100}, 'button_delete_xml_user': {'width': 100}, 'button_generate_pdf': {'width': 100}, 'button_download_mail': {'width': 100}, 'button_organizate_xml': {'width': 100}, 'button_delete_emisor': {'width': 100}, 'button_generate_report': {'width': 120}, 'button_save_report_title': {'width': 100}, 'button_save_mail_server': {'width': 100}, 'button_download_sat': {'width': 100}}¶
-
CWD
= '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi'¶
-
DEBUG
= False¶
-
DOLAR
= ('d\xc3\xb3lar', 'd\xc3\xb3lares', 'dolar', 'dolares', 'usd')¶
-
EXT_CER
= '.cer'¶
-
EXT_CSV
= '.csv'¶
-
EXT_EXE
= '.exe'¶
-
EXT_JSON
= '.json'¶
-
EXT_ODS
= '.ods'¶
-
EXT_PDF
= '.pdf'¶
-
EXT_XML
= '.xml'¶
-
FIELDS_CURRENCY
= ('TipoCambio', 'subTotal', 'totalImpuestosTrasladados', 'totalImpuestosRetenidos', 'total', 'descuento')¶
-
FIELDS_REPORT
= '{UUID}|{serie}|{folio}|{emisor_rfc}|{emisor_nombre}|{receptor_rfc}|{receptor_nombre}|{fecha}|{FechaTimbrado}|{tipoDeComprobante}|{Moneda}|{TipoCambio}|{subTotal}|{totalImpuestosTrasladados}|{total}'¶
-
FILES
= {'main': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/ui/mainwindow.ui', 'config': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/ui/config.ini', 'log': '/home/docs/admincfdi.log'}¶
-
FILE_NAME
= '{serie}{folio:06d}_{fecha}_{receptor_rfc}'¶
-
ICON
= '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/img/favicon.png'¶
-
LIMIT_MARGIN
= 23000¶
-
LOG
= <logging.Logger object>¶
-
MAIN
= 'mainwindow'¶
-
OS
= 'linux2'¶
-
PATHS
= {'XSLTPROC': 'xsltproc', 'XSLT_CER': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/bin/get_certificado.xslt', 'OPENSSL': 'openssl', 'XSLT_TIMBRE': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/bin/timbre_1.0.xslt', 'USER': '/home/docs', 'XSLT_SELLO': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/bin/get_sello.xslt', 'XSLT_CADENA': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/bin/cfdi_{}.xslt', 'BIN': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/bin', 'img': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/img', 'current': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi', 'ui': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/ui', 'CER': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/cer_pac', 'TEMPLATE': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/template', 'XSLT_SELLO_SAT': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/admincfdi/bin/get_sello_sat.xslt'}¶
-
PESO
= ('mxn', 'mxp', 'm.n.', 'p', 'mn', 'pmx', 'mex')¶
-
PREFIX
= {'IMP_LOCAL': '{http://www.sat.gob.mx/implocal}', 'IEDU': '{http://www.sat.gob.mx/iedu}', '3.2': '{http://www.sat.gob.mx/cfd/3}', 'DONATARIA': '{http://www.sat.gob.mx/donat}', '3.0': '{http://www.sat.gob.mx/cfd/3}', 'TIMBRE': '{http://www.sat.gob.mx/TimbreFiscalDigital}', '2.2': '{http://www.sat.gob.mx/cfd/2}', '2.0': '{http://www.sat.gob.mx/cfd/2}', 'NOMINA': '{http://www.sat.gob.mx/nomina}', 'LEYENDAS': '{http://www.sat.gob.mx/leyendasFiscales}'}¶
-
SAT
= {'page_emisor': 'https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaEmisor.aspx', 'emisor': 'ctl00_MainContent_TxtRfcReceptor', 'subtitle': 'subtitle', 'year': 'DdlAnio', 'date_from_name': 'ctl00$MainContent$CldFechaInicial2$Calendario_text', 'month': 'ctl00_MainContent_CldFecha_DdlMes', 'noresultados': 'ctl00_MainContent_PnlNoResultados', 'download': 'BtnDescarga', 'form_login': 'IDPLogin', 'page_init': 'https://cfdiau.sat.gob.mx/nidp/app/login?id=SATUPCFDiCon&sid=0&option=credential&sid=0', 'receptor': 'ctl00_MainContent_TxtRfcReceptor', 'user': 'Ecom_User_ID', 'date_to': 'ctl00_MainContent_CldFechaFinal2_Calendario_text', 'date': 'ctl00_MainContent_RdoFechas', 'end_minute': 'ctl00_MainContent_CldFecha_DdlMinutoFin', 'password': 'Ecom_Password', 'start_second': 'ctl00_MainContent_CldFecha_DdlSegundo', 'day': 'ctl00_MainContent_CldFecha_DdlDia', 'minute': 'ctl00_MainContent_CldFechaFinal2_DdlMinuto', 'ftp': 'ftp2.sat.gob.mx', 'combos': 'sbToggle_{}', 'end_second': 'ctl00_MainContent_CldFecha_DdlSegundoFin', 'uuid': 'ctl00_MainContent_TxtUUID', 'hour': 'ctl00_MainContent_CldFechaFinal2_DdlHora', 'page_receptor': 'https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx', 'date_from': 'ctl00_MainContent_CldFechaInicial2_Calendario_text', 'end_hour': 'ctl00_MainContent_CldFecha_DdlHoraFin', 'second': 'ctl00_MainContent_CldFechaFinal2_DdlSegundo', 'submit': 'ctl00_MainContent_BtnBusqueda', 'start_hour': 'ctl00_MainContent_CldFecha_DdlHora', 'date_to_name': 'ctl00$MainContent$CldFechaFinal2$Calendario_text', 'resultados': 'ctl00_MainContent_PnlResultados', 'found': 'No existen registros que cumplan con los criterios de', 'folder': '/Certificados/FEA', 'start_minute': 'ctl00_MainContent_CldFecha_DdlMinuto', 'page_cfdi': 'https://portalcfdi.facturaelectronica.sat.gob.mx/{}'}¶
-
SCRIPTS
= {'CFDI2PDF': '/home/docs/checkouts/readthedocs.org/user_builds/admin-cfdi/checkouts/latest/cfdi2pdf'}¶
-
TITLE
= 'Admin CFDI - Factura Libre'¶
-
WIN
= 'win32'¶
-
YEAR_INIT
= 2011¶
-
frm_1
= '%(asctime)s - %(levelname)s - %(lineno)s - %(message)s'¶
-
page_cfdi
= 'https://portalcfdi.facturaelectronica.sat.gob.mx/{}'¶
-
page_init
= 'https://cfdiau.sat.gob.mx/nidp/app/login?id=SATUPCFDiCon&sid=0&option=credential&sid=0'¶
-
Glosario¶
- admin-cfdi
- Un administrador de documentos CFDI
- CFDI
- Comprobante Fiscal Digital por Internet
- SAT
- Servicio de Administración Tributaria