Set de pruebas POS — modo V1 y V2

QA http://mp.tipre.com:18087 · ejecutado 2026-07-02 (re-corrido tras redeploy del jar con el fix del caso 16) · AFIP HOMOLOGACIÓN (online, TA vigente)
Entorno: comercios ATB (ente 1, cuit 27210393124) y AM (ente 1010, cuit 20181726149). POS de ATB: suc 1/pos 1 (PV CAE 1, CAEA 2) · suc 1/pos 2 (PV CAE 3, CAEA 4) · suc 901/pos 249 (PV 4059/3059). AM sin POS configurados.
Identificación del comercio: V1 = ente.id · V2 = cuit ("aceptar ambos"). Protocolo CAE: V1 = el POS numera (ptoVta+comprobante) · V2 = el server numera por nroTicketPos+nroSuc/nroPos.
SOAP: 1.2 → Content-Type: application/soap+xml; charset=utf-8, POST a http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS. Ticket usado en esta corrida: QADOC-1782998217.
⚠ Los casos de la OP 4 emiten comprobantes REALES contra AFIP homologación. Para reusar: pedir primero el último autorizado (OP 2) y numerar +1 en V1; en V2 usar un nroTicketPos NUEVO (un reintento con el mismo ticket devuelve el CAE ya emitido — ver el caso de IDEMPOTENCIA en la OP 4).
Bug del caso 16 — ARREGLADO y re-verificado en QA. La primera corrida detectó que la consulta V2 por ticket identificando por cuit devolvía un eco sin CAE (el lookup no resolvía cuit→id). Fix en PR#17 (enteResolver.resolve antes del lookup); con el jar actualizado el caso 16 ahora devuelve el CAE correcto. El set de pruebas encontró un bug real y lo cerró.
🔁 Modo LEGACY (OP 1b): getCaea sin parámetros solo resuelve con un único comercio habilitado. Para probarlo deshabilité AM (ente 1010) desde el ABM del cockpit (PATCH /api/cockpit/comercios/1010/deshabilitar, header X-Cockpit-Secret), corrí los casos, y re-habilité AM dejando el entorno igual que antes (ambos comercios habilitados).

Resumen (21 casos)

#CasoModoStatusDuraciónVeredicto
1V1 — identifica por ?ente=1 (ATB) + suc/posV1HTTP 200394ms✔ OK
2V2 — identifica por ?cuit=27210393124 (ATB) + suc/posV2HTTP 200405ms✔ OK
3V2 — comercio AM (cuit 20181726149), sin CAEA vigenteV2HTTP 200738ms✔ OK
4ERROR esperado — cuit inexistenteV2HTTP 500636ms⚠ ERROR ESPERADO
5ERROR esperado — sin ente ni cuit (hay 2 comercios)HTTP 500634ms⚠ ERROR ESPERADO
6LEGACY — getCaea SIN ningún parámetroV1-legacyHTTP 200771ms✔ OK
7LEGACY — con suc/pos pero SIN ente (resuelve el único habilitado)V1-legacyHTTP 200404ms✔ OK
8V1 — enteFacturador.id=1, PV 1, Factura B (tipo 6)V1HTTP 2001396ms✔ OK
9V2 — enteFacturador.cuit, PV 3, Factura BV2HTTP 200927ms✔ OK
10V2 — PV 1, Factura A (tipo 1)V2HTTP 200900ms✔ OK
11Caso borde — PV 9999 desconocidoV1HTTP 200911ms◔ CASO BORDE
12V1 — Factura B $121, el POS numera (PV 1, comprobante 22)V1HTTP 2001503ms✔ OK
13V2 — Factura B $121 por TICKET, el server numera (suc 1 / pos 2)V2HTTP 2001619ms✔ OK
14Factura A COMPLETA — 3 alícuotas IVA + 3 tributos ($3.605)V1HTTP 2001645ms✔ OK
15IDEMPOTENCIA — reenvío del MISMO ticket de 4bV2HTTP 200606ms↻ IDEMPOTENTE
16ERROR esperado — sin enteFacturadorV2HTTP 500405ms⚠ ERROR ESPERADO
17ERROR esperado — INTEGRIDAD FISCAL (AM factura sobre POS de ATB)V2HTTP 500409ms⚠ ERROR ESPERADO
18V1 — por número fiscal (comprobante 22, PV 1, tipo 6)V1HTTP 200401ms✔ OK
19V2 — por TICKET identificando por CUIT (🐞→✔ bug arreglado, re-verificado en QA)V2HTTP 200401ms✔ OK
20V2 — por TICKET identificando por ente.idV2HTTP 200600ms✔ OK
21ERROR esperado — consulta contradictoria (ticket + comprobante)HTTP 500399ms⚠ ERROR ESPERADO

OP 1 — Obtener CAEA · GET /caeaWS/getCaea (REST, público)

✔ OK V1

1. V1 — identifica por ?ente=1 (ATB) + suc/pos

HTTP 200 · 394ms

El POS clásico se identifica por ente.id. Contrato: devuelve los CAEA vigentes, SIEMPRE nropvcae/nropvcaea, y el cuit (el POS v1 no lo conoce → el server se lo devuelve).

CURL (reusable)
curl -s "http://mp.tipre.com:18087/caeaWS/getCaea?ente=1&nrosuc=1&nropos=1"
Response (HTTP 200)
{
  "caeas": [
    {
      "caea": "86260506719220",
      "fchProceso": "20260628010001",
      "fchTopeInf": "20260720",
      "fchVigDesde": "20260701",
      "fchVigHasta": "20260715",
      "orden": 1,
      "periodo": 202607
    }
  ],
  "cuit": "27210393124",
  "nropvcae": "1",
  "nropvcaea": "2"
}
✔ OK V2

2. V2 — identifica por ?cuit=27210393124 (ATB) + suc/pos

HTTP 200 · 405ms

El POS nuevo manda su CUIT. Contrato: CAEAs + nropvcae/nropvcaea y SIN eco del cuit (el POS ya lo sabe).

