WhyNotHugo / django-afip

⚖️ AFIP invoice integration for django.
https://django-afip.readthedocs.io/
ISC License
48 stars 24 forks source link

Se pueden generar: Factura de Crédito electrónica MiPyMEs (FCE) A? #180

Closed FrancoMilanesio closed 1 year ago

FrancoMilanesio commented 1 year ago

Contexto: Dentro de lo que seria las Ventas estamos teniendo Clientes que necesitan generar comprobantes FCE A es decir "Factura de Crédito Electrónica" y por lo que deducimos la API-AFIP si recibe este tipo de "receipt" dentro de los "receipttype" por lo que decidimos darle luz verde al proyecto.

Problemática: Al momento de desarrollar nos encontramos que el recipt se guarda correctamente en el modelo "Receipt" pero al momento de querer validar el mismo para la obtención del "cae" nos encontramos con el siguiente error de AFIP: "Error inesperado": "Error 10163: El campo FchVtoPago es obligatorio informar si es una Factura de Credito.". Asi que deducimos que necesitamos generar un POST para enviar ese dato entre otros(CBU, ALIAS, etc).

Las consultas son las siguientes: 1)¿La API puede recibir estos tipos de comprobantes? 2)De ser afirmativa la respuesta anterior. ¿se podria brindar la documentación por la cual guiarnos para poder llevar a cabo este POST?

WhyNotHugo commented 1 year ago

Dentro de lo que seria las Ventas estamos teniendo Clientes que necesitan generar comprobantes FCE A es decir "Factura de Crédito Electrónica" y por lo que deducimos la API-AFIP si recibe este tipo de "receipt" dentro de los "receipttype" por lo que decidimos darle luz verde al proyecto.

Correcto, entiendo es este tipo.

"Error inesperado": "Error 10163: El campo FchVtoPago es obligatorio informar si es una Factura de Credito.".

Este sería el campo Receipt.expiration_date. Por lo que dice el error, entiendo debería ser no-nulo y tu instancia tiene expiration_date = None.

FrancoMilanesio commented 1 year ago

Buenas @WhyNotHugo gracias por responder!.

En el POST al Receipt estoy definiendo un expiration_date que se toma desde el front, es decir que el expirationdate != None pero aun asi al momento de realizar el receipt.validate(raise=True) me sigue arrojando el error:

"Error inesperado": "Error 10163: El campo FchVtoPago es obligatorio informar si es una Factura de Credito.".

puede ser que el campo expiration_date es solo para la fecha de expiracion del Receipt? el post se debería hacer de otra forma?

Alvezgr commented 1 year ago

@WhyNotHugo @FrancoMilanesio El error podría estar siendo causado cuando se serializan los receipts? https://github.com/WhyNotHugo/django-afip/blob/e6e03f6ddf9c401b9a836bebfc299f665f6b60a8/django_afip/serializers.py#L81-L84 Podrias verificar esos concept codes 2 y 3.

Para el caso del concept code = 1 tal vez se deberia agregar un fix para los comprobantes: MiPyMEs (FCE), Tipo 201. FACTURA DE CREDITO ELECTRONICA MiPyMEs (FCE) A / 206. FACTURA DE CREDITO ELECTRONICA MiPyMEs (FCE) B / 211. FACTURA DE CREDITO ELECTRONICA MiPyMEs (FCE) C, ya que tambien es obligatorio informar FchVtoPago para esos comprobantes.

WhyNotHugo commented 1 year ago

Eso debería ser:

 if receipt.expiration_date is not None:
     serialized.FchVtoPago = serialize_date(receipt.expiration_date) 

Podés probar y confirmarme si functiona?

FrancoMilanesio commented 1 year ago

@WhyNotHugo @Alvezgr Probé lo anterior planteado y funciono, pero surgió un nuevo error:

"Error inesperado": "Error 10162: Si el comprobante es MiPyMEs (FCE) es obligatorio informar opcionales. Ver metodo FEParamGetTiposOpcional()"

WhyNotHugo commented 1 year ago

Me parece que sos el primero en intentar usar FCEA (personalmente sólo usé facturas y notas de crédito B y C).

https://github.com/WhyNotHugo/django-afip/blob/e6e03f6ddf9c401b9a836bebfc299f665f6b60a8/django_afip/models.py#L1185

Sospecho que se pueden implementar rápido con otro GenericAfipType. https://github.com/WhyNotHugo/django-afip/blob/e6e03f6ddf9c401b9a836bebfc299f665f6b60a8/django_afip/models.py#L225-L248

seralizers.py necesita también una adición en serialize_receipt. Creo que serialized.Tributos y serialized.Iva sirven de referencia.

FrancoMilanesio commented 1 year ago

Buenas @WhyNotHugo perfecto voy a tratar de implementarlo para poder utilizarlo :)

Alvezgr commented 1 year ago

@FrancoMilanesio Ya estás trabajando en el issue?

Edited: Create a PR to support AFIP optionals. #181

WhyNotHugo commented 1 year ago

Fixed via https://github.com/WhyNotHugo/django-afip/pull/181