tryton-ar/account_invoice_ar

WSFEX: pyafipws devuelve id de comprobante en vez de contabilizarlo

lukio opened this issue · 2 comments

lukio commented

WSFEX pyafipws intenta reprocesar un comprobante cuando se le envía un ID. En vez de contabilizar un nuevo comprobante devuelve un xml con la información para poder reprocesar y recuperar una factura existente.

Expected nothing
Got:
    '<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n<soap:Header/>\n<soap:Body>\n    <FEXAuthorize xmlns="http://ar.gov.afip.dif.fexv1/">\n    <Auth><Cuit>30710158254</Cuit></Auth><Cmp><Id>2</Id><Fecha_cbte>20190718</Fecha_cbte><Cbte_Tipo>21</Cbte_Tipo><Punto_vta>5000</Punto_vta>
<Cbte_nro>1</Cbte_nro><Tipo_expo>2</Tipo_expo><Permiso_existente></Permiso_existente><Dst_cmp>159</Dst_cmp><Cliente>Party</Cliente><Cuit_pais_cliente>55000001715</Cuit_pais_cliente><Domicilio_cliente>
 -  -  - </Domicilio_cliente><Moneda_Id>PES</Moneda_Id><Moneda_ctz>1.000000</Moneda_ctz><Obs_comerciales>Term</Obs_comerciales><Imp_total>220.00</Imp_total>
<Forma_pago>Term</Forma_pago><Incoterms>FOB</Incoterms><Incoterms_Ds>FREE ON BOARD</Incoterms_Ds><Idioma_cbte>1</Idioma_cbte><Items><Item><Pro_ds>-</Pro_ds><Pro_qty>5.0</Pro_qty>
<Pro_umed>7</Pro_umed><Pro_precio_uni>40</Pro_precio_uni><Pro_total_item>200.00</Pro_total_item></Item><Item><Pro_codigo>0</Pro_codigo><Pro_ds>Test</Pro_ds><Pro_qty>1.0</Pro_qty>
<Pro_umed>7</Pro_umed><Pro_precio_uni>20</Pro_precio_uni><Pro_total_item>20.00</Pro_total_item></Item></Items></Cmp></FEXAuthorize>\n</soap:Body>\n</soap:Envelope>'

----------------------------------------------------------------------
File "/opt/trytond/untref5/modules_extra/account_invoice_ar/tests/scenario_invoice_pos_electronic_wsfex.rst", line 314, in scenario_invoice_pos_electronic_wsfex.rst
Failed example:
    credit_note.transactions[0].pyafipws_xml_response
Expected nothing
Got:
    '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Header><FEHeaderInfo xmlns="http://ar.gov.afip.dif.fexv1/"><ambiente>Homologacion - efa</ambiente>
<fecha>2019-07-18T16:21:52.6216477-03:00</fecha><id>1.5.4.0</id></FEHeaderInfo></soap:Header><soap:Body><FEXAuthorizeResponse xmlns="http://ar.gov.afip.dif.fexv1/"><FEXAuthorizeResult><FEXResultAuth><Id>2</Id><Cuit>30710158254</Cuit><Cbte_tipo>19</Cbte_tipo>
<Punto_vta>3</Punto_vta><Cbte_nro>10</Cbte_nro><Cae>65474004369626</Cae><Fch_venc_Cae>20151129</Fch_venc_Cae><Fch_cbte>20151119</Fch_cbte><Resultado>A</Resultado>
<Reproceso>S</Reproceso><Motivos_Obs /></FEXResultAuth><FEXErr><ErrCode>0</ErrCode><ErrMsg>OK</ErrMsg></FEXErr><FEXEvents><EventCode>0</EventCode><EventMsg>Ok</EventMsg></FEXEvents>
</FEXAuthorizeResult></FEXAuthorizeResponse></soap:Body></soap:Envelope>\r\n'

Este es un error encontrado creando el test para WSFEX #155

lukio commented

De: https://www.sistemasagiles.com.ar/trac/wiki/ManualPyAfipWs#M%C3%A9todos3

Como último paso, se debe llamar al método Authorize con los siguiente parámetros:

  • id: Número de identificación secuencial (debe almacenarse en el sistema local) No es obligatorio llamar a WSFEX.!GetLastID, puede utilizarse un dato local secuencial.

Si no hubiere inconvenientes, la llamada debe devolver el CAE y se establece el atributo WSFEX.Resultado = "A" (Aceptado) y WSFEX.Vencimiento. Sino, devuelve:

  • cae = "": La interfase no pudo procesar la respuesta del WebService, o bien la conexión a internet esta caída, las direcciones de los servidores son incorrectas, o el servicio web rechazo los datos de la factura a generar. Se establece el atributo WSFXE.Resultado = "R" (Rechazado) y WSFEX.Obs con los diversos motivos de rechazo proporcionados por el webservice (ver WSFE.Motivo):

Aún devolviendo el CAE y con el resultado Aceptado, puede haber un motivo (ej 01), que funcionan como advertencia para revisar la base de datos y corregir posibles irregularidades.

Advertencia: Revisar las consideraciones de reproceso al igual que con WSFE.

lukio commented

Se esta enviando id del registro en vez de invocar a GetLastID. Tampoco se esta guardando una secuencia específica para esto. Lo mejor es llamar siempre a GetLastID antes de llamar a Authorize.

Agregar un campo nuevo llamado pyafipws_wsfex_id para guardar el id enviado?