CURL (reusable)
curl -s "http://mp.tipre.com:18087/caeaWS/getCaea?cuit=27210393124&nrosuc=1&nropos=2"
Response (HTTP 200)
{
  "caeas": [
    {
      "caea": "86260506719220",
      "fchProceso": "20260628010001",
      "fchTopeInf": "20260720",
      "fchVigDesde": "20260701",
      "fchVigHasta": "20260715",
      "orden": 1,
      "periodo": 202607
    }
  ],
  "nropvcae": "3",
  "nropvcaea": "4"
}
✔ OK V2

3. V2 — comercio AM (cuit 20181726149), sin CAEA vigente

HTTP 200 · 738ms

AM no tiene CAEA gestionado en QA: respuesta válida con array vacío (no error).

CURL (reusable)
curl -s "http://mp.tipre.com:18087/caeaWS/getCaea?cuit=20181726149"
Response (HTTP 200)
{
  "caeas": []
}
⚠ ERROR ESPERADO V2

4. ERROR esperado — cuit inexistente

HTTP 500 · 636ms

Fail-closed: HTTP 500 con body CURADO {status,message,ref} (chico, no crashea al POS embebido). Código unificado ENTE_NO_DECLARADO.

CURL (reusable)
curl -s "http://mp.tipre.com:18087/caeaWS/getCaea?cuit=99999999999"
Response (HTTP 500)
{
  "status": 500,
  "message": "ENTE_NO_DECLARADO: no existe EnteFacturador con cuit=99999999999",
  "ref": "883b4630"
}
⚠ ERROR ESPERADO

5. ERROR esperado — sin ente ni cuit (hay 2 comercios)

HTTP 500 · 634ms

Con 2+ comercios habilitados el request DEBE identificar el comercio: ENTE_REQUERIDO claro (no un NonUniqueResultException crudo).

CURL (reusable)
curl -s "http://mp.tipre.com:18087/caeaWS/getCaea?nrosuc=1&nropos=1"
Response (HTTP 500)
{
  "status": 500,
  "message": "ENTE_REQUERIDO: hay 2 comercios habilitados; el request debe declarar ?cuit=NN (o ?ente=N)",
  "ref": "b1f4a444"
}

OP 1b — getCaea LEGACY (single-comercio) · un solo comercio habilitado

✔ OK V1-legacy

6. LEGACY — getCaea SIN ningún parámetro

HTTP 200 · 771ms

El POS V1 legacy no manda nada: GET /caeaWS/getCaea pelado. Con un solo comercio habilitado (deshabilité AM desde el ABM del cockpit y lo re-habilité al terminar) el back-compat single-comercio resuelve el comercio automáticamente y devuelve sus CAEA. Sin suc/pos no hay nropvcae/nropvcaea (idéntico al legacy). Nota: este mismo request con 2 comercios habilitados devuelve ENTE_REQUERIDO (caso 5) — por eso la prueba exige aislar a un comercio.

CURL (reusable)
curl -s "http://mp.tipre.com:18087/caeaWS/getCaea"
Response (HTTP 200)
{
  "caeas": [
    {
      "caea": "86260506719220",
      "fchProceso": "20260628010001",
      "fchTopeInf": "20260720",
      "fchVigDesde": "20260701",
      "fchVigHasta": "20260715",
      "orden": 1,
      "periodo": 202607
    }
  ]
}
✔ OK V1-legacy

7. LEGACY — con suc/pos pero SIN ente (resuelve el único habilitado)

HTTP 200 · 404ms

Mismo modo legacy pero con ?nrosuc=1&nropos=1: resuelve el único comercio habilitado y además agrega nropvcae=1 / nropvcaea=2 desde SucPosPV. Sin eco de cuit (el POS legacy lo obtiene aparte).

CURL (reusable)
curl -s "http://mp.tipre.com:18087/caeaWS/getCaea?nrosuc=1&nropos=1"
Response (HTTP 200)
{
  "caeas": [
    {
      "caea": "86260506719220",
      "fchProceso": "20260628010001",
      "fchTopeInf": "20260720",
      "fchVigDesde": "20260701",
      "fchVigHasta": "20260715",
      "orden": 1,
      "periodo": 202607
    }
  ],
  "nropvcae": "1",
  "nropvcaea": "2"
}

OP 2 — Último comprobante autorizado · SOAP feCompUltimoAutorizado

✔ OK V1

8. V1 — enteFacturador.id=1, PV 1, Factura B (tipo 6)

HTTP 200 · 1396ms

Consulta directa a ARCA con el TA del ente identificado por id. Resultado: último = 21.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @2a-ultimo-v1-ente.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 2a-ultimo-v1-ente.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompUltimoAutorizado xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <enteFacturador><id>1</id></enteFacturador>
        <ultimoCompAutorizado>
          <cbteNro>0</cbteNro>
          <cbteTipo>6</cbteTipo>
          <ptoVta>1</ptoVta>
        </ultimoCompAutorizado>
      </arg0>
    </ns2:feCompUltimoAutorizado>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:feCompUltimoAutorizadoResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <ultimoCompAutorizado>
          <cbteNro>21</cbteNro>
          <cbteTipo>6</cbteTipo>
          <ptoVta>1</ptoVta>
        </ultimoCompAutorizado>
      </return>
    </ns2:feCompUltimoAutorizadoResponse>
  </soap:Body>
</soap:Envelope>
✔ OK V2

9. V2 — enteFacturador.cuit, PV 3, Factura B

HTTP 200 · 927ms

Identificación por CUIT: el server arma el Auth con el TA de ESE comercio (sin mismatch TA/CUIT). Último = 62.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @2b-ultimo-v2-cuit.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 2b-ultimo-v2-cuit.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompUltimoAutorizado xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <enteFacturador><cuit>27210393124</cuit></enteFacturador>
        <ultimoCompAutorizado>
          <cbteNro>0</cbteNro>
          <cbteTipo>6</cbteTipo>
          <ptoVta>3</ptoVta>
        </ultimoCompAutorizado>
      </arg0>
    </ns2:feCompUltimoAutorizado>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:feCompUltimoAutorizadoResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <ultimoCompAutorizado>
          <cbteNro>62</cbteNro>
          <cbteTipo>6</cbteTipo>
          <ptoVta>3</ptoVta>
        </ultimoCompAutorizado>
      </return>
    </ns2:feCompUltimoAutorizadoResponse>
  </soap:Body>
