Ir al contenido

Autorizaciones de Documentos

El sistema de autorizaciones permite gestionar excepciones comerciales que requieren aprobación de un supervisor antes de proceder. Casos típicos incluyen descuentos que exceden las políticas de la empresa, precios especiales para clientes VIP, y excepciones a límites de crédito.


Antes de usar la API de autorizaciones necesitas:

  1. Una API Key con uno de estos roles: ADMIN, SUPER-ADMIN, SUPERVISOR-VENTAS, OPERADOR, o FULL-API
  2. El flujo de autorización habilitado en la configuración del tenant
  3. Para aprobar/rechazar: rol de supervisor (ADMIN, SUPER-ADMIN, SUPERVISOR-VENTAS, FULL-API)

El sistema utiliza un modelo consolidado: una solicitud agrupa múltiples items de autorización relacionados con un mismo documento. Esto permite:

  • Una sola notificación por documento (no una por cada línea)
  • Resolución eficiente: aprobar/rechazar todo o resolver items individualmente
  • Trazabilidad completa: historial consolidado por documento
EstadoDescripciónSiguiente acción
PENDIENTEEsperando resolución de supervisorAprobar, rechazar o resolver items
APROBADATodos los items aprobadosDocumento listo para procesar
RECHAZADATodos los items rechazadosOperador debe corregir y re-solicitar
PARCIALAlgunos items aprobados, otros rechazadosOperador debe corregir items rechazados
EXPIRADATiempo de espera agotadoOperador debe crear nueva solicitud
TipoIntegraciónDescripción
BHE✅ CompletaBoleta de Honorarios Electrónica
FACTURA⚠️ ManualFactura Electrónica
BOLETA⚠️ ManualBoleta de Venta
COTIZACION⚠️ ManualCotización
NOTA_CREDITO⚠️ ManualNota de Crédito
TipoDescripción
DESCUENTO_LINEADescuento por línea de producto/servicio
PRECIO_ESPECIAL_LINEAPrecio especial por línea
LIMITE_CREDITOExcede límite de crédito del cliente
EXCEPCION_COMERCIALExcepción a política comercial
PLAZO_PAGO_EXTENDIDOPlazo de pago mayor al permitido
MONTO_MAXIMO_DOCUMENTODocumento excede monto máximo
OTROOtro tipo de autorización
AlcanceDescripción
LINEAAutorización específica para una línea del documento
DOCUMENTOAutorización que aplica a todo el documento

Operador Redcumbre Supervisor
│ │ │
│── POST /autorizaciones-v2 ──▶│ │
│ (crea solicitud) │ │
│ │ │
│◀── Response ────────────────│ │
│ (id, estado: PENDIENTE) │ │
│ │── Notificación ───────────▶│
│ │ (push, email, in-app) │
│ │ │
│ │◀── POST /:id/aprobar ──────│
│ │ o POST /:id/rechazar │
│ │ o POST /:id/resolver │
│ │ │
│◀── Notificación ────────────│ │
│ (resultado) │ │
│ │ │
│ [Si BHE: Borrador → │ │
│ AUTORIZADO/RECHAZADO] │ │

Tiempos de expiración:

  • Default: 1 semana (configurable por tenant)
  • Solicitudes expiradas se marcan automáticamente como EXPIRADA
  • El operador debe crear una nueva solicitud si expira

Endpoint: POST /{tenantSlug}/autorizaciones-v2

Crea una nueva solicitud de autorización consolidada con uno o más items.

