Ejemplo: rutas de cobranza
Este ejemplo recorre un recurso real de la Web API de Crono: la ruta diaria de cobranza de un asesor, expuesta por el módulo Crono.RutasCobranza. Todas las operaciones aplican sobre el asesor autenticado por la credencial de la API: cada quien ve y gestiona solo sus propias rutas.
Recuerda enviar la credencial del esquema Api y las cabeceras de tipo de medio (ver Autenticación y La Web API en detalle):
Accept: application/vnd.crono.v1+json
Content-Type: application/vnd.crono.v1+json
Endpoints del recurso
Base del recurso: api/v1/rutas-cobranza.
| Método | Ruta | Permiso | Devuelve |
|---|---|---|---|
GET | /funciones | Ver | List<FuncionRutaDto> |
GET | /hoy | Ver | RutaCobranzaDto |
PUT | /reordenacion | Gestionar | RutaCobranzaDto |
PUT | /paradas/estado | Gestionar | RutaParadaDto |
POST | /recalculos | Gestionar | RutaCobranzaDto |
Listar las funciones del asesor
Cada asesor puede tener varias funciones habilitadas para ruta de cobranza (según la configuración de la organización), y cada función tiene su propia ruta:
GET /api/v1/rutas-cobranza/funciones
Accept: application/vnd.crono.v1+json
[HttpGet("funciones"), MapToApiVersion("1")]
[ProducesResponseType(typeof(List<FuncionRutaDto>), Status200OK)]
[Permiso(RutasCobranzaPermisos.Ver)]
public async Task<IActionResult> ObtenerFunciones(CancellationToken cancelToken)
{
var funciones = await _rutaCobranzaServicio.ObtenerFuncionesRutaAsync(cancelToken);
return Ok(funciones);
}
Obtener la ruta del día
Devuelve la ruta de hoy para el asesor (con sus paradas ordenadas). Acepta parámetros por query string:
GET /api/v1/rutas-cobranza/hoy?funcionId=12
Accept: application/vnd.crono.v1+json
Reordenar las paradas
El asesor puede reordenar sus paradas; requiere el permiso Gestionar:
PUT /api/v1/rutas-cobranza/reordenacion
Content-Type: application/vnd.crono.v1+json
{ "funcionId": 12, "ordenParadas": [45, 12, 8, 30] }
Marcar el estado de una parada
Registrar el resultado de una visita (visitada, pospuesta, etc.):
PUT /api/v1/rutas-cobranza/paradas/estado
Content-Type: application/vnd.crono.v1+json
{ "paradaId": 45, "estado": "Visitada" }
Recalcular la ruta
Vuelve a calcular la ruta (por ejemplo, tras cambios en cartera):
POST /api/v1/rutas-cobranza/recalculos
Content-Type: application/vnd.crono.v1+json
{ "funcionId": 12 }
Respuestas y errores
200 OKcon el DTO correspondiente cuando la operación tiene éxito.401 Unauthorizedsi la credencial no es válida;403 Forbiddensi falta el permiso.422 Unprocessable Entitysi el cuerpo no supera la validación de modelo.415 Unsupported Media Typesi no envías el tipo de medioapplication/vnd.crono.v1+json.
El resto de códigos y el modelo uniforme de errores están en La Web API en detalle.
Este recurso vive en el módulo Crono.RutasCobranza, no en Crono.WebApi: el controlador hereda de CronoApiController (de Crono.Web.Comun) y se agrupa en la documentación bajo prestamo. Es el patrón a seguir para exponer endpoints desde cualquier módulo.