</soap:Envelope>
✔ OK V2

10. V2 — PV 1, Factura A (tipo 1)

HTTP 200 · 900ms

Mismo endpoint para tipo 1 (insumo para numerar la Factura A del caso 4c). Último = 4.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @2c-ultimo-v2-facturaA.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 2c-ultimo-v2-facturaA.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompUltimoAutorizado xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <enteFacturador><cuit>27210393124</cuit></enteFacturador>
        <ultimoCompAutorizado>
          <cbteNro>0</cbteNro>
          <cbteTipo>1</cbteTipo>
          <ptoVta>1</ptoVta>
        </ultimoCompAutorizado>
      </arg0>
    </ns2:feCompUltimoAutorizado>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:feCompUltimoAutorizadoResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <ultimoCompAutorizado>
          <cbteNro>4</cbteNro>
          <cbteTipo>1</cbteTipo>
          <ptoVta>1</ptoVta>
        </ultimoCompAutorizado>
      </return>
    </ns2:feCompUltimoAutorizadoResponse>
  </soap:Body>
</soap:Envelope>
◔ CASO BORDE V1

11. Caso borde — PV 9999 desconocido

HTTP 200 · 911ms

AFIP devuelve cbteNro=0 para un PV sin comprobantes (NO es error de transporte). El POS debe tratar 0 como "sin comprobantes".

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @2d-ultimo-err-pv-inexistente.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 2d-ultimo-err-pv-inexistente.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompUltimoAutorizado xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <enteFacturador><id>1</id></enteFacturador>
        <ultimoCompAutorizado>
          <cbteNro>0</cbteNro>
          <cbteTipo>6</cbteTipo>
          <ptoVta>9999</ptoVta>
        </ultimoCompAutorizado>
      </arg0>
    </ns2:feCompUltimoAutorizado>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:feCompUltimoAutorizadoResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <ultimoCompAutorizado>
          <cbteNro>0</cbteNro>
          <cbteTipo>6</cbteTipo>
          <ptoVta>9999</ptoVta>
        </ultimoCompAutorizado>
      </return>
    </ns2:feCompUltimoAutorizadoResponse>
  </soap:Body>
</soap:Envelope>

OP 4 — Solicitar CAE · SOAP fecaeSolicitar (emite comprobantes REALES en homologación)

✔ OK V1

12. V1 — Factura B $121, el POS numera (PV 1, comprobante 22)

HTTP 200 · 1503ms

Protocolo clásico: el POS manda ptoVta + comprobante (último+1). Identificación por ente.id. Consumidor Final (doc 99), IVA 21%. APROBADA: CAE 86270520563688.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @4a-cae-v1-facturaB.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 4a-cae-v1-facturaB.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:fecaeSolicitar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <enteFacturador><id>1</id></enteFacturador>
          <ptoVta>1</ptoVta>
          <comprobante>22</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <montoCotizacion>1.0</montoCotizacion>
          <importeNeto>100.00</importeNeto>
          <importeIva>21.00</importeIva>
          <importeTotal>121.00</importeTotal>
          <importeTributo>0.00</importeTributo>
          <nroDocumento>0</nroDocumento>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <tipoConcepto><id>1</id></tipoConcepto>
          <tipoDocumento><id>99</id></tipoDocumento>
          <tipoMoneda><id>PES</id></tipoMoneda>
          <tipoComprobante><id>6</id></tipoComprobante>
          <alicuotaIvas>
            <baseImponible>100.00</baseImponible>
            <importe>21.00</importe>
            <tipoIva><id>5</id></tipoIva>
          </alicuotaIvas>
        </trx>
      </arg0>
    </ns2:fecaeSolicitar>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:fecaeSolicitarResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <trx>
          <alicuotaIvas>
            <baseImponible>100.0</baseImponible>
            <id>5875</id>
            <importe>21.0</importe>
            <tipoIva>
              <alicuota>0.0</alicuota>
              <id>5</id>
            </tipoIva>
          </alicuotaIvas>
          <cae>86270520563688</cae>
          <caeBarCode>2721039312406000186270520563688202607127</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <comprobante>22</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <enteFacturador>
            <condicionIva>RI</condicionIva>
            <cuit>27210393124</cuit>
            <direccion>Rufino Cuervo 1085 2° piso of 26 (5009) Cordoba - Escobar Betania / Nazaret</direccion>
            <habilitado>true</habilitado>
            <id>1</id>
            <inicioActividades>01/06/2006</inicioActividades>
            <layout>2</layout>
            <razonSocial>ATB</razonSocial>
          </enteFacturador>
          <fchProceso>20260702101658</fchProceso>
          <id>5748</id>
          <importeIva>21.0</importeIva>
          <importeNeto>100.0</importeNeto>
          <importeOpEx>0.0</importeOpEx>
          <importeTotConc>0.0</importeTotConc>
          <importeTotal>121.0</importeTotal>
          <importeTributo>0.0</importeTributo>
          <montoCotizacion>1.0</montoCotizacion>
          <nroDocumento>0</nroDocumento>
          <ptoVta>1</ptoVta>
          <resultado>A</resultado>
          <tipoComprobante>
            <discriminaIva>false</discriminaIva>
            <discriminaTributos>false</discriminaTributos>
            <id>6</id>
            <usaSubtotal>false</usaSubtotal>
          </tipoComprobante>
          <tipoConcepto>
            <id>1</id>
          </tipoConcepto>
          <tipoDocumento>
            <id>99</id>
          </tipoDocumento>
          <tipoMoneda>
            <id>PES</id>
          </tipoMoneda>
        </trx>
        <cae>
          <cae>86270520563688</cae>
          <caeBarCode>2721039312406000186270520563688202607127</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <fchProceso>20260702101658</fchProceso>
          <idTrx>5748</idTrx>
          <resultado>A</resultado>
        </cae>
      </return>
    </ns2:fecaeSolicitarResponse>
  </soap:Body>
</soap:Envelope>
✔ OK V2

13. V2 — Factura B $121 por TICKET, el server numera (suc 1 / pos 2)

HTTP 200 · 1619ms

