Create CFDI
Comprobante
from decimal import Decimal
from satcfdi.models import Signer
from satcfdi.create.cfd import cfdi40
from satcfdi.create.cfd.catalogos import RegimenFiscal, UsoCFDI, MetodoPago, Impuesto, TipoFactor
# Load signing certificate
signer = Signer.load(
certificate=open('csd/xiqb891116qe4_csd.cer', 'rb').read(),
key=open('csd/xiqb891116qe4_csd.key', 'rb').read(),
password=open('csd/xiqb891116qe4_csd.txt', 'r').read()
)
# create Comprobante
invoice = cfdi40.Comprobante(
emisor=cfdi40.Emisor(
rfc=signer.rfc,
nombre=signer.legal_name,
regimen_fiscal=RegimenFiscal.GENERAL_DE_LEY_PERSONAS_MORALES
),
lugar_expedicion="56820",
receptor=cfdi40.Receptor(
rfc='KIJ0906199R1',
nombre='KIJ, S.A DE C.V.',
uso_cfdi=UsoCFDI.GASTOS_EN_GENERAL,
domicilio_fiscal_receptor="59820",
regimen_fiscal_receptor=RegimenFiscal.GENERAL_DE_LEY_PERSONAS_MORALES
),
metodo_pago=MetodoPago.PAGO_EN_PARCIALIDADES_O_DIFERIDO,
serie="A",
folio="123456",
conceptos=[
cfdi40.Concepto(
clave_prod_serv='84111506',
cantidad=Decimal('1.00'),
clave_unidad='E48',
descripcion='SERVICIOS DE FACTURACION',
valor_unitario=Decimal('1250.30'),
impuestos=cfdi40.Impuestos(
traslados=cfdi40.Traslado(
impuesto=Impuesto.IVA,
tipo_factor=TipoFactor.TASA,
tasa_o_cuota=Decimal('0.160000'),
),
retenciones=[
cfdi40.Retencion(
impuesto=Impuesto.ISR,
tipo_factor=TipoFactor.TASA,
tasa_o_cuota=Decimal('0.100000'),
),
cfdi40.Retencion(
impuesto=Impuesto.IVA,
tipo_factor=TipoFactor.TASA,
tasa_o_cuota=Decimal('0.106667'),
)
],
)
)
]
)
invoice.sign(signer)
invoice = invoice.process()
Nomina
from datetime import date
from decimal import Decimal
from satcfdi.models import Signer
from satcfdi.create.cfd import cfdi40, nomina12
# Load signing certificate
signer = Signer.load(
certificate=open('csd/xiqb891116qe4_csd.cer', 'rb').read(),
key=open('csd/xiqb891116qe4_csd.key', 'rb').read(),
password=open('csd/xiqb891116qe4_csd.txt', 'r').read()
)
# create Comprobante
invoice = cfdi40.Comprobante.nomina(
emisor=cfdi40.Emisor(
rfc=signer.rfc,
nombre=signer.legal_name,
regimen_fiscal="601"
),
receptor=cfdi40.Receptor(
rfc='KIJ0906199R1',
nombre='KIJ, S.A DE C.V.',
uso_cfdi='G03',
domicilio_fiscal_receptor="59820",
regimen_fiscal_receptor="601"
),
lugar_expedicion="56820",
complemento_nomina=nomina12.Nomina(
emisor=nomina12.Emisor(
registro_patronal='Z1234567890'
),
receptor=nomina12.Receptor(
cuenta_bancaria='0001000200030004',
curp='XIQB891116MCHZRL72',
clave_ent_fed='MOR',
num_empleado='12345678',
periodicidad_pago='04',
tipo_contrato='01',
tipo_regimen='02'
),
percepciones=nomina12.Percepciones(
percepcion=nomina12.Percepcion(
tipo_percepcion='001',
clave='001',
concepto='SUELDO',
importe_gravado=Decimal('1200'),
importe_exento=Decimal('400')
)
),
deducciones=nomina12.Deducciones(
deduccion=nomina12.Deduccion(
tipo_deduccion='002',
clave='300',
concepto='ISR A CARGO',
importe=Decimal('1234.73')
)
),
tipo_nomina='O',
fecha_pago=date(2020, 1, 30),
fecha_final_pago=date(2020, 1, 31),
fecha_inicial_pago=date(2020, 1, 16),
num_dias_pagados=Decimal('16.000')
),
serie="A",
folio="123456"
)
invoice.sign(signer)
invoice = invoice.process()
Pago
from datetime import date, datetime
from decimal import Decimal
from satcfdi.models import Signer
from satcfdi.create.cfd import cfdi40, pago20
# Load signing certificate
signer = Signer.load(
certificate=open('csd/xiqb891116qe4_csd.cer', 'rb').read(),
key=open('csd/xiqb891116qe4_csd.key', 'rb').read(),
password=open('csd/xiqb891116qe4_csd.txt', 'r').read()
)
# create Comprobante
invoice = cfdi40.Comprobante.pago(
emisor=cfdi40.Emisor(
rfc=signer.rfc,
nombre=signer.legal_name,
regimen_fiscal="601"
),
receptor=cfdi40.Receptor(
rfc='KIJ0906199R1',
nombre='KIJ, S.A DE C.V.',
uso_cfdi='G03',
domicilio_fiscal_receptor="59820",
regimen_fiscal_receptor="601"
),
lugar_expedicion="56820",
complemento_pago=pago20.Pagos(
pago=pago20.Pago(
fecha_pago=datetime(2020, 1, 1),
forma_de_pago_p='03',
moneda_p='MXN',
tipo_cambio_p=1,
docto_relacionado=pago20.DoctoRelacionado(
id_documento='d6042dc8-d525-4e78-8d1b-092c878bd518',
imp_pagado=Decimal("100.3"),
imp_saldo_ant=Decimal("203.45"),
num_parcialidad=3,
moneda_dr="MXN",
objeto_imp_dr="01"
)
)
),
serie="A",
folio="123456"
)
invoice.sign(signer)
invoice = invoice.process()
Pago a partir de un Comprobante
from datetime import datetime
from satcfdi.models import Signer
from satcfdi.cfdi import CFDI
from satcfdi.create.cfd import cfdi40
# Load signing certificate
signer = Signer.load(
certificate=open('csd/xiqb891116qe4_csd.cer', 'rb').read(),
key=open('csd/xiqb891116qe4_csd.key', 'rb').read(),
password=open('csd/xiqb891116qe4_csd.txt', 'r').read()
)
# load comprobante
cfdi = CFDI.from_file('comprobante.xml')
# create Comprobante
invoice = cfdi40.Comprobante.pago_comprobantes(
emisor=cfdi40.Emisor(
rfc=signer.rfc,
nombre=signer.legal_name,
regimen_fiscal="601"
),
lugar_expedicion="56820",
comprobantes=cfdi,
fecha_pago=datetime.now(),
forma_pago="03",
serie="A",
folio="123456"
)
invoice.sign(signer)
invoice = invoice.process()
Addenda
from decimal import Decimal
from satcfdi.create.cfd.catalogos import Impuesto, TipoFactor
from satcfdi.models import Signer
from satcfdi.create.addendas import dvz11
from satcfdi.create.cfd import cfdi40
# Load signing certificate
signer = Signer.load(
certificate=open('csd/xiqb891116qe4_csd.cer', 'rb').read(),
key=open('csd/xiqb891116qe4_csd.key', 'rb').read(),
password=open('csd/xiqb891116qe4_csd.txt', 'r').read()
)
# create Comprobante
invoice = cfdi40.Comprobante(
emisor=cfdi40.Emisor(
rfc=signer.rfc,
nombre=signer.legal_name,
regimen_fiscal="601"
),
lugar_expedicion="56820",
receptor=cfdi40.Receptor(
rfc='KIJ0906199R1',
nombre='KIJ, S.A DE C.V.',
uso_cfdi='G03',
domicilio_fiscal_receptor="59820",
regimen_fiscal_receptor="601"
),
metodo_pago='PPD',
serie="A",
folio="123456",
conceptos=[
cfdi40.Concepto(
clave_prod_serv='84111506',
cantidad=Decimal('1.00'),
clave_unidad='E48',
descripcion='SERVICIOS DE FACTURACION',
valor_unitario=Decimal('325.30'),
impuestos=cfdi40.Impuestos(
traslados=cfdi40.Traslado(
impuesto=Impuesto.IVA,
tipo_factor=TipoFactor.TASA,
tasa_o_cuota=Decimal('0.160000'),
),
retenciones=[
cfdi40.Retencion(
impuesto=Impuesto.ISR,
tipo_factor=TipoFactor.TASA,
tasa_o_cuota=Decimal('0.100000'),
),
cfdi40.Retencion(
impuesto=Impuesto.IVA,
tipo_factor=TipoFactor.TASA,
tasa_o_cuota=Decimal('0.106667'),
)
],
)
)
],
addenda=dvz11.Diverza(
generales=dvz11.Generales(
tipo_documento="Factura"
)
)
)
invoice.sign(signer)
invoice = invoice.process()