Evidencias, OCR, reclamos y pendientes
Estado documental: Contrato propuesto. Las rutas, campos, límites y tiempos pasan a estado confirmado solo después de su implementación y verificación.
Objetivo: Documentar la carga de constancias, OCR, reclamos del comprador y resolución de casos pendientes.
Evidencia y OCR
| Audiencia | Método | Ruta propuesta | Uso | Idempotencia | Eventos o callbacks relacionados |
|---|---|---|---|---|---|
| Integración | POST |
/v1/payment-orders/{id}/evidence |
Subir captura o fotografía. | Obligatoria | payment.evidence_received |
| Integración | GET |
/v1/payment-orders/{id}/evidence |
Listar evidencias. | No | Ninguno |
| Integración | GET |
/v1/payment-evidence/{evidence_id} |
Consultar metadatos. | No | Ninguno |
| Integración | GET |
/v1/payment-evidence/{evidence_id}/ocr |
Consultar OCR normalizado. | No | Ninguno |
| Administración | POST |
/v1/payment-evidence/{evidence_id}/reprocess |
Solicitar reproceso autorizado. | Obligatoria | payment.evidence_processing |
| Administración | POST |
/v1/payment-evidence/{evidence_id}/reject |
Rechazar evidencia no utilizable. | Obligatoria | payment.evidence_rejected |
| Administración | GET |
/v1/payment-evidence/{evidence_id}/history |
Consultar auditoría. | No | Ninguno |
Ejemplo: subir constancia
POST /v1/payment-orders/ypt_01JXYZ/evidence
Authorization: Bearer <ACCESS_TOKEN>
Idempotency-Key: 8e0752b4-217e-4754-a57f-dabf83cc5b32
Content-Type: multipart/form-data
file=@payment-proof.jpg
evidence_type=payment_receipt
reported_by=seller
shift_id=shf_01JXYZ
device_id=dev_01JXYZ
{
"result": "evidence_received",
"evidence_id": "evi_01JXYZ",
"payment_reported": true,
"ocr": {
"status": "queued"
},
"request_id": "req_01JXYZ"
}
Ejemplo: resultado OCR
{
"evidence_id": "evi_01JXYZ",
"status": "processed",
"extracted": {
"amount": "80.00",
"currency": "PEN",
"payment_method_candidate": "yape",
"paid_at_candidate": "2026-07-20T14:37:00-05:00",
"operation_reference_candidate": "12345678",
"recipient_candidate": "EMPRESA EJEMPLO"
},
"confidence": {
"amount": 0.98,
"paid_at": 0.89
},
"request_id": "req_01JXYZ"
}
OCR aporta evidencia complementaria. No confirma por sí solo que el dinero llegó.
Estados OCR
queued
processing
processed
partial
unreadable
rejected
failed
Reclamos públicos protegidos
| Audiencia | Método | Ruta propuesta | Uso | Idempotencia | Eventos o callbacks relacionados |
|---|---|---|---|---|---|
| Público protegido | POST |
/v1/public/payment-claims |
Crear reclamo con código público. | Sí | claim.created |
| Público protegido | GET |
/v1/public/payment-claims/{claim_token} |
Consultar seguimiento. | No | Ninguno |
| Público protegido | POST |
/v1/public/payment-claims/{claim_token}/evidence |
Adjuntar constancia. | Sí | claim.evidence_received |
| Público protegido | POST |
/v1/public/payment-claims/{claim_token}/messages |
Añadir información. | Sí | claim.message_received |
Ejemplo: crear reclamo
{
"transaction_code": "YP-7H2K9",
"reason": "payment_not_confirmed",
"buyer_name": "María Ramos",
"contact": {
"channel": "email",
"value": "maria@example.com"
}
}
{
"claim_token": "<OPAQUE_CLAIM_TOKEN>",
"claim_status": "created",
"request_id": "req_01JXYZ"
}
Este flujo debe usar rate limiting, controles antiabuso, token opaco y exposición mínima de datos.
Gestión de reclamos por la empresa
| Audiencia | Método | Ruta propuesta | Uso | Idempotencia | Eventos o callbacks relacionados |
|---|---|---|---|---|---|
| Integración | POST |
/v1/payment-orders/{id}/claims |
Crear reclamo vinculado. | Obligatoria | claim.created |
| Administración | GET |
/v1/payment-claims |
Listar reclamos. | No | Ninguno |
| Administración | GET |
/v1/payment-claims/{claim_id} |
Consultar reclamo. | No | Ninguno |
| Administración | POST |
/v1/payment-claims/{claim_id}/acknowledge |
Registrar recepción. | Obligatoria | claim.acknowledged |
| Administración | POST |
/v1/payment-claims/{claim_id}/assign |
Asignar responsable. | Obligatoria | claim.assigned |
| Administración | POST |
/v1/payment-claims/{claim_id}/resolve |
Registrar resolución. | Obligatoria | claim.resolved |
| Administración | GET |
/v1/payment-claims/{claim_id}/history |
Consultar auditoría. | No | Ninguno |
Casos pendientes
Tipos principales:
late_payment
amount_difference
underpayment
overpayment
ambiguous_payment
evidence_review
cancelled_order_with_payment
refund_required
delivery_failure
unresolved_payment
operational_error
| Audiencia | Método | Ruta propuesta | Uso | Idempotencia | Eventos o callbacks relacionados |
|---|---|---|---|---|---|
| Integración | GET |
/v1/pending-cases |
Listar pendientes. | No | Ninguno |
| Integración | GET |
/v1/pending-cases/{case_id} |
Consultar caso. | No | Ninguno |
| Integración | GET |
/v1/pending-cases/summary |
Consultar totales y antigüedad. | No | Ninguno |
| Administración | POST |
/v1/pending-cases/{case_id}/acknowledge |
Registrar que fue visto. | Obligatoria | case.acknowledged |
| Administración | POST |
/v1/pending-cases/{case_id}/assign |
Asignar responsable. | Obligatoria | case.assigned |
| Administración | POST |
/v1/pending-cases/{case_id}/request-evidence |
Solicitar constancia. | Obligatoria | case.evidence_requested |
| Administración | POST |
/v1/pending-cases/{case_id}/evidence |
Añadir evidencia. | Obligatoria | payment.evidence_received |
| Administración | POST |
/v1/pending-cases/{case_id}/notes |
Registrar nota. | Obligatoria | case.note_added |
| Administración | POST |
/v1/pending-cases/{case_id}/resolve |
Resolver el caso. | Obligatoria | case.resolved |
| Administración | GET |
/v1/pending-cases/{case_id}/history |
Consultar auditoría. | No | Ninguno |
Ejemplo: resolver un caso
POST /v1/pending-cases/case_01JXYZ/resolve
{
"resolution": "accept_late_payment",
"reason": "La empresa confirmó que la venta continúa vigente.",
"evidence_ids": [
"evi_01JXYZ"
]
}
{
"case_id": "case_01JXYZ",
"status": "resolved",
"resolved_at": "2026-07-20T16:30:00-05:00",
"request_id": "req_01JXYZ"
}
Resoluciones permitidas
confirm_reconciliation
maintain_pending
request_more_evidence
mark_unresolved
accept_late_payment
reject_commercial_operation
create_supplemental_order
create_refund_case
close_without_financial_match
Errores principales
| HTTP | Código | Descripción |
|---|---|---|
| 415 | evidence_not_supported |
Formato no admitido. |
| 413 | evidence_too_large |
Archivo excede el límite. |
| 422 | evidence_unreadable |
La imagen no puede interpretarse. |
| 500 | ocr_failed |
El procesamiento falló. |
| 404 | pending_case_not_found |
Caso inexistente. |
| 409 | pending_case_already_resolved |
Caso ya cerrado. |
| 409 | resolution_not_allowed |
Resolución incompatible. |
| 429 | rate_limit_exceeded |
Demasiadas solicitudes públicas. |