Protocolo NextGen: el POS manda nroTicketPos + suc/pos (SIN comprobante ni ptoVta); el server resuelve el PV (3) y numera (63 = último 62 + 1). Identificación por CUIT. APROBADA: CAE 86270520563706.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @4b-cae-v2-facturaB.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 4b-cae-v2-facturaB.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:fecaeSolicitar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <nroSuc>1</nroSuc>
          <nroPos>2</nroPos>
          <enteFacturador><cuit>27210393124</cuit></enteFacturador>
          <comprobanteFecha>20260702</comprobanteFecha>
          <montoCotizacion>1.0</montoCotizacion>
          <importeNeto>100.00</importeNeto>
          <importeIva>21.00</importeIva>
          <importeTotal>121.00</importeTotal>
          <importeTributo>0.00</importeTributo>
          <nroDocumento>0</nroDocumento>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <tipoConcepto><id>1</id></tipoConcepto>
          <tipoDocumento><id>99</id></tipoDocumento>
          <tipoMoneda><id>PES</id></tipoMoneda>
          <tipoComprobante><id>6</id></tipoComprobante>
          <alicuotaIvas>
            <baseImponible>100.00</baseImponible>
            <importe>21.00</importe>
            <tipoIva><id>5</id></tipoIva>
          </alicuotaIvas>
        </trx>
      </arg0>
    </ns2:fecaeSolicitar>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:fecaeSolicitarResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <trx>
          <alicuotaIvas>
            <baseImponible>100.0</baseImponible>
            <id>5876</id>
            <importe>21.0</importe>
            <tipoIva>
              <alicuota>0.21</alicuota>
              <descripcion>IVA 21%</descripcion>
              <id>5</id>
            </tipoIva>
          </alicuotaIvas>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <comprobante>63</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <enteFacturador>
            <condicionIva>RI</condicionIva>
            <cuit>27210393124</cuit>
            <direccion>Rufino Cuervo 1085 2° piso of 26 (5009) Cordoba - Escobar Betania / Nazaret</direccion>
            <habilitado>true</habilitado>
            <id>1</id>
            <inicioActividades>01/06/2006</inicioActividades>
            <layout>2</layout>
            <razonSocial>ATB</razonSocial>
          </enteFacturador>
          <fchProceso>20260702101700</fchProceso>
          <id>5749</id>
          <importeIva>21.0</importeIva>
          <importeNeto>100.0</importeNeto>
          <importeOpEx>0.0</importeOpEx>
          <importeTotConc>0.0</importeTotConc>
          <importeTotal>121.0</importeTotal>
          <importeTributo>0.0</importeTributo>
          <montoCotizacion>1.0</montoCotizacion>
          <nroDocumento>0</nroDocumento>
          <nroPos>2</nroPos>
          <nroSuc>1</nroSuc>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <ptoVta>3</ptoVta>
          <resultado>A</resultado>
          <tipoComprobante>
            <codigo>06</codigo>
            <descripcion>FACTURA</descripcion>
            <discriminaIva>false</discriminaIva>
            <discriminaTributos>true</discriminaTributos>
            <id>6</id>
            <letra>B</letra>
            <usaSubtotal>false</usaSubtotal>
          </tipoComprobante>
          <tipoConcepto>
            <descripcion>Producto / Exportacion definitiva de bienes</descripcion>
            <id>1</id>
          </tipoConcepto>
          <tipoDocumento>
            <descripcion>Sin identificar/venta global diaria</descripcion>
            <id>99</id>
          </tipoDocumento>
          <tipoMoneda>
            <descripcion>Pesos Argentinos</descripcion>
            <id>PES</id>
          </tipoMoneda>
          <version>V2</version>
        </trx>
        <cae>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <fchProceso>20260702101700</fchProceso>
          <idTrx>5749</idTrx>
          <resultado>A</resultado>
        </cae>
      </return>
    </ns2:fecaeSolicitarResponse>
  </soap:Body>
</soap:Envelope>
✔ OK V1

14. Factura A COMPLETA — 3 alícuotas IVA + 3 tributos ($3.605)

HTTP 200 · 1645ms

