123 lines
6.1 KiB
Transact-SQL
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);
|