Ventana de terminal
curl -X POST "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2" \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"tipoDocumento": "BHE",
"borradorId": "cm5borrador123",
"items": [
{
"tipo": "DESCUENTO_LINEA",
"alcance": "LINEA",
"lineaId": "linea-001",
"productoId": "prod-abc123",
"productoNombre": "Consultoría Tributaria",
"codigoSku": "CONS-TRIB-01",
"valorPermitido": 10,
"valorSolicitado": 25,
"unidad": "PORCENTAJE",
"motivo": "Cliente VIP con contrato anual",
"contexto": {
"cantidad": 1,
"precioUnitario": 500000
}
}
]
}'
CampoTipoRequeridoDescripción
tipoDocumentoenumTipo de documento (BHE, FACTURA, etc.)
borradorIdstringNoID del borrador asociado (solo BHE)
itemsarrayLista de items de autorización (mín 1)
CampoTipoRequeridoDescripción
tipoenumTipo de autorización
alcanceenumLINEA o DOCUMENTO
lineaIdstringCondicionalID de la línea (requerido si alcance = LINEA)
productoIdstringNoID del producto asociado
productoNombrestringNoNombre del producto (snapshot)
codigoSkustringNoCódigo SKU del producto
valorPermitidonumberNoValor máximo según política
valorSolicitadonumberNoValor que se solicita
unidadenumNoPORCENTAJE, MONTO, DIAS
motivostringJustificación de la solicitud
contextoobjectNoDatos adicionales según tipo
{
"id": "cm5solicitud123",
"tenantId": "8",
"tipoDocumento": "BHE",
"borradorId": "cm5borrador123",
"solicitanteUserId": "user-001",
"solicitanteNombre": "Juan Pérez",
"autorizadorUserId": null,
"autorizadorNombre": null,
"estado": "PENDIENTE",
"createdAt": "2025-12-19T10:00:00Z",
"expiresAt": "2025-12-26T10:00:00Z",
"resueltaAt": null,
"items": [
{
"id": "cm5item001",
"tipo": "DESCUENTO_LINEA",
"alcance": "LINEA",
"lineaId": "linea-001",
"productoId": "prod-abc123",
"productoNombre": "Consultoría Tributaria",
"codigoSku": "CONS-TRIB-01",
"valorPermitido": 10,
"valorSolicitado": 25,
"unidad": "PORCENTAJE",
"motivo": "Cliente VIP con contrato anual",
"contexto": { "cantidad": 1, "precioUnitario": 500000 },
"estado": "PENDIENTE",
"comentarioResolucion": null
}
]
}

Endpoint: GET /{tenantSlug}/autorizaciones-v2

Lista solicitudes con filtros y paginación.

ParámetroTipoDescripción
estadoenumFiltrar por estado (default: PENDIENTE)
tipoDocumentoenumFiltrar por tipo de documento
tipoAutorizacionenumFiltrar por tipo de autorización
solicitanteUserIdstringFiltrar por solicitante (solo admins)
pagenumberPágina (default: 1)
limitnumberResultados por página (default: 20, max: 100)
RolComportamiento
SUPER-ADMIN, ADMIN, SUPERVISOR-VENTAS, FULL-APIVe todas las solicitudes del tenant
OPERADORSolo ve sus propias solicitudes
Ventana de terminal
curl -X GET "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2?estado=PENDIENTE&limit=20" \
-H "Authorization: Bearer {api_key}"
{
"data": [
{
"id": "cm5solicitud123",
"tipoDocumento": "BHE",
"solicitanteNombre": "Juan Pérez",
"estado": "PENDIENTE",
"createdAt": "2025-12-19T10:00:00Z",
"expiresAt": "2025-12-26T10:00:00Z",
"items": [...]
}
],
"total": 15,
"page": 1,
"limit": 20,
"totalPages": 1
}

Endpoint: GET /{tenantSlug}/autorizaciones-v2/{id}

Obtiene el detalle completo de una solicitud incluyendo items y borrador asociado.

Ventana de terminal
curl -X GET "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2/{id}" \
-H "Authorization: Bearer {api_key}"
{
"id": "cm5solicitud123",
"tenantId": "8",
"tipoDocumento": "BHE",
"borradorId": "cm5borrador123",
"solicitanteUserId": "user-001",
"solicitanteNombre": "Juan Pérez",
"autorizadorUserId": null,
"autorizadorNombre": null,
"estado": "PENDIENTE",
"createdAt": "2025-12-19T10:00:00Z",
"expiresAt": "2025-12-26T10:00:00Z",
"resueltaAt": null,
"items": [...],
"bheBorrador": {
"id": "cm5borrador123",
"estado": "EN_AUTORIZACION",
"montoBruto": 450000,
"ppm": 61875,
"montoLiquido": 388125
}
}