Receptor Responsable Inscripto (doc 80 = CUIT de AM, distinto del emisor — AFIP 10069). IVA 21% + 10,5% + 0%; tributos: internos (id 4), percepción IIBB provincial (id 2), municipal (id 3). ImpTotal 3605 = neto 3000 + IVA 315 + tributos 290. APROBADA: CAE 86270520563751.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @4c-cae-facturaA-completa.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 4c-cae-facturaA-completa.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:fecaeSolicitar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <enteFacturador><cuit>27210393124</cuit></enteFacturador>
          <ptoVta>1</ptoVta>
          <comprobante>5</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <montoCotizacion>1.0</montoCotizacion>
          <importeNeto>3000.00</importeNeto>
          <importeIva>315.00</importeIva>
          <importeTributo>290.00</importeTributo>
          <importeTotConc>0.00</importeTotConc>
          <importeOpEx>0.00</importeOpEx>
          <importeTotal>3605.00</importeTotal>
          <nroDocumento>20181726149</nroDocumento>
          <condicionIVAReceptorId>1</condicionIVAReceptorId>
          <tipoConcepto><id>1</id></tipoConcepto>
          <tipoDocumento><id>80</id></tipoDocumento>
          <tipoMoneda><id>PES</id></tipoMoneda>
          <tipoComprobante><id>1</id></tipoComprobante>
          <alicuotaIvas>
            <baseImponible>1000.00</baseImponible>
            <importe>210.00</importe>
            <tipoIva><id>5</id></tipoIva>
          </alicuotaIvas>
          <alicuotaIvas>
            <baseImponible>1000.00</baseImponible>
            <importe>105.00</importe>
            <tipoIva><id>4</id></tipoIva>
          </alicuotaIvas>
          <alicuotaIvas>
            <baseImponible>1000.00</baseImponible>
            <importe>0.00</importe>
            <tipoIva><id>3</id></tipoIva>
          </alicuotaIvas>
          <tributos>
            <tipoTributo><id>4</id></tipoTributo>
            <descripcion>Impuestos internos</descripcion>
            <baseImponible>1000.00</baseImponible>
            <alicuota>5.0</alicuota>
            <importe>50.00</importe>
          </tributos>
          <tributos>
            <tipoTributo><id>2</id></tipoTributo>
            <descripcion>Percepcion IIBB 2%</descripcion>
            <baseImponible>3000.00</baseImponible>
            <alicuota>2.0</alicuota>
            <importe>60.00</importe>
          </tributos>
          <tributos>
            <tipoTributo><id>3</id></tipoTributo>
            <descripcion>Percepcion Comercio e Industria 6%</descripcion>
            <baseImponible>3000.00</baseImponible>
            <alicuota>6.0</alicuota>
            <importe>180.00</importe>
          </tributos>
        </trx>
      </arg0>
    </ns2:fecaeSolicitar>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:fecaeSolicitarResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <trx>
          <alicuotaIvas>
            <baseImponible>1000.0</baseImponible>
            <id>5877</id>
            <importe>210.0</importe>
            <tipoIva>
              <alicuota>0.0</alicuota>
              <id>5</id>
            </tipoIva>
          </alicuotaIvas>
          <alicuotaIvas>
            <baseImponible>1000.0</baseImponible>
            <id>5878</id>
            <importe>105.0</importe>
            <tipoIva>
              <alicuota>0.0</alicuota>
              <id>4</id>
            </tipoIva>
          </alicuotaIvas>
          <alicuotaIvas>
            <baseImponible>1000.0</baseImponible>
            <id>5879</id>
            <importe>0.0</importe>
            <tipoIva>
              <alicuota>0.0</alicuota>
              <id>3</id>
            </tipoIva>
          </alicuotaIvas>
          <cae>86270520563751</cae>
          <caeBarCode>2721039312401000186270520563751202607123</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <comprobante>5</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <condicionIVAReceptorId>1</condicionIVAReceptorId>
          <enteFacturador>
            <condicionIva>RI</condicionIva>
            <cuit>27210393124</cuit>
            <direccion>Rufino Cuervo 1085 2° piso of 26 (5009) Cordoba - Escobar Betania / Nazaret</direccion>
            <habilitado>true</habilitado>
            <id>1</id>
            <inicioActividades>01/06/2006</inicioActividades>
            <layout>2</layout>
            <razonSocial>ATB</razonSocial>
          </enteFacturador>
          <fchProceso>20260702101702</fchProceso>
          <id>5750</id>
          <importeIva>315.0</importeIva>
          <importeNeto>3000.0</importeNeto>
          <importeOpEx>0.0</importeOpEx>
          <importeTotConc>0.0</importeTotConc>
          <importeTotal>3605.0</importeTotal>
          <importeTributo>290.0</importeTributo>
          <montoCotizacion>1.0</montoCotizacion>
          <nroDocumento>20181726149</nroDocumento>
          <ptoVta>1</ptoVta>
          <resultado>A</resultado>
          <tipoComprobante>
            <discriminaIva>false</discriminaIva>
            <discriminaTributos>false</discriminaTributos>
            <id>1</id>
            <usaSubtotal>false</usaSubtotal>
          </tipoComprobante>
          <tipoConcepto>
            <id>1</id>
          </tipoConcepto>
          <tipoDocumento>
            <id>80</id>
          </tipoDocumento>
          <tipoMoneda>
            <id>PES</id>
          </tipoMoneda>
          <tributos>
            <alicuota>5.0</alicuota>
            <baseImponible>1000.0</baseImponible>
            <descripcion>Impuestos internos</descripcion>
            <id>4064</id>
            <importe>50.0</importe>
            <tipoTributo>
              <id>4</id>
            </tipoTributo>
          </tributos>
          <tributos>
            <alicuota>2.0</alicuota>
            <baseImponible>3000.0</baseImponible>
            <descripcion>Percepcion IIBB 2%</descripcion>
            <id>4065</id>
            <importe>60.0</importe>
            <tipoTributo>
              <id>2</id>
            </tipoTributo>
          </tributos>
          <tributos>
            <alicuota>6.0</alicuota>
            <baseImponible>3000.0</baseImponible>
            <descripcion>Percepcion Comercio e Industria 6%</descripcion>
            <id>4066</id>
            <importe>180.0</importe>
            <tipoTributo>
              <id>3</id>
            </tipoTributo>
          </tributos>
        </trx>
        <cae>
          <cae>86270520563751</cae>
          <caeBarCode>2721039312401000186270520563751202607123</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <fchProceso>20260702101702</fchProceso>
          <idTrx>5750</idTrx>
          <resultado>A</resultado>
        </cae>
      </return>
    </ns2:fecaeSolicitarResponse>
  </soap:Body>
</soap:Envelope>
↻ IDEMPOTENTE V2

15. IDEMPOTENCIA — reenvío del MISMO ticket de 4b

HTTP 200 · 606ms

