Files
Plataforma-de-desarrolladores/Documentos_Etapa_Verificacion_20260927.sql
Jorge Luis caudillo esparza e8160eefba --documentos
2026-09-27 14:44:12 -07:00

123 lines
6.1 KiB
Transact-SQL

/* Sólo consultas. Ejecutar después de instalar y únicamente con autorización.
Las consultas de inconsistencias deben devolver cero filas. */
SET NOCOUNT ON;
-- Una versión vigente por etapa y tipo.
SELECT CveFraccionamientoEtapa, CveTipoDocumento, COUNT(*) AS VersionesActivas
FROM dbo.Tra_DocumentosSolicitud
WHERE EsActivo = 1
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
HAVING COUNT(*) > 1;
-- Las referencias opcionales siguen perteneciendo a la misma etapa.
SELECT D.CveDocumentoSolicitud
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
WHERE D.CveFraccionamientoEtapa <> S.CveFraccionamientoEtapa;
SELECT C.CveConfiguracionDocumento
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
WHERE C.CveFraccionamientoEtapa <> S.CveFraccionamientoEtapa;
-- Ninguna versión histórica conserva la marca de renovación.
SELECT CveDocumentoSolicitud
FROM dbo.Tra_DocumentosSolicitud
WHERE EsActivo = 0 AND Vencido = 1;
-- Configuración real del trabajo: diario (4), cada día (1), 03:00 (30000).
SELECT J.name AS Trabajo, J.enabled AS Habilitado,
S.name AS Horario, S.freq_type, S.freq_interval, S.active_start_time,
P.database_name AS BaseDatos, P.command AS Comando
FROM msdb.dbo.sysjobs AS J
INNER JOIN msdb.dbo.sysjobschedules AS JS ON JS.job_id = J.job_id
INNER JOIN msdb.dbo.sysschedules AS S ON S.schedule_id = JS.schedule_id
INNER JOIN msdb.dbo.sysjobsteps AS P ON P.job_id = J.job_id
WHERE J.name = 'Job_VerificaVigencias';
-- Inventario de versiones, sin exponer rutas físicas.
SELECT CveFraccionamientoEtapa, CveTipoDocumento,
COUNT(*) AS Versiones,
SUM(CONVERT(int, EsActivo)) AS Vigentes,
SUM(CONVERT(int, Vencido)) AS RequierenRenovacion
FROM dbo.Tra_DocumentosSolicitud
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento;
-- Casos independientes de los datos reales. Fecha de vencimiento inclusiva.
;WITH Casos AS
(
SELECT * FROM
(
VALUES
('Sin archivo requerido', 0, 1, CAST(NULL AS date), CAST(NULL AS bit), 'Pendientes'),
('Archivo sin revisión', 1, 1, CAST('20261001' AS date), CAST(NULL AS bit), 'Por aprobar'),
('Archivo rechazado', 1, 1, CAST('20261001' AS date), CAST(0 AS bit), 'Por aprobar'),
('Aprobado vigente', 1, 1, CAST('20261001' AS date), CAST(1 AS bit), 'Aprobados'),
('Expirado requerido', 1, 1, CAST('20260901' AS date), CAST(1 AS bit), 'Vencidos'),
('Expirado sin requisito', 1, 0, CAST('20260901' AS date), CAST(1 AS bit), 'Aprobados'),
('Vence hoy', 1, 1, CAST('20260927' AS date), CAST(1 AS bit), 'Aprobados')
) AS C(Nombre, TieneArchivo, EsRequerido, FechaVencimiento, EsAprobado, Esperado)
), Resultado AS
(
SELECT *, CASE
WHEN TieneArchivo = 0 THEN 'Pendientes'
WHEN FechaVencimiento < CAST('20260927' AS date) AND EsRequerido = 1 THEN 'Vencidos'
WHEN EsAprobado = 1 THEN 'Aprobados'
ELSE 'Por aprobar'
END AS Obtenido
FROM Casos
)
SELECT Nombre, Esperado, Obtenido
FROM Resultado
WHERE Esperado <> Obtenido;
-- La marca persistida coincide con los requerimientos efectivos actuales.
DECLARE @Hoy date = CONVERT(date, SYSDATETIMEOFFSET() AT TIME ZONE 'US Mountain Standard Time');
;WITH Configuracion AS
(
SELECT S.CveSolicitud, S.CveFraccionamientoEtapa, G.CveTipoDocumento,
COALESCE(P.EsRequerido, G.EsRequerido) AS EsRequerido,
COALESCE(P.EsCliente, G.EsCliente) AS EsCliente,
COALESCE(P.TieneVigencia, G.TieneVigencia) AS TieneVigencia,
COALESCE(P.EsActivo, G.EsActivo) AS EsActivo,
E.EsFinal, S.CveTipoTramite, S.Folio
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
INNER JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite
LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud
AND P.CveTipoDocumento = G.CveTipoDocumento
UNION ALL
SELECT P.CveSolicitud, P.CveFraccionamientoEtapa, P.CveTipoDocumento,
P.EsRequerido, P.EsCliente, P.TieneVigencia, P.EsActivo,
ISNULL(E.EsFinal, 0), S.CveTipoTramite, S.Folio
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = P.CveSolicitud
LEFT JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
WHERE P.CveSolicitud IS NULL OR NOT EXISTS
(
SELECT 1 FROM dbo.Tra_TiposTramiteDocumento AS G
WHERE G.CveTipoTramite = S.CveTipoTramite
AND G.CveTipoDocumento = P.CveTipoDocumento
)
),
Requisitos AS
(
SELECT C.CveFraccionamientoEtapa, C.CveTipoDocumento,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsRequerido = 1
AND C.EsFinal = 0 AND T.EsActivo = 1 THEN 1 ELSE 0 END)) AS EsRequerido,
CONVERT(bit, MAX(CONVERT(int, C.EsCliente))) AS EsCliente,
CONVERT(bit, MAX(CONVERT(int, C.TieneVigencia))) AS TieneVigencia,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsFinal = 0 THEN 1 ELSE 0 END)) AS TieneContextoAbierto
FROM Configuracion AS C
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = C.CveTipoDocumento
GROUP BY C.CveFraccionamientoEtapa, C.CveTipoDocumento
)
SELECT D.CveDocumentoSolicitud, D.Vencido AS MarcaPersistida,
CONVERT(bit, CASE WHEN D.EsActivo = 1 AND D.FechaVencimiento < @Hoy
AND R.EsRequerido = 1 THEN 1 ELSE 0 END) AS MarcaEsperada
FROM dbo.Tra_DocumentosSolicitud AS D
LEFT JOIN Requisitos AS R ON R.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
AND R.CveTipoDocumento = D.CveTipoDocumento
WHERE D.Vencido <> CONVERT(bit, CASE WHEN D.EsActivo = 1 AND D.FechaVencimiento < @Hoy
AND R.EsRequerido = 1 THEN 1 ELSE 0 END);