Endpoint: POST /{tenantSlug}/autorizaciones-v2/{id}/aprobar

Aprueba todos los items de una solicitud pendiente.

  • Todos los items pasan a estado APROBADO
  • La solicitud pasa a estado APROBADA
  • Si hay borrador BHE asociado, se marca como AUTORIZADO (listo para emitir)
  • Se notifica al solicitante
Ventana de terminal
curl -X POST "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2/{id}/aprobar" \
-H "Authorization: Bearer {api_key}"
{
"id": "cm5solicitud123",
"estado": "APROBADA",
"autorizadorUserId": "supervisor-001",
"autorizadorNombre": "María García",
"resueltaAt": "2025-12-19T12:30:00Z",
"items": [
{
"id": "cm5item001",
"estado": "APROBADO"
}
]
}

Endpoint: POST /{tenantSlug}/autorizaciones-v2/{id}/rechazar

Rechaza todos los items de una solicitud pendiente.

Ventana de terminal
curl -X POST "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2/{id}/rechazar" \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"comentario": "Descuento demasiado alto para este cliente"
}'
CampoTipoRequeridoDescripción
comentariostringNoMotivo del rechazo
  • Todos los items pasan a estado RECHAZADO
  • La solicitud pasa a estado RECHAZADA
  • Si hay borrador BHE asociado, se marca como RECHAZADO
  • Se notifica al solicitante con el comentario
  • El solicitante puede editar el borrador y volver a solicitar autorización
{
"id": "cm5solicitud123",
"estado": "RECHAZADA",
"autorizadorUserId": "supervisor-001",
"autorizadorNombre": "María García",
"resueltaAt": "2025-12-19T12:30:00Z",
"items": [
{
"id": "cm5item001",
"estado": "RECHAZADO",
"comentarioResolucion": "Descuento demasiado alto para este cliente"
}
]
}

Endpoint: POST /{tenantSlug}/autorizaciones-v2/{id}/resolver

Resuelve una solicitud aprobando o rechazando items de forma individual (resolución parcial).

Ventana de terminal
curl -X POST "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2/{id}/resolver" \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"resoluciones": [
{ "itemId": "cm5item001", "aprobado": true },
{ "itemId": "cm5item002", "aprobado": false, "comentario": "Descuento excesivo" }
]
}'
CampoTipoRequeridoDescripción
itemIdstringID del item a resolver
aprobadobooleantrue para aprobar, false para rechazar
comentariostringNoComentario (típicamente para rechazos)
ResultadoEstado SolicitudEstado Borrador BHE
Todos aprobadosAPROBADAAUTORIZADO
Todos rechazadosRECHAZADARECHAZADO
MixtoPARCIALRECHAZADO
{
"id": "cm5solicitud123",
"estado": "PARCIAL",
"autorizadorUserId": "supervisor-001",
"autorizadorNombre": "María García",
"resueltaAt": "2025-12-19T12:30:00Z",
"items": [
{
"id": "cm5item001",
"estado": "APROBADO",
"comentarioResolucion": null
},
{
"id": "cm5item002",
"estado": "RECHAZADO",
"comentarioResolucion": "Descuento excesivo"
}
]
}

Cuando un borrador BHE requiere autorización (ej: descuento excede el máximo), el flujo completo es:

