3.5 KiB
3.5 KiB
Guia de integracion app: API de estado automatico
Objetivo
Este endpoint registra actualizaciones automaticas de estado sin tocar el flujo manual existente.
- Endpoint:
POST /api/trips/:id/auto-status - Auth:
Authorization: Bearer <JWT> - Uso: registrar eventos automaticos en backend y auditoria en BBDD.
Cuando usar esta API en la app
Usar esta API cuando el estado se genera automaticamente (por ejemplo, logica de geolocalizacion, reglas de negocio automatas, deteccion de llegada/salida, etc.).
No usar esta API para cambios manuales del conductor desde UI normal de estados; para eso se mantiene POST /api/trips/:id/status.
Reglas funcionales clave
- Siempre inserta en
c_cambios_estadoconactualizado_automaticamente = 1. - Si se envia
id_punto:id_estadosolo puede ser3,4o5.- ademas actualiza
c_viajes_puntosconactualizado_automaticamente = 1yborrado_en_app = 0. - el trigger
trg_c_viajes_puntos_tracking_augenera auditoria enc_viajes_puntos_tracking.
- Si NO se envia
id_punto:id_estadopuede ser cualquier estado valido det_viaje_estados.- no toca
c_viajes_puntos.
- No actualiza
c_viajes.id_estado. - No admite fotos en este endpoint (
fotos_concat,foto, multipart).
Contrato request
Ruta:
POST /api/trips/:id/auto-status
Body JSON:
{
"id_estado": 5,
"id_punto": 8123,
"observaciones": "Cambio automatico por regla GPS",
"ind_fallido": 0,
"latitud": "40.416775",
"longitud": "-3.703790",
"fecha_y_hora": "2026-02-17 12:34:56"
}
Campos:
id_estado(obligatorio, entero > 0).id_punto(opcional, entero > 0).observaciones(opcional, string).ind_fallido(opcional, default0; acepta0/1,false/true).latitudylongitud(opcionales; se normalizan y pueden quedarnull).fecha_y_hora(opcional, formatoYYYY-MM-DD HH:mm:ss; si no es valida se usa hora servidor).
Respuestas esperadas
200 OK
{
"success": true,
"trip_id": 248230,
"id_estado": 5,
"id_punto": 8123,
"actualizado_automaticamente": 1,
"updated_at": "2026-02-18T09:30:00.000Z"
}
400payload invalido.401token ausente/invalido.403usuario sin permisos sobre el viaje.404viaje no existe o punto no existe.422si se enviaid_puntoconid_estadofuera de3/4/5.500error interno.
Ejemplo rapido de consumo (JavaScript/TypeScript)
async function sendAutoStatus({
baseUrl,
token,
tripId,
payload
}: {
baseUrl: string;
token: string;
tripId: number;
payload: {
id_estado: number;
id_punto?: number;
observaciones?: string;
ind_fallido?: 0 | 1;
latitud?: string;
longitud?: string;
fecha_y_hora?: string;
};
}) {
const response = await fetch(`${baseUrl}/api/trips/${tripId}/auto-status`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`
},
body: JSON.stringify(payload)
});
const body = await response.json().catch(() => ({}));
if (!response.ok) {
throw new Error(`auto-status failed: ${response.status} ${JSON.stringify(body)}`);
}
return body;
}
Checklist de integracion en app
- Enrutar eventos automaticos a
POST /api/trips/:id/auto-status. - Si el evento es de punto, enviar siempre
id_puntoyid_estadoen3/4/5. - No enviar fotos en este endpoint.
- Tratar
422como error funcional (payload correcto de forma tecnica, pero regla de negocio invalida). - Mantener endpoint manual actual para interaccion humana.