# Factura Com Librería
Librería Python para interactuar con la API de Factura.com.
Hay que registrarse en el sitio web de factura.com para poder obtener el API_KEY y SECRET_KEY.
Más detalles en [Factura.com](https://factura.com/)
## Instalación
Puedes instalar la librería utilizando pip:
```bash
pip install factura-com-cfdi
```
## Uso/Ejemplos
### Configuracion Inicial
```python
from factura_com.api import FacturaComClient
api_key = "TU_API_KEY"
secret_key = "TU_SECRET_KEY"
sandbox_url = "https://sandbox.factura.com/api/v4"
live_url = "https://api.factura.com/api/v4"
client = FacturaComClient(api_key, secret_key, url=sandbox_url)
```
Utilizar la url sandbox para hacer pruebas ó live para producción.
### Obtener una lista de facturas
```python
from factura_com.api import FacturaComClient
api_key = "TU_API_KEY"
secret_key = "TU_SECRET_KEY"
sandbox_url = "https://sandbox.factura.com/api/v4"
live_url = "https://api.factura.com/api/v4"
client = FacturaComClient(api_key, secret_key, url=sandbox_url)
# Obtener una lista de facturas para un año y RFC específicos
invoice_list = client.get_invoice_list(year=2024, rfc='XAXX010101000')
print(invoice_list)
```
Obtener todas las facturas pasando como parametro el RFC o Año.
Parametros:
- month (int, opcional): El número de mes que deseas consultar (por ejemplo, 01 para enero).
- year (int, opcional): El año que deseas consultar (por ejemplo, 2024).
- rfc (str, opcional): El RFC para filtrar las facturas.
- type_document (str, opcional): El tipo de CFDI para listar solo las facturas de ese tipo.
- page (int, opcional): El número de página a consultar. Por defecto, es la página 1.
- per_page (int, opcional): El límite de resultados por página. Por defecto, retorna 100 registros.
### Obtener una factura por UID
```python
# Obtener una factura por UID
invoice_by_uid = client.get_invoice_by_uid(uid='55c0fdc67593d')
print(invoice_by_uid)
```
Obtener una factura en específico pasando como parametro el uid.
- uid (str): El UID de la factura que se desea obtener.
### Crear una nueva factura versión 4.0
```python
invoice_data = {
"Receptor": {
"ResidenciaFiscal": "",
"UID": "55c0fdc67593d"
},
"TipoDocumento": "factura",
"BorradorSiFalla": "1",
"Draft": "1",
"Conceptos": [
{
"ClaveProdServ": "43232408",
"NoIdentificacion": "0021",
"Cantidad": "1.000000",
"ClaveUnidad": "E48",
"Unidad": "Unidad de servicio",
"Descripcion": "Desarrollo web a la medida",
"ValorUnitario": "15000.000000",
"Importe": "15000.000000",
"Descuento": "0",
"Impuestos": {
"Traslados": [
{
"Base": "15000.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.16",
"Importe": "2400.000000"
}
],
"Retenidos": [],
"Locales": []
}
}
],
"UsoCFDI": "G01",
"Serie": 1247,
"FormaPago": "01",
"MetodoPago": "PUE",
"CondicionesDePago": "Pago en 9 meses",
"CfdiRelacionados": {
"TipoRelacion": "01",
"UUID": [
"29c98cb2-f72a-4cbe-a297-606da335e187",
"a96f6b9a-70aa-4f2d-bc5e-d54fb7371236"
]
},
"Moneda": "MXN",
"TipoCambio": "19.85",
"NumOrder": "85abf36",
"Fecha": "2020-03-20T12:53:23",
"Comentarios": "El pedido aún no es entregado",
"Cuenta": "0025",
"EnviarCorreo": "true",
"LugarExpedicion": "12345"
}
created_invoice = client.create_invoice_4_0(invoice_data)
```
Primeramente se tiene que crear un diccionario.
Parametros:
- invoice_data (dict): Los datos de la factura a crear.
### Obtener el PDF de una factura
```python
# Obtener el PDF de una factura por su UID ó UUID
pdf_data = client.get_invoice_pdf(cfdi_uuid='55c0fdc67593d')
```
### Obtener el XML de una factura
```python
# Obtener el XML de una factura por su UID ó UUID
xml_data = client.get_invoice_xml(cfdi_uuid='55c0fdc67593d')
```
### Cancelar una factura
Para tener mas detalles de los tipos de motivo, hacer clic [aquí](https://factura.com/apidocs/cancelar-cfdi-40.html)
```python
# Cancelar una factura por su UUID
cancel_result = client.cancel_invoice(cfdi_uuid='55c0fdc67593d', motivo='01', folio_sustituto='3336cbb9-ebd4-45e8-b60b-e7bfa6f6b5e0')
```
Raw data
{
"_id": null,
"home_page": "https://github.com/Lexharden",
"name": "factura-com-cfdi",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "factura,factura.com,API,facturaci\u00f3n electr\u00f3nica,M\u00e9xico,CFDI,Timbrado",
"author": "Alexis Yafel Garcia",
"author_email": "a.yafel10@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/58/f2/ce5ce33280fc5244e3e808ead5872b52a1c2d2c83563cbf8f274c0ceeb16/factura_com_cfdi-0.0.2.tar.gz",
"platform": null,
"description": "# Factura Com Librer\u00eda\r\n\r\nLibrer\u00eda Python para interactuar con la API de Factura.com.\r\nHay que registrarse en el sitio web de factura.com para poder obtener el API_KEY y SECRET_KEY.\r\n\r\nM\u00e1s detalles en [Factura.com](https://factura.com/)\r\n## Instalaci\u00f3n\r\n\r\nPuedes instalar la librer\u00eda utilizando pip:\r\n\r\n```bash\r\npip install factura-com-cfdi\r\n```\r\n\r\n## Uso/Ejemplos\r\n### Configuracion Inicial\r\n```python\r\nfrom factura_com.api import FacturaComClient\r\n\r\napi_key = \"TU_API_KEY\"\r\nsecret_key = \"TU_SECRET_KEY\"\r\nsandbox_url = \"https://sandbox.factura.com/api/v4\"\r\nlive_url = \"https://api.factura.com/api/v4\"\r\n\r\nclient = FacturaComClient(api_key, secret_key, url=sandbox_url)\r\n```\r\nUtilizar la url sandbox para hacer pruebas \u00f3 live para producci\u00f3n.\r\n\r\n### Obtener una lista de facturas\r\n```python\r\nfrom factura_com.api import FacturaComClient\r\n\r\napi_key = \"TU_API_KEY\"\r\nsecret_key = \"TU_SECRET_KEY\"\r\nsandbox_url = \"https://sandbox.factura.com/api/v4\"\r\nlive_url = \"https://api.factura.com/api/v4\"\r\n\r\nclient = FacturaComClient(api_key, secret_key, url=sandbox_url)\r\n\r\n# Obtener una lista de facturas para un a\u00f1o y RFC espec\u00edficos\r\n\r\ninvoice_list = client.get_invoice_list(year=2024, rfc='XAXX010101000')\r\n\r\nprint(invoice_list)\r\n```\r\n\r\nObtener todas las facturas pasando como parametro el RFC o A\u00f1o.\r\nParametros:\r\n- month (int, opcional): El n\u00famero de mes que deseas consultar (por ejemplo, 01 para enero).\r\n- year (int, opcional): El a\u00f1o que deseas consultar (por ejemplo, 2024).\r\n- rfc (str, opcional): El RFC para filtrar las facturas.\r\n- type_document (str, opcional): El tipo de CFDI para listar solo las facturas de ese tipo.\r\n- page (int, opcional): El n\u00famero de p\u00e1gina a consultar. Por defecto, es la p\u00e1gina 1.\r\n- per_page (int, opcional): El l\u00edmite de resultados por p\u00e1gina. Por defecto, retorna 100 registros.\r\n\r\n### Obtener una factura por UID\r\n```python\r\n# Obtener una factura por UID\r\n\r\ninvoice_by_uid = client.get_invoice_by_uid(uid='55c0fdc67593d')\r\n\r\nprint(invoice_by_uid)\r\n```\r\n\r\nObtener una factura en espec\u00edfico pasando como parametro el uid.\r\n- uid (str): El UID de la factura que se desea obtener.\r\n\r\n### Crear una nueva factura versi\u00f3n 4.0\r\n```python\r\ninvoice_data = {\r\n \"Receptor\": {\r\n \"ResidenciaFiscal\": \"\",\r\n \"UID\": \"55c0fdc67593d\"\r\n },\r\n \"TipoDocumento\": \"factura\",\r\n \"BorradorSiFalla\": \"1\",\r\n \"Draft\": \"1\",\r\n \"Conceptos\": [\r\n {\r\n \"ClaveProdServ\": \"43232408\",\r\n \"NoIdentificacion\": \"0021\",\r\n \"Cantidad\": \"1.000000\",\r\n \"ClaveUnidad\": \"E48\",\r\n \"Unidad\": \"Unidad de servicio\",\r\n \"Descripcion\": \"Desarrollo web a la medida\",\r\n \"ValorUnitario\": \"15000.000000\",\r\n \"Importe\": \"15000.000000\",\r\n \"Descuento\": \"0\",\r\n \"Impuestos\": {\r\n \"Traslados\": [\r\n {\r\n \"Base\": \"15000.000000\",\r\n \"Impuesto\": \"002\",\r\n \"TipoFactor\": \"Tasa\",\r\n \"TasaOCuota\": \"0.16\",\r\n \"Importe\": \"2400.000000\"\r\n }\r\n ],\r\n \"Retenidos\": [],\r\n \"Locales\": []\r\n }\r\n }\r\n ],\r\n \"UsoCFDI\": \"G01\",\r\n \"Serie\": 1247,\r\n \"FormaPago\": \"01\",\r\n \"MetodoPago\": \"PUE\",\r\n \"CondicionesDePago\": \"Pago en 9 meses\",\r\n \"CfdiRelacionados\": {\r\n \"TipoRelacion\": \"01\",\r\n \"UUID\": [\r\n \"29c98cb2-f72a-4cbe-a297-606da335e187\",\r\n \"a96f6b9a-70aa-4f2d-bc5e-d54fb7371236\"\r\n ]\r\n },\r\n \"Moneda\": \"MXN\",\r\n \"TipoCambio\": \"19.85\",\r\n \"NumOrder\": \"85abf36\",\r\n \"Fecha\": \"2020-03-20T12:53:23\",\r\n \"Comentarios\": \"El pedido a\u00fan no es entregado\",\r\n \"Cuenta\": \"0025\",\r\n \"EnviarCorreo\": \"true\",\r\n \"LugarExpedicion\": \"12345\"\r\n }\r\n\r\ncreated_invoice = client.create_invoice_4_0(invoice_data)\r\n\r\n```\r\n\r\nPrimeramente se tiene que crear un diccionario.\r\nParametros:\r\n- invoice_data (dict): Los datos de la factura a crear.\r\n### Obtener el PDF de una factura\r\n```python\r\n# Obtener el PDF de una factura por su UID \u00f3 UUID\r\npdf_data = client.get_invoice_pdf(cfdi_uuid='55c0fdc67593d')\r\n```\r\n\r\n### Obtener el XML de una factura\r\n```python\r\n# Obtener el XML de una factura por su UID \u00f3 UUID\r\nxml_data = client.get_invoice_xml(cfdi_uuid='55c0fdc67593d')\r\n```\r\n\r\n### Cancelar una factura\r\nPara tener mas detalles de los tipos de motivo, hacer clic [aqu\u00ed](https://factura.com/apidocs/cancelar-cfdi-40.html)\r\n```python\r\n# Cancelar una factura por su UUID\r\ncancel_result = client.cancel_invoice(cfdi_uuid='55c0fdc67593d', motivo='01', folio_sustituto='3336cbb9-ebd4-45e8-b60b-e7bfa6f6b5e0')\r\n```\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Librer\u00eda que consume la API de factura.com para generar facturas fiscales en M\u00e9xico.",
"version": "0.0.2",
"project_urls": {
"Homepage": "https://github.com/Lexharden"
},
"split_keywords": [
"factura",
"factura.com",
"api",
"facturaci\u00f3n electr\u00f3nica",
"m\u00e9xico",
"cfdi",
"timbrado"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1c1138d71b0c8f44a3dff3f4f875e71f5a108609e8a4a0b3756f44f3679bdb54",
"md5": "32b9b0864811f68c0f94e47487e3ef0c",
"sha256": "eb812145a7b6d5b27d828d77fe53e759b057ea9f61ac29d646a5aaf490920014"
},
"downloads": -1,
"filename": "factura_com_cfdi-0.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "32b9b0864811f68c0f94e47487e3ef0c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 8099,
"upload_time": "2024-02-28T21:19:37",
"upload_time_iso_8601": "2024-02-28T21:19:37.394965Z",
"url": "https://files.pythonhosted.org/packages/1c/11/38d71b0c8f44a3dff3f4f875e71f5a108609e8a4a0b3756f44f3679bdb54/factura_com_cfdi-0.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "58f2ce5ce33280fc5244e3e808ead5872b52a1c2d2c83563cbf8f274c0ceeb16",
"md5": "719bb14ded4bbbc074c916c6faea4a84",
"sha256": "f6e58588577a22ae15e7cd2893822d20f044ae7d3eb61b4619773dc5d0f3e285"
},
"downloads": -1,
"filename": "factura_com_cfdi-0.0.2.tar.gz",
"has_sig": false,
"md5_digest": "719bb14ded4bbbc074c916c6faea4a84",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7784,
"upload_time": "2024-02-28T21:19:39",
"upload_time_iso_8601": "2024-02-28T21:19:39.183364Z",
"url": "https://files.pythonhosted.org/packages/58/f2/ce5ce33280fc5244e3e808ead5872b52a1c2d2c83563cbf8f274c0ceeb16/factura_com_cfdi-0.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-28 21:19:39",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "factura-com-cfdi"
}