Uso
Glosario
Tené en cuenta estos términos mientras leas la documentación. Nótese que no estamos reinventando nada acá, estos son los términos que usa el AFIP, aunque pueden ser no-obvios para desarrolladores.
Contribuyente /
TaxPayer
: La persona o entidad de parte de la cual vas a estar generando comprobantes.Comprobante /
Receipt
: Estos pueden ser facturas, notas de créditos, etc.Punto de ventas /
PointOfSales
: Cada punto de ventas sigue una secuencia de numeración propia. El punto de ventas 9 emite comprobantes con números0009-00000001
,0009-00000002
, etc.
Cómo empezar
Antes que nada, deberías crear una instancia de la clase TaxPayer
.
Vas a necesitar generar claves y registrarlas con el AFIp antes de poder
continuar (más detalles más abajo).
django-afip
incluye un vistas del admin para cada modelo incluido, y es la
forma recomendad de crear un TaxPayer
, al menos durante desarrollo y
deploys iniciales.
Crear una clave privada
Hay tres formas de crear una clave privada, las cuales dan resultados equivalentes:
Seguí las: instrucciones oficiales.
Usá el método
generate_key()
. Esto genera la clave y la guarda en el sistema.Usando el admin, usá la acción “generate key”. Esto es simplemente un wrapper a la función (2) que te ofrece guardar el archivo que necesitás mandar al AFIP.
La recomendación es usar la última de estas opciones, dado que es la más fácil, o, en caso de no estar usando el admin, la segunda opción.
Registración de clave con el AFIP
Vas a necesitar registrar tu clave con el AFIP:
Vas a obtener un certificado durante este proceso. Deberías asignar este
certificado al atributo certificate
de tu TaxPayer
(de nuevo, podés
hacer esto mediante el admin).
Obtención de puntos de ventas
Una vez que hayas creado un TaxPayer
, vas a necesitar sus puntos de
venta. Esto podés hacerlo mediante el admin (útil durando expirimentación /
desarrollo) usando “fetch points of sales”, o usando
fetch_points_of_sales()
.
Resúmen
Este ejemplo muestra como setear una clave y certificado existentes, y demás pasos de forma programatica:
from django.core.files import File
from django_afip import models
# Create a TaxPayer object:
taxpayer = models.TaxPayer(
pk=1,
name='test taxpayer',
cuit=20329642330,
is_sandboxed=True,
)
# Add the key and certificate files to the TaxPayer:
with open('/path/to/your.key') as key:
taxpayer.key.save('test.key', File(key))
with open('/path/to/your.crt') as crt:
taxpayer.certificate.save('test.crt', File(crt))
taxpayer.save()
# Load all metadata:
models.load_metadata()
# Get the TaxPayer's Point of Sales:
taxpayer.fetch_points_of_sales()
Validación de comprobantes
Tras completar los pasos anteriores ya deberías estar listo para emitir comprobantes.
El primer paso es crear un comprobante, creando una instancia de
Receipt
.
Para validar el comprobante, usá el método Receipt.validate()
.
Recomendamos no especificar un ticket explíticatmente y dejar que la librería
se encargue de la autenticación
Acerca del admin
La mayoría de los modelos incluyen vistas del admin. Si necesitás cambios, te recomendamos usar subclases y evitar re-escribirlas.
Las vistas del admin incluídas actualmente están más orientadas a desarrolladores (para desarrollo, testeo manual, y inspeccionar producción), o para usuarios técnicos de bajo volúmen. No están diseñadas para el usuario final o usuarios no-técnicos.
Type annotations
Most of this library’s public interface includes type annotations. Applications
using this library may use mypy
and django-stubs
to perform
type-checking and find potential issues earlier in the development cycle.