API Web - Facturama/facturama-python-sdk GitHub Wiki

Operaciones generales del CFDI

Clientes

Crear Nuevo Cliente

import facturama

facturama._credentials = ('username', 'password')

customer_object = {
	"Id":"",
	"Rfc": "URE180429TM6",
    "Name": "UNIVERSIDAD ROBOTICA ESPAÑOLA",
    "FiscalRegime": "601",
    "Email": "[email protected]",
    "CfdiUse": "G03",
    "TaxResidence": "65000",
    "NumRegIdTrib": "131494-1055",
    "TaxZipCode": "65000",
    "Address": 
	{
        "Street": "Calle de Pruebas",
        "ExteriorNumber": "123",
        "InteriorNumber": "456",
        "Neighborhood": "COLOMBIA",
        "ZipCode": "65000",
        "Locality": "NUEVO LEON",
        "Municipality": "ANAHUAC",
        "State": "NUEVO LEON",
        "Country": "Mex"
    }}
customer = facturama.Client.create(customer_object)

Listar Clientes:

import facturama

facturama._credentials = ('username', 'password')
customers = facturama.Client.all()

Lista páginada de Clientes:

import facturama

facturama._credentials = ('username', 'password')
#ListarClientesPaginado
#list(start,length,search)
#Start: Indice incial (0-n)
#Length: Tamaño de registros mostrados (1-100)
#Search: Palabra clave 
lst_clients=facturama.Client.list(0,100,"")
#Total de registros
print(lst_clients["recordsTotal"])
#Total de registros filtrados
print(lst_clients["recordsFiltered"])
#Muestra el contenido del registro '0'
print(lst_clients["data"][0])
#muestra el ID del del registro '0'
print(lst_clients["data"][0]['Id'])

Eliminar un cliente

facturama.Client.delete('xEiRPj1PBMfz6tYNZ5FJKQ2')

Editar un cliente

facturama._credentials = ('username', 'password')
    customer_object = {
	"Id":"xEiRPj1PBMfz6tYNZ5FJKQ2",
	"Rfc": "URE180429TM6",
    "Name": "UNIVERSIDAD ROBOTICA ESPAÑOLA",
    "FiscalRegime": "601",
    "Email": "[email protected]",
    "CfdiUse": "G03",
    "TaxResidence": "65000",
    "NumRegIdTrib": "131494-1055",
    "TaxZipCode": "65000",
    "Address": 
	{
        "Street": "Calle de Pruebas",
        "ExteriorNumber": "123",
        "InteriorNumber": "456",
        "Neighborhood": "COLOMBIA",
        "ZipCode": "65000",
        "Locality": "NUEVO LEON",
        "Municipality": "ANAHUAC",
        "State": "NUEVO LEON",
        "Country": "Mex"
    }}

    updateCustumer=facturama.Client.update(customer_object,'xEiRPj1PBMfz6tYNZ5FJKQ2')
    print(facturama.Client.retrieve('xEiRPj1PBMfz6tYNZ5FJKQ2'))

Cliente filtrado por ID:

import facturama

facturama._credentials = ('username', 'password')
customer = facturama.Client.retrieve('98DY-y6qSikkykW2nhp9kw2')

Cliente filtrado por RFC:

import facturama

facturama._credentials = ('username', 'password')
customer = facturama.Client.listByRfc("EKU9003173C9")

Productos

Crear un Nuevo Producto

import facturama

facturama._credentials = ('username', 'password')

product_object = {
      "Unit": "Servicio",
      "UnitCode": "E48",
      "IdentificationNumber": "WEB003",
      "Name": "Sitio Web CMS",
      "Description": "Desarrollo de sitio web empleando un CMS",
      "Price": 6500,
      "CodeProdServ": "43232408",
      "CuentaPredial": "123",
      "Taxes": [
        {
          "Name": "IVA",
          "Rate": 0.16,
          "IsRetention": False,
          "IsFederalTax": True
        },
        {
          "Name": "ISR",
          "IsRetention": True,
          "IsFederalTax": True,
          "Total": 0.10
        },
        {
          "Name": "IVA",
          "IsRetention": True,
          "IsFederalTax": True,
          "Total": 0.106667
        }
      ]
    }

product = facturama.Product.create(product_object)

Listar Productos:

import facturama

facturama._credentials = ('username', 'password')
products = facturama.Product.all()

Lista pagianda de Productos:

import facturama