Operador Redcumbre Supervisor
│ │ │
│── POST /bhe/borradores ──▶│ │
│ (con descuento > max) │ │
│ │ │
│◀── Response ──────────────│ │
│ (requiereAutorizacion) │ │
│ │ │
│── POST /borradores/:id/ │ │
│ solicitar-autorizacion ▶│ │
│ │ │
│ [Borrador → │ │
│ EN_AUTORIZACION] │ │
│ │── Notifica ───────────────▶│
│ │ │
│ │◀── Aprueba ────────────────│
│ │ │
│◀── Notificación ──────────│ │
│ (AUTORIZADO) │ │
│ │ │
│── POST /borradores/:id/ │ │
│ emitir ────────────────▶│ │
│ │ │
│◀── BHE Emitida ───────────│ │
Estado BorradorDescripción
BORRADOREditable, puede solicitar autorización
EN_AUTORIZACIONEsperando aprobación
AUTORIZADOAprobado, listo para emitir
RECHAZADORechazado, puede editarse y re-solicitar
EMITIDOBHE emitida exitosamente

El modo sandbox permite probar la API sin persistir datos ni afectar el sistema real.

El modo sandbox se activa automáticamente cuando tu API Key tiene isSandbox: true.

Usa estos IDs para probar diferentes escenarios:

IDGET /:idPOST aprobarPOST rechazarPOST resolver
sandbox-sol-pendingEstado PENDIENTE✅ Éxito✅ Éxito✅ Éxito
sandbox-sol-approvedEstado APROBADA❌ Error 400❌ Error 400❌ Error 400
sandbox-sol-rejectedEstado RECHAZADA❌ Error 400❌ Error 400❌ Error 400
sandbox-sol-partialEstado PARCIAL❌ Error 400❌ Error 400❌ Error 400
sandbox-sol-expiredEstado EXPIRADA❌ Error 400❌ Error 400❌ Error 400
sandbox-sol-notfound❌ Error 404❌ Error 404❌ Error 404❌ Error 404

Para usar con POST /:id/resolver y el ID sandbox-sol-pending:

ItemIdDescripción
sandbox-item-001Item tipo DESCUENTO_LINEA
sandbox-item-002Item tipo PRECIO_ESPECIAL_LINEA
Ventana de terminal
# Crear solicitud (no persiste)
curl -X POST "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2" \
-H "Authorization: Bearer {sandbox_api_key}" \
-H "Content-Type: application/json" \
-d '{
"tipoDocumento": "BHE",
"items": [{
"tipo": "DESCUENTO_LINEA",
"alcance": "LINEA",
"lineaId": "linea-001",
"valorPermitido": 10,
"valorSolicitado": 25,
"unidad": "PORCENTAJE",
"motivo": "Test sandbox"
}]
}'
# Consultar solicitud pendiente
curl -X GET "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2/sandbox-sol-pending" \
-H "Authorization: Bearer {sandbox_api_key}"
# Aprobar solicitud
curl -X POST "https://api.redcumbre.cl/{tenantSlug}/autorizaciones-v2/sandbox-sol-pending/aprobar" \
-H "Authorization: Bearer {sandbox_api_key}"

ErrorDescripción
Debe incluir al menos un item de autorizaciónArray items vacío o no enviado
La solicitud ya fue aprobada/rechazadaIntento de resolver solicitud no pendiente
La solicitud ha expiradoSolicitud pasó su fecha de expiración
El flujo de autorización no está habilitadoTenant no tiene habilitada la funcionalidad
Item X no pertenece a esta solicitudItemId inválido en resolución
ErrorDescripción
No tienes acceso a esta solicitudOperador intentando ver solicitud de otro
ForbiddenRol sin permisos para la operación
ErrorDescripción
Solicitud X no encontradaID de solicitud no existe o no pertenece al tenant

Las solicitudes pendientes expiran automáticamente según la configuración del tenant:

ConfiguraciónDefaultDescripción
timeoutAutorizacionMinutos10080 (1 semana)Tiempo máximo de espera
  1. Un cron job verifica solicitudes pendientes con expiresAt < now
  2. Los items se marcan como RECHAZADO con comentario “Solicitud expirada por timeout”
  3. La solicitud pasa a estado EXPIRADA
  4. Si hay borrador BHE asociado, se marca como RECHAZADO
  5. Se notifica al solicitante

Para detalles técnicos completos y especificaciones de todos los endpoints:

👉 Ver endpoints de Autorizaciones en Swagger