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]')