Procesos programados¶
El dominio depende de procesos que corren fuera del ciclo de una petición HTTP: nada del ciclo de vida de una reserva o una publicación avanza por sí solo, alguien tiene que barrer periódicamente el estado vencido. Cada uno se implementará como una función de servicio invocada por un comando de gestión programado, no como trigger de base de datos, porque no hay evento de escritura que los dispare. Cada barrido se apoya en el índice que declara la ficha de la tabla correspondiente, para no recorrerla completa en cada corrida. El mecanismo de scheduling en sí (cron del sistema, u otro) no lo fija este documento.
Ninguno de estos procesos valida nada por su cuenta. Cada uno hace la
escritura que le toca y los triggers de la tabla imponen las
reglas, igual que si la escritura viniera de una petición: el barrido de
expiración mueve estado_id y trg_reserva_transicion_valida comprueba que
el par sea legal, trg_reserva_ajustar_stock decide si libera inventario y
trg_reserva_sancion_automatica evalúa el incumplimiento. Un proceso que
tuviera que repetir esas comprobaciones sería un segundo lugar donde la
regla puede divergir.
| Proceso | Frecuencia | Origen | Función de servicio | Índice de apoyo |
|---|---|---|---|---|
| Liberar retenciones vencidas | 15-30 s | RF-U-29 |
expirar_retenciones_vencidas |
idx_reserva_retencion |
| Publicar publicaciones programadas1 | 1 min | RF-C-25 |
Pendiente, ver nota | Publicacion.reservable_desde_at2 |
| Cerrar reservas por corte de ventana1 | 1 min | RF-C-26 |
Pendiente, ver nota | idx_publicacion_cierre |
| Expirar reservas no validadas | 1 min | RF-U-36RF-C-47 |
expirar_reserva |
idx_reserva_expiracion |
| Generar publicaciones del día | Por comercio | RF-C-23 |
generar_publicaciones_del_dia |
n/a3 |
| Enviar notificaciones pendientes | Continua | RF-U-44 |
enviar_pendientes |
idx_notificacion_cola |
| Calcular indicadores de cumplimiento | Diaria | RF-C-51RF-A-44 |
calcular_indicadores_diarios |
unq_comercioindicador_comercio_ventana_fecha |
| Evaluar alertas de cumplimiento | Diaria | RF-A-44 |
evaluar_alertas_cumplimiento |
n/a4 |
| Evaluar alertas por incidencias sin movimiento (48h) | Periódica | RF-A-32 |
evaluar_alertas_antiguedad |
idx_incidencia_abierta_movimiento |
| Recordar publicación faltante1 | Diaria | RF-C-56 |
Pendiente, ver nota | Comercio.ultima_publicacion_at2 |
| Vencer solicitudes de afiliación1 | Diaria | RF-A-10 |
Pendiente, ver nota | SolicitudAfiliacion.vence_at2 |
| Retener notificaciones antiguas | Mensual | RF-A-59 |
n/a5 | brin_notificacion_createdat |
-
Proceso vigente sin función de servicio nombrada todavía. La columna donde vive la marca temporal que lo sostiene ya existe en el modelo. La función queda por escribir en el los servicios de su módulo, siguiendo el mismo patrón que el resto de esta tabla (recorrer el índice/columna, mover el estado con la validación de transición correspondiente). ↩↩↩↩
-
Columna sin índice dedicado todavía, un barrido diario sobre un volumen bajo de filas (publicaciones/solicitudes/comercios activos) no lo necesita a esta escala, pero documentarlo aquí dejaría claro dónde agregarlo si el volumen crece. ↩↩↩
-
No hay un índice de barrido, el proceso no recorre una tabla buscando filas vencidas, se dispara una vez por comercio según su propia regla de generación (
Comercio.hora_generacion_publicacionohoras_antes_generacion). ↩ -
Recorre
ComercioIndicadorrecién calculado por el proceso anterior, en la misma corrida diaria; no necesita su propio índice de barrido. ↩ -
La purga es un
DELETEpor lotes acotados sobre el rango que cubre el índice BRIN, no una función de dominio. ↩