Anti-doble-factura: el reintento del POS con el mismo ticket devuelve el MISMO CAE (86270520563706, comprobante 63) SIN re-emitir en AFIP. Respuesta en 606ms (sin viaje a ARCA).

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @4d-cae-v2-reintento-mismo-ticket.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 4d-cae-v2-reintento-mismo-ticket.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:fecaeSolicitar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <nroSuc>1</nroSuc>
          <nroPos>2</nroPos>
          <enteFacturador><cuit>27210393124</cuit></enteFacturador>
          <comprobanteFecha>20260702</comprobanteFecha>
          <montoCotizacion>1.0</montoCotizacion>
          <importeNeto>100.00</importeNeto>
          <importeIva>21.00</importeIva>
          <importeTotal>121.00</importeTotal>
          <importeTributo>0.00</importeTributo>
          <nroDocumento>0</nroDocumento>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <tipoConcepto><id>1</id></tipoConcepto>
          <tipoDocumento><id>99</id></tipoDocumento>
          <tipoMoneda><id>PES</id></tipoMoneda>
          <tipoComprobante><id>6</id></tipoComprobante>
          <alicuotaIvas>
            <baseImponible>100.00</baseImponible>
            <importe>21.00</importe>
            <tipoIva><id>5</id></tipoIva>
          </alicuotaIvas>
        </trx>
      </arg0>
    </ns2:fecaeSolicitar>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:fecaeSolicitarResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <trx>
          <alicuotaIvas>
            <baseImponible>100.0</baseImponible>
            <id>5876</id>
            <importe>21.0</importe>
            <tipoIva>
              <alicuota>0.21</alicuota>
              <descripcion>IVA 21%</descripcion>
              <id>5</id>
            </tipoIva>
          </alicuotaIvas>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <comprobante>63</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <enteFacturador>
            <condicionIva>RI</condicionIva>
            <cuit>27210393124</cuit>
            <direccion>Rufino Cuervo 1085 2° piso of 26 (5009) Cordoba - Escobar Betania / Nazaret</direccion>
            <habilitado>true</habilitado>
            <id>1</id>
            <inicioActividades>01/06/2006</inicioActividades>
            <layout>2</layout>
            <razonSocial>ATB</razonSocial>
          </enteFacturador>
          <fchProceso>20260702101700</fchProceso>
          <id>5749</id>
          <importeIva>21.0</importeIva>
          <importeNeto>100.0</importeNeto>
          <importeOpEx>0.0</importeOpEx>
          <importeTotConc>0.0</importeTotConc>
          <importeTotal>121.0</importeTotal>
          <importeTributo>0.0</importeTributo>
          <montoCotizacion>1.0</montoCotizacion>
          <nroDocumento>0</nroDocumento>
          <nroPos>2</nroPos>
          <nroSuc>1</nroSuc>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <ptoVta>3</ptoVta>
          <resultado>A</resultado>
          <tipoComprobante>
            <codigo>06</codigo>
            <descripcion>FACTURA</descripcion>
            <discriminaIva>false</discriminaIva>
            <discriminaTributos>true</discriminaTributos>
            <id>6</id>
            <letra>B</letra>
            <usaSubtotal>false</usaSubtotal>
          </tipoComprobante>
          <tipoConcepto>
            <descripcion>Producto / Exportacion definitiva de bienes</descripcion>
            <id>1</id>
          </tipoConcepto>
          <tipoDocumento>
            <descripcion>Sin identificar/venta global diaria</descripcion>
            <id>99</id>
          </tipoDocumento>
          <tipoMoneda>
            <descripcion>Pesos Argentinos</descripcion>
            <id>PES</id>
          </tipoMoneda>
          <version>V2</version>
        </trx>
        <cae>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <fchProceso>20260702101700</fchProceso>
          <idTrx>5749</idTrx>
        </cae>
      </return>
    </ns2:fecaeSolicitarResponse>
  </soap:Body>
</soap:Envelope>
⚠ ERROR ESPERADO V2

16. ERROR esperado — sin enteFacturador

HTTP 500 · 405ms

Multi-comercio: sin identificar el comercio se rechaza ANTES de tocar AFIP. SOAP Fault limpio: ENTE_NO_DECLARADO (CXF no manda stacktrace).

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @4e-cae-err-sin-ente.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 4e-cae-err-sin-ente.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:fecaeSolicitar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <nroTicketPos>QADOC-1782998217-ERR</nroTicketPos>
          <nroSuc>1</nroSuc>
          <nroPos>2</nroPos>
          <comprobanteFecha>20260702</comprobanteFecha>
          <montoCotizacion>1.0</montoCotizacion>
          <importeNeto>100.00</importeNeto>
          <importeIva>21.00</importeIva>
          <importeTotal>121.00</importeTotal>
          <nroDocumento>0</nroDocumento>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <tipoConcepto><id>1</id></tipoConcepto>
          <tipoDocumento><id>99</id></tipoDocumento>
          <tipoMoneda><id>PES</id></tipoMoneda>
          <tipoComprobante><id>6</id></tipoComprobante>
          <alicuotaIvas>
            <baseImponible>100.00</baseImponible>
            <importe>21.00</importe>
            <tipoIva><id>5</id></tipoIva>
          </alicuotaIvas>
        </trx>
      </arg0>
    </ns2:fecaeSolicitar>
  </S:Body>
</S:Envelope>
Response (HTTP 500)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <soap:Fault>
      <soap:Code>
        <soap:Value>soap:Receiver</soap:Value>
      </soap:Code>
      <soap:Reason>
        <soap:Text xml:lang="en">ENTE_NO_DECLARADO: el request no declara enteFacturador.cuit ni .id</soap:Text>
      </soap:Reason>
      <soap:Detail>
        <ns2:GeneralException xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/"/>
      </soap:Detail>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>
⚠ ERROR ESPERADO V2

17. ERROR esperado — INTEGRIDAD FISCAL (AM factura sobre POS de ATB)

HTTP 500 · 409ms

El comercio AM (cuit 20181726149) declara suc 1/pos 2 que pertenece a ATB → rechazo INTEGRIDAD_FISCAL con 0 llamadas a AFIP. El gate multi-comercio funciona.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @4f-cae-err-integridad-fiscal.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 4f-cae-err-integridad-fiscal.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:fecaeSolicitar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <nroTicketPos>QADOC-1782998217-FISCAL</nroTicketPos>
          <nroSuc>1</nroSuc>
          <nroPos>2</nroPos>
          <enteFacturador><cuit>20181726149</cuit></enteFacturador>
          <comprobanteFecha>20260702</comprobanteFecha>
          <montoCotizacion>1.0</montoCotizacion>
          <importeNeto>100.00</importeNeto>
          <importeIva>21.00</importeIva>
          <importeTotal>121.00</importeTotal>
          <nroDocumento>0</nroDocumento>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <tipoConcepto><id>1</id></tipoConcepto>
          <tipoDocumento><id>99</id></tipoDocumento>
          <tipoMoneda><id>PES</id></tipoMoneda>
          <tipoComprobante><id>6</id></tipoComprobante>
          <alicuotaIvas>
            <baseImponible>100.00</baseImponible>
            <importe>21.00</importe>
            <tipoIva><id>5</id></tipoIva>
          </alicuotaIvas>
        </trx>
      </arg0>
    </ns2:fecaeSolicitar>
  </S:Body>
</S:Envelope>
Response (HTTP 500)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <soap:Fault>
      <soap:Code>
        <soap:Value>soap:Receiver</soap:Value>
      </soap:Code>
      <soap:Reason>
        <soap:Text xml:lang="en">INTEGRIDAD_FISCAL: (suc=1, pos=2) no pertenece al ente declarado (id=1010, cuit=20181726149)</soap:Text>
      </soap:Reason>
      <soap:Detail>
        <ns2:GeneralException xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/"/>
      </soap:Detail>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

