El filtro de /services/active usaba s.created_at (fecha de importación del aviso) para decidir si un servicio archivado sigue visible 15 días. Si el aviso se creó hace más de 15 días, al finalizarlo desaparecía de golpe de calendario.html aunque el frontend ya tenía preparado el efecto translucido/marca de agua. Ahora /services/set-appointment guarda archived_at dentro de raw_data en el momento real en que se archiva, y /services/active usa esa fecha (con fallback a created_at para registros antiguos sin archived_at).
Al finalizar/anular un servicio se borraban scheduled_date y scheduled_time, lo que lo hacía desaparecer de golpe de calendario.html (que solo muestra servicios con fecha). Ahora solo se borra la fecha para 'pendiente' y 'desasignado' (que vuelven a la bolsa); los anulados conservan su fecha y se muestran con el watermark 'Cerrado' que ya tenía preparado el frontend.
El filtro SQL de /providers/scraped excluía los servicios sin guild_id porque NULL IN (...) se evalúa como NULL (falso) en SQL. Ahora se muestran también los servicios sin gremio asignado.