facturama._credentials = ('username', 'password')
#ListarProductosPaginado
#list(start,length,search)
#Start: Indice incial (0-n)
#Length: Tamaño de registros mostrados (1-100)
#Search: Palabra clave 
lst_product=facturama.Product.list(0,100,"")
#Total de registros
print(lst_product["recordsTotal"])
#Total de registros filtrados
print(lst_product["recordsFiltered"])
#Muestra el contenido del registro '0'
print(lst_product["data"][1])
#muestra el ID del del registro '0'
print(lst_product["data"][0]['Id'])

Obtener producto por ID

facturama.Product.retrieve('xEiRPj1PBMfz6tYNZ5FJKQ2')

Eliminar producto

facturama.Product.delete('xEiRPj1PBMfz6tYNZ5FJKQ2')

Lugares de Expedición

Crear nueva Sucursal (Branch Office)

import facturama 

facturama._credentials = ('username', 'password')

branch_office_object = {
    "Name": "Corp Inc",
    "Description": "Desc corp",
    "Address": {
        "Street": "Fenix One",
        "ExteriorNumber": "1",
        "InteriorNumber": "0",
        "Neighborhood": "Call me",
        "ZipCode": "59510",
        "Locality": "Xiquilpan",
        "Municipality": "Jiquilpan",
        "State": "MICHOACAN DE OCAMPO",
        "Country": "MX"
    },
}

branch = facturama.BranchOffice.create(branch_office_object)

Listar Sucursales:

import facturama

facturama._credentials = ('username', 'password')
sucursales = facturama.BranchOffice.all()

CFDI 3.3

CFDI 3.3 de tipo ingreso

Documentación en https://api.facturama.mx/Docs

import facturama 

facturama._credentials = ('username', 'password')

cfdi_object = {
        "Folio": "100",
        "ExpeditionPlace": "78140",
        "PaymentConditions": "CREDITO A SIETE DIAS",
        "CfdiType": "I",
        "PaymentForm": "03",
        "PaymentMethod": "PUE",
        "Receiver": {
            "Rfc": "URE180429TM6",
            "Name": "UNIVERSIDAD ROBOTICA ESPAÑOLA",
            "CfdiUse": "G03",
            "FiscalRegime": "601",
            "TaxZipCode": "65000"
        },
        "Items": [
            {
                "ProductCode": "10101504",
                "IdentificationNumber": "EDL",
                "Description": "Estudios de viabilidad",
                "Unit": "NO APLICA",
                "UnitCode": "MTS",
                "UnitPrice": 50.0,
                "Quantity": 2.0,
                "Subtotal": 100.0,
                "TaxObject": "02",
                "Taxes": [
                    {
                        "Total": 16.0,
                        "Name": "IVA",
                        "Base": 100.0,
                        "Rate": 0.16,
                        "IsRetention": False
                    }
                ],
                "Total": 116.0
            },
            {
                "ProductCode": "10101504",
                "IdentificationNumber": "001",
                "Description": "SERVICIO DE COLOCACION",
                "Unit": "NO APLICA",
                "UnitCode": "E49",
                "UnitPrice": 100.0,
                "Quantity": 15.0,
                "Subtotal": 1500.0,
                "Discount": 0.0,
                "TaxObject": "02",
                "Taxes": [
                    {
                        "Total": 240.0,
                        "Name": "IVA",
                        "Base": 1500.0,
                        "Rate": 0.16,
                        "IsRetention": False
                    }
                ],
                "Total": 1740.0
            }
        ]
    }


cfdi = facturama.Cfdi.create(cfdi_object)


CFDI Complemento de pago

import facturama 

facturama._credentials = ('username', 'password')
facturama.sandbox = True
cfdi_object_complemento_pago = {
        "Receiver": {
            "Name": "SERVICIOS ADMINISTRATIVOS AXKAN DEL BAJIO S.C",
            "CfdiUse": "P01",
            "Rfc": "XEXX010101000"
        },
        "CfdiType": "P",
        "NameId": "1",
        "Folio": "93",
        "ExpeditionPlace": "51873",
        "Complemento": {
            "Payments": [{
                "Date": "2018-10-04",
                "PaymentForm": "03",
                "Amount": "11142.21",
                "RelatedDocuments": [{
                    "Uuid": "C94C8AF3-C774-4D4C-802E-781411934A6E",
                    "Serie": "BQ",
                    "Folio": "2205",
                    "Currency": "USD",
                    "ExchangeRate": "19.2107",
                    "PaymentMethod": "PUE",
                    "PartialityNumber": "1",
                    "PreviousBalanceAmount": "1160.00",
                    "AmountPaid": "580.00",
                    "ImpSaldoInsoluto": "580.00"
                }]
            }]
        }
    }