OP 3 — Consultar comprobante · SOAP feCompConsultar

✔ OK V1

18. V1 — por número fiscal (comprobante 22, PV 1, tipo 6)

HTTP 200 · 401ms

El POS clásico consulta por el número que él mismo asignó. Devuelve la Trx completa con CAE 86270520563688.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @3a-consultar-v1-comprobante.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 3a-consultar-v1-comprobante.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompConsultar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <enteFacturador><id>1</id></enteFacturador>
          <ptoVta>1</ptoVta>
          <comprobante>22</comprobante>
          <tipoComprobante><id>6</id></tipoComprobante>
        </trx>
      </arg0>
    </ns2:feCompConsultar>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:feCompConsultarResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <trx>
          <alicuotaIvas>
            <baseImponible>100.0</baseImponible>
            <id>5875</id>
            <importe>21.0</importe>
            <tipoIva>
              <alicuota>0.21</alicuota>
              <descripcion>IVA 21%</descripcion>
              <id>5</id>
            </tipoIva>
          </alicuotaIvas>
          <cae>86270520563688</cae>
          <caeBarCode>2721039312406000186270520563688202607127</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <comprobante>22</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <enteFacturador>
            <condicionIva>RI</condicionIva>
            <cuit>27210393124</cuit>
            <direccion>Rufino Cuervo 1085 2° piso of 26 (5009) Cordoba - Escobar Betania / Nazaret</direccion>
            <habilitado>true</habilitado>
            <id>1</id>
            <inicioActividades>01/06/2006</inicioActividades>
            <layout>2</layout>
            <razonSocial>ATB</razonSocial>
          </enteFacturador>
          <fchProceso>20260702101658</fchProceso>
          <id>5748</id>
          <importeIva>21.0</importeIva>
          <importeNeto>100.0</importeNeto>
          <importeOpEx>0.0</importeOpEx>
          <importeTotConc>0.0</importeTotConc>
          <importeTotal>121.0</importeTotal>
          <importeTributo>0.0</importeTributo>
          <montoCotizacion>1.0</montoCotizacion>
          <nroDocumento>0</nroDocumento>
          <ptoVta>1</ptoVta>
          <resultado>A</resultado>
          <tipoComprobante>
            <codigo>06</codigo>
            <descripcion>FACTURA</descripcion>
            <discriminaIva>false</discriminaIva>
            <discriminaTributos>true</discriminaTributos>
            <id>6</id>
            <letra>B</letra>
            <usaSubtotal>false</usaSubtotal>
          </tipoComprobante>
          <tipoConcepto>
            <descripcion>Producto / Exportacion definitiva de bienes</descripcion>
            <id>1</id>
          </tipoConcepto>
          <tipoDocumento>
            <descripcion>Sin identificar/venta global diaria</descripcion>
            <id>99</id>
          </tipoDocumento>
          <tipoMoneda>
            <descripcion>Pesos Argentinos</descripcion>
            <id>PES</id>
          </tipoMoneda>
        </trx>
        <cae>
          <cae>86270520563688</cae>
          <caeBarCode>2721039312406000186270520563688202607127</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <fchProceso>20260702101658</fchProceso>
          <idTrx>5748</idTrx>
        </cae>
      </return>
    </ns2:feCompConsultarResponse>
  </soap:Body>
</soap:Envelope>
✔ OK V2

19. V2 — por TICKET identificando por CUIT (🐞→✔ bug arreglado, re-verificado en QA)

HTTP 200 · 401ms

