WhyNotHugo/django-afip

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

FrancoMilanesio opened this issue · 9 comments

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?

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.

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 expiration_date != 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?

@WhyNotHugo @FrancoMilanesio El error podría estar siendo causado cuando se serializan los receipts?

if int(receipt.concept.code) in (2, 3):
serialized.FchServDesde = serialize_date(receipt.service_start)
serialized.FchServHasta = serialize_date(receipt.service_end)
serialized.FchVtoPago = serialize_date(receipt.expiration_date)

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.

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?

@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()"

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

# TODO: Not implemented: optionals

Sospecho que se pueden implementar rápido con otro GenericAfipType.

class ConceptType(GenericAfipType):
"""An AFIP concept type.
See the AFIP's documentation for details on each concept type.
"""
objects = GenericAfipTypeManager("FEParamGetTiposConcepto", "ConceptoTipo")
class Meta:
verbose_name = _("concept type")
verbose_name_plural = _("concept types")
class DocumentType(GenericAfipType):
"""An AFIP document type.
See the AFIP's documentation for details on each document type.
"""
objects = GenericAfipTypeManager("FEParamGetTiposDoc", "DocTipo")
class Meta:
verbose_name = _("document type")
verbose_name_plural = _("document types")

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

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

@FrancoMilanesio Ya estás trabajando en el issue?

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

Fixed via #181