cfdi = facturama.Cfdi.create(cfdi_object_complemento_pago)

CFDI Complemento de pago por cuentas de terceros

import facturama 

facturama._credentials = ('username', 'password')
facturama.sandbox = True

cfdi_object_complemento_terceros={
        "Receiver": {
            "Name": "Jose de Jesus Romero Alvarado",
            "CfdiUse": "G03",
            "Rfc": "ROAJ850914837"
        },
        "CfdiType": "I",
        "NameId": "01",
        "ExpeditionPlace": "45037",
        "PaymentForm": "01",
        "PaymentMethod": "PUE",
        "Decimals": "2",
        "Currency": "MXN",
        "Date": "2019-06-19T12:45:29",
        "Items": [{
            "Quantity": "1",
            "ProductCode": "10121806",
            "UnitCode": "58",
            "Unit": " kilogramo neto",
            "Description": "consumo",
            "IdentificationNumber": "-",
            "UnitPrice": "1000",
            "Subtotal": "1000.00",
            "Taxes": [{
                "Name": "IVA",
                "Rate": "0.16",
                "Total": "160",
                "Base": "1000",
                "IsRetention": "false",
                "IsFederalTax": "true"
            }],
            "Total": "1160.00",
            "Complement": {
                "ThirdPartyAccount": {
                    "Rfc": "ESO1202108R2",
                    "Name": "Expresion en Software",
                    "Taxes": [{
                        "Name": "IVA",
                        "Rate": "0.16",
                        "Amount": "1000"
                    }]
                }
            }
        }]
    }
    
cfdi = facturama.Cfdi.create(cfdi_object_complemento_terceros)

CFDI 4.0 de Tipo Ingreso

import facturama 

facturama._credentials = ('username', 'password')

cfdi4_object = {
        "Folio": "100",
        "ExpeditionPlace": "78140",
        "PaymentConditions": "CREDITO A SIETE DIAS",
        "CfdiType": "I",
        "PaymentForm": "03",
        "PaymentMethod": "PUE",
        "Receiver": {
            "Rfc": "EKU9003173C9",
            "Name": "ESCUELA KEMPER URGATE",
            "CfdiUse": "G03",
            "FiscalRegime": "603",
            "TaxZipCode": "26015"
        },
        "Items": [
            {
                "ProductCode": "10101504",
                "IdentificationNumber": "EDL",
                "Description": "Estudios de viabilidad",
                "Unit": "NO APLICA",
                "UnitCode": "MTS",
                "UnitPrice": 50.0,
                "Quantity": 2.0,
                "Subtotal": 100.0,
                "TaxObject": "02",
                "Taxes": [
                    {
                        "Total": 16.0,
                        "Name": "IVA",
                        "Base": 100.0,
                        "Rate": 0.16,
                        "IsRetention": False
                    }
                ],
                "Total": 116.0
            }
        ]
    }


cfdi = facturama.Cfdi.create3(cfdi_object)

Descarga CFDI:

import facturama

facturama._credentials = ('username', 'password')
facturama.sandbox = True
html_file = facturama.Cfdi.saveAsHtml('7eo51BvzV-E16gBx3nnxfQ2', 'nombreArchivo.html')
pdf_file = facturama.Cfdi.saveAsPdf('7eo51BvzV-E16gBx3nnxfQ2', 'nombreArchivo.pdf')


Cancelar CFDI:

Consulta la guía en el siguiente link: https://apisandbox.facturama.mx/guias/api-web/cfdi/cancelacion

  • Estructura- facturama.Cfdi.delete(cfdiId, type, motive, uuidReplacement)
  • type=(issued or payroll)
  • motive=(01 or 02 or 03 or 04)
  • uuidReplacement=(UUID or null)
import facturama

facturama._credentials = ('username', 'password')
facturama.Cfdi.delete('OwMgofF7ZDEM60gerUXudw1','issued', '01', '50AD4DD3-8BA1-4A28-BC1B-F7CD61A8F93D')

Listar CFDI:

Por tipo, keyword, status mas información en: https://api.facturama.mx/docs/api/GET-Cfdi_type_keyword_status

import facturama

facturama._credentials = ('username', 'password')
lista = facturama.Cfdi.list('issued','Expresion en Software','all')

Enviar CFDI por mail:

import facturama

facturama._credentials = ('username', 'password')
facturama.Cfdi.send_by_email('issued','GgQKVvV84IlgmFCMqJVraQ2','[email protected]')