Antes (jar viejo): devolvía un ECO sin CAE — la consulta V2 por ticket no resolvía el ente y el dedup, scopeado por id, hacía MISS con identificación por cuit. Ahora (jar actualizado): devuelve el CAE 86270520563706 + comprobante 63. Fix: enteResolver.resolve(trx) antes del lookup (PR#17). Re-corrido contra QA tras el redeploy → OK.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @3b-consultar-v2-ticket.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 3b-consultar-v2-ticket.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompConsultar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <nroSuc>1</nroSuc>
          <nroPos>2</nroPos>
          <enteFacturador><cuit>27210393124</cuit></enteFacturador>
          <comprobanteFecha>20260702</comprobanteFecha>
          <tipoComprobante><id>6</id></tipoComprobante>
        </trx>
      </arg0>
    </ns2:feCompConsultar>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:feCompConsultarResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <trx>
          <alicuotaIvas>
            <baseImponible>100.0</baseImponible>
            <id>5876</id>
            <importe>21.0</importe>
            <tipoIva>
              <alicuota>0.21</alicuota>
              <descripcion>IVA 21%</descripcion>
              <id>5</id>
            </tipoIva>
          </alicuotaIvas>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <comprobante>63</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <enteFacturador>
            <condicionIva>RI</condicionIva>
            <cuit>27210393124</cuit>
            <direccion>Rufino Cuervo 1085 2° piso of 26 (5009) Cordoba - Escobar Betania / Nazaret</direccion>
            <habilitado>true</habilitado>
            <id>1</id>
            <inicioActividades>01/06/2006</inicioActividades>
            <layout>2</layout>
            <razonSocial>ATB</razonSocial>
          </enteFacturador>
          <fchProceso>20260702101700</fchProceso>
          <id>5749</id>
          <importeIva>21.0</importeIva>
          <importeNeto>100.0</importeNeto>
          <importeOpEx>0.0</importeOpEx>
          <importeTotConc>0.0</importeTotConc>
          <importeTotal>121.0</importeTotal>
          <importeTributo>0.0</importeTributo>
          <montoCotizacion>1.0</montoCotizacion>
          <nroDocumento>0</nroDocumento>
          <nroPos>2</nroPos>
          <nroSuc>1</nroSuc>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <ptoVta>3</ptoVta>
          <resultado>A</resultado>
          <tipoComprobante>
            <codigo>06</codigo>
            <descripcion>FACTURA</descripcion>
            <discriminaIva>false</discriminaIva>
            <discriminaTributos>true</discriminaTributos>
            <id>6</id>
            <letra>B</letra>
            <usaSubtotal>false</usaSubtotal>
          </tipoComprobante>
          <tipoConcepto>
            <descripcion>Producto / Exportacion definitiva de bienes</descripcion>
            <id>1</id>
          </tipoConcepto>
          <tipoDocumento>
            <descripcion>Sin identificar/venta global diaria</descripcion>
            <id>99</id>
          </tipoDocumento>
          <tipoMoneda>
            <descripcion>Pesos Argentinos</descripcion>
            <id>PES</id>
          </tipoMoneda>
          <version>V2</version>
        </trx>
        <cae>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <fchProceso>20260702101700</fchProceso>
          <idTrx>5749</idTrx>
        </cae>
      </return>
    </ns2:feCompConsultarResponse>
  </soap:Body>
</soap:Envelope>
✔ OK V2

20. V2 — por TICKET identificando por ente.id

HTTP 200 · 600ms

El mismo ticket identificando por id=1: encuentra la fila y devuelve el CAE 86270520563706 + comprobante 63. Con el fix ya funciona por cuit (3b) o por id — ambos caminos válidos.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @3b2-consultar-v2-ticket-porId.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 3b2-consultar-v2-ticket-porId.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompConsultar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <nroSuc>1</nroSuc>
          <nroPos>2</nroPos>
          <enteFacturador><id>1</id></enteFacturador>
          <comprobanteFecha>20260702</comprobanteFecha>
          <tipoComprobante><id>6</id></tipoComprobante>
        </trx>
      </arg0>
    </ns2:feCompConsultar>
  </S:Body>
</S:Envelope>
Response (HTTP 200)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ns2:feCompConsultarResponse xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <return>
        <trx>
          <alicuotaIvas>
            <baseImponible>100.0</baseImponible>
            <id>5876</id>
            <importe>21.0</importe>
            <tipoIva>
              <alicuota>0.21</alicuota>
              <descripcion>IVA 21%</descripcion>
              <id>5</id>
            </tipoIva>
          </alicuotaIvas>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <comprobante>63</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <condicionIVAReceptorId>5</condicionIVAReceptorId>
          <enteFacturador>
            <condicionIva>RI</condicionIva>
            <cuit>27210393124</cuit>
            <direccion>Rufino Cuervo 1085 2° piso of 26 (5009) Cordoba - Escobar Betania / Nazaret</direccion>
            <habilitado>true</habilitado>
            <id>1</id>
            <inicioActividades>01/06/2006</inicioActividades>
            <layout>2</layout>
            <razonSocial>ATB</razonSocial>
          </enteFacturador>
          <fchProceso>20260702101700</fchProceso>
          <id>5749</id>
          <importeIva>21.0</importeIva>
          <importeNeto>100.0</importeNeto>
          <importeOpEx>0.0</importeOpEx>
          <importeTotConc>0.0</importeTotConc>
          <importeTotal>121.0</importeTotal>
          <importeTributo>0.0</importeTributo>
          <montoCotizacion>1.0</montoCotizacion>
          <nroDocumento>0</nroDocumento>
          <nroPos>2</nroPos>
          <nroSuc>1</nroSuc>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <ptoVta>3</ptoVta>
          <resultado>A</resultado>
          <tipoComprobante>
            <codigo>06</codigo>
            <descripcion>FACTURA</descripcion>
            <discriminaIva>false</discriminaIva>
            <discriminaTributos>true</discriminaTributos>
            <id>6</id>
            <letra>B</letra>
            <usaSubtotal>false</usaSubtotal>
          </tipoComprobante>
          <tipoConcepto>
            <descripcion>Producto / Exportacion definitiva de bienes</descripcion>
            <id>1</id>
          </tipoConcepto>
          <tipoDocumento>
            <descripcion>Sin identificar/venta global diaria</descripcion>
            <id>99</id>
          </tipoDocumento>
          <tipoMoneda>
            <descripcion>Pesos Argentinos</descripcion>
            <id>PES</id>
          </tipoMoneda>
          <version>V2</version>
        </trx>
        <cae>
          <cae>86270520563706</cae>
          <caeBarCode>2721039312406000386270520563706202607122</caeBarCode>
          <caeFchVto>20260712</caeFchVto>
          <fchProceso>20260702101700</fchProceso>
          <idTrx>5749</idTrx>
        </cae>
      </return>
    </ns2:feCompConsultarResponse>
  </soap:Body>
</soap:Envelope>
⚠ ERROR ESPERADO

21. ERROR esperado — consulta contradictoria (ticket + comprobante)

HTTP 500 · 399ms

Trae la clave V2 (ticket) y la V1 (número fiscal) a la vez → rechazo claro indicando el contrato de cada protocolo.

CURL (reusable)
curl -s -H 'Content-Type: application/soap+xml; charset=utf-8' \
  --data-binary @3c-consultar-err-contradictoria.req.xml \
  http://mp.tipre.com:18087/TiFacturaOnlineManagerWS/TiFacturaOnlineManagerWS
Request body — guardar como 3c-consultar-err-contradictoria.req.xml
<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:feCompConsultar xmlns:ns2="http://ws.action.tifacturaonlinemanager.tipre.com/">
      <arg0>
        <trx>
          <nroTicketPos>QADOC-1782998217</nroTicketPos>
          <nroSuc>1</nroSuc>
          <nroPos>2</nroPos>
          <enteFacturador><cuit>27210393124</cuit></enteFacturador>
          <ptoVta>1</ptoVta>
          <comprobante>22</comprobante>
          <comprobanteFecha>20260702</comprobanteFecha>
          <tipoComprobante><id>6</id></tipoComprobante>
        </trx>
      </arg0>
    </ns2:feCompConsultar>
  </S:Body>
</S:Envelope>
Response (HTTP 500)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <soap:Fault>
      <soap:Code>
        <soap:Value>soap:Receiver</soap:Value>
      </soap:Code>
      <soap:Reason>
        <soap:Text xml:lang="en">Consulta contradictoria: trae nroTicketPos (clave V2) y comprobante (nro fiscal V1) a la vez. El POS NextGen consulta por ticket; el clásico por comprobante.</soap:Text>
      </soap:Reason>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

Generado automáticamente desde la corrida real del 2026-07-02. Los CAE listados existen en AFIP homologación. Reusar los curl tal cual (ajustando números/tickets según la nota).