feat(rh/reclutamiento): cobertura en PE, piso 2025, fuente...
feat(rh/reclutamiento): cobertura en PE, piso 2025, fuente Corporativo/Empresas, permanencia por empresa y fixes de auditoría
Decisiones del área (2026-09-22):
- Cobertura = "5. Fecha de entrega de PE" (col. S); la firma (col. T) se conserva en fecha_firma_contrato (ALTER en boot). Ahí termina la responsabilidad de Reclutamiento.
- Días hábiles = NETWORKDAYS-1 (sin contar el día de inicio), misma fórmula que el "Tiempo Total" de la hoja: todo tiempo baja 1 día vs antes.
- Piso del módulo 2025 (_RECLUTAMIENTO_ANIO_MIN): 2024 traía 19 filas con hueco de 5 meses; entra la fila si se generó O se cerró en 2025+.
- Umbral de vacante crítica: rh_vacante_dias_critico = 60 (antes 120 clavado); el response manda en_proceso_dias_critico.
- Vistas por fuente: stats y vacantes reciben fuente=corporativo|empresas sobre trabajado_por (_cond_fuente); fuentes_disponibles para apagar la vista Empresas mientras no haya hojas.
- Tiempo de cobertura por portafolio y por empresa (mismo método que por nivel); meta_dias/exceso_dias y fecha_firma_contrato por vacante.
- Permanencia 90 días respeta Portafolio/Empresa (BAJAS-RL trae canónicos desde 2026-08); rankings por empresa; motivo de baja preparado (bajas_rl.motivo_baja/tipo_baja, columna P que el área agregará; parser tolerante, NULL mientras no exista). Ventanas inclusivas (<=30, 31-60, 61-90) como las etiquetas del front; detalle con ventana móvil de 12 meses y umbrales de /admin.
Correcciones de la auditoría multi-agente:
- Empresa/portafolio se filtran en Python tras homologar también para el stock de en proceso y el embudo (_filtrar_alcance): en SQL contra la columna cruda dejaban la tarjeta y el heatmap en 0.
- Mismo piso de año en el stock y el embudo (tarjeta 17 = drill 17; embudo 274 = total).
- Histograma y tendencia por cobertura sobre el universo evaluado (detalle_kpi): ya no cuentan canceladas/en proceso con fecha de PE.
- Sin retorno anticipado con rows vacío: Permanencia sale del padrón de RL y se apagaba al filtrar una empresa sin vacantes en la hoja (CEDA).
- Desempate por nombre en los rankings de fuga.
- Parser: tiempos fuera de [0,1000] -> NULL (residuos de fórmula).