Compare commits

..

9 Commits

Author SHA1 Message Date
Jorge Luis caudillo esparza
50f1ced127 update documentos 2026-10-03 23:48:31 -07:00
Jorge Luis caudillo esparza
72d0e6a589 delete documentos 2026-10-03 23:48:06 -07:00
Jorge Luis caudillo esparza
58954219c8 delete documentos 2026-10-03 23:47:43 -07:00
Jorge Luis caudillo esparza
0776ed8c59 Cambios en Gis lotes 2026-10-03 14:43:42 -07:00
Jorge Luis caudillo esparza
d2b7b982f3 Lotes 2026-10-02 14:34:16 -07:00
Jorge Luis caudillo esparza
c2f249c937 -- 2026-10-02 14:33:58 -07:00
Jorge Luis caudillo esparza
b7c80baadc Ajustes Lotes 2026-10-02 00:20:26 -07:00
Jorge Luis caudillo esparza
a2bde9e920 Ajustes visualizacion 2026-09-29 09:38:51 -07:00
Jorge Luis caudillo esparza
78a6666e5a pagos no bloquean apenas que esten vinculados al tramite y se muestran botones cmo menu se veo feo el menu se esta mejorando 2026-09-28 17:41:25 -07:00
180 changed files with 44892 additions and 1313 deletions

1
.gitignore vendored
View File

@@ -76,3 +76,4 @@ coverage/
*.secrets.json
Web.local.config
appsettings.local.json
/SIG.Web/Documentos/**

View File

@@ -135,3 +135,7 @@ Do not add the following until the user explicitly asks:
The starter must stay small and focused: commands, master page, login, contracts, dummy user session, bundle structure, copied assets, and centralized SQL foundation.
---
REGLA OBLIGATORIA: Nunca usar args.get_panelsUpdated() ni get_panelsUpdated() en JavaScript de WebForms/UpdatePanel de este proyecto; esa llamada rompe repetidamente el entorno. Para reinicializar después de postbacks parciales usar PageRequestManager.add_endRequest(function () { ... }) sin depender de args, o eventos delegados cuando corresponda.

View File

@@ -1,4 +1,4 @@
# AGENTS_MANTENIMIENTO_PROYECTO.md
# AGENTS_MANTENIMIENTO_PROYECTO.md
These rules complement `AGENTS.md` and are mandatory whenever the task involves commands, security, error handling, user feedback, grids, PDF migration, file delivery, verification, or project evolution.
@@ -74,6 +74,8 @@ Controlled outcomes and technical failures must use different logs.
## Grid display rules
- Los valores numéricos de negocio (hectáreas, superficies, avances, porcentajes, cantidades, importes y saldos) deben alinearse a la derecha tanto en los campos de captura como en las celdas y resúmenes donde se muestran. Usar las clases visuales existentes o la alineación del control; esta regla no convierte claves, folios ni códigos en cantidades.
- Every new or modified `asp:GridView` must declare `GridLines="None"`.
- Its `CssClass` must include the exact utility class `Widthall` so the grid uses the full available width.
- Do not add `table-bordered` to a GridView. Existing visual classes such as `table`, `table-striped`, and `table-hover` may be retained when appropriate.

View File

@@ -0,0 +1,649 @@
/*
Preparado a partir de las definiciones instaladas; no ejecutado.
Instalar junto con la aplicación. No modifica conceptos, recibos ni pagos.
CveSolicitud se conserva únicamente como referencia histórica.
Los convenios históricos sin una solicitud conservan CveTipoTramite NULL:
su asignación requiere una decisión de negocio; no se elige un trámite arbitrario.
*/
SET NOCOUNT ON;
IF COL_LENGTH('dbo.Convenios', 'CveTipoTramite') IS NULL
ALTER TABLE dbo.Convenios ADD CveTipoTramite int NULL;
GO
UPDATE C
SET CveTipoTramite = S.CveTipoTramite
FROM dbo.Convenios AS C
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
WHERE C.CveTipoTramite IS NULL;
IF NOT EXISTS
(
SELECT 1
FROM sys.foreign_keys
WHERE name = 'FK_Convenios_TipoTramite'
)
ALTER TABLE dbo.Convenios WITH CHECK
ADD CONSTRAINT FK_Convenios_TipoTramite
FOREIGN KEY (CveTipoTramite)
REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);
IF NOT EXISTS
(
SELECT 1
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Convenios')
AND name = 'IX_Convenios_Etapa_TipoTramite'
)
CREATE INDEX IX_Convenios_Etapa_TipoTramite
ON dbo.Convenios (CveFraccionamientoEtapa, CveTipoTramite);
DECLARE @QuitarRelacion nvarchar(max) = N'';
SELECT @QuitarRelacion = @QuitarRelacion
+ N'ALTER TABLE dbo.Convenios DROP CONSTRAINT ' + QUOTENAME(F.name) + N';'
FROM sys.foreign_keys AS F
WHERE F.parent_object_id = OBJECT_ID('dbo.Convenios')
AND F.referenced_object_id = OBJECT_ID('dbo.Tra_Solicitudes');
IF @QuitarRelacion <> N''
EXEC sys.sp_executesql @QuitarRelacion;
-- Resultado de diagnóstico; no cambia la clasificación de estos convenios.
SELECT CveConvenio, NumeroConvenio, CveFraccionamientoEtapa
FROM dbo.Convenios
WHERE CveTipoTramite IS NULL;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioAdd
@CveCliente int,
@CveFraccionamientoEtapa int,
@CveTipoTramite int,
@NumeroConvenio varchar(100),
@NumeroOficio varchar(100) = NULL,
@ViviendasAutorizadas int = NULL,
@ViviendasEnConvenio int,
@ViviendasPendientes int = NULL,
@ViviendasContratadas int = NULL,
@FechaConvenio date,
@Observaciones varchar(1000) = NULL,
@ConceptosXml xml,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT
@ErrorMostrar = NULL,
@ErrorTipo = 0,
@Return = 0;
BEGIN TRY
SET @NumeroConvenio = NULLIF(LTRIM(RTRIM(@NumeroConvenio)), '');
SET @NumeroOficio = NULLIF(LTRIM(RTRIM(@NumeroOficio)), '');
SET @Observaciones = NULLIF(LTRIM(RTRIM(@Observaciones)), '');
IF @CveCliente <= 0
BEGIN
SET @ErrorMostrar = 'Seleccione el desarrollador del convenio.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveFraccionamientoEtapa <= 0
BEGIN
SET @ErrorMostrar = 'Seleccione el fraccionamiento y etapa del convenio.';
SET @ErrorTipo = 2;
RETURN;
END;
IF ISNULL(@CveTipoTramite, 0) <= 0
BEGIN
SET @ErrorMostrar = 'Seleccione el tipo de trámite del convenio.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @NumeroConvenio IS NULL
BEGIN
SET @ErrorMostrar = 'Capture el número de convenio.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @ViviendasEnConvenio < 0
OR ISNULL(@ViviendasAutorizadas, 0) < 0
OR ISNULL(@ViviendasPendientes, 0) < 0
OR ISNULL(@ViviendasContratadas, 0) < 0
BEGIN
SET @ErrorMostrar = 'Las cantidades de viviendas no son válidas.';
SET @ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.FraccionamientosEtapas AS E
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND F.CveCliente = @CveCliente
)
BEGIN
SET @ErrorMostrar = 'La etapa seleccionada no pertenece al desarrollador indicado.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.Convenios AS C
WHERE C.NumeroConvenio = @NumeroConvenio
)
BEGIN
SET @ErrorMostrar = 'Ya existe un convenio con ese número.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Conceptos TABLE
(
Orden int NOT NULL PRIMARY KEY,
CveConvenioConcepto int NOT NULL,
Importe decimal(18,6) NOT NULL,
Tipo varchar(20) NOT NULL,
NumeroPagos int NOT NULL
);
DECLARE @Recibos TABLE
(
OrdenConcepto int NOT NULL,
Orden int NOT NULL,
Importe decimal(18,6) NOT NULL,
FechaVencimiento date NOT NULL,
Estatus varchar(30) NOT NULL,
PRIMARY KEY (OrdenConcepto, Orden)
);
IF @ConceptosXml IS NOT NULL
BEGIN
INSERT INTO @Conceptos
(
Orden,
CveConvenioConcepto,
Importe,
Tipo,
NumeroPagos
)
SELECT
C.value('@Orden', 'int'),
C.value('@CveConvenioConcepto', 'int'),
C.value('@Importe', 'decimal(18,6)'),
C.value('@Tipo', 'varchar(20)'),
C.value('@NumeroPagos', 'int')
FROM @ConceptosXml.nodes('/Conceptos/Concepto') AS X(C);
INSERT INTO @Recibos
(
OrdenConcepto,
Orden,
Importe,
FechaVencimiento,
Estatus
)
SELECT
C.value('@Orden', 'int'),
R.value('@Orden', 'int'),
R.value('@Importe', 'decimal(18,6)'),
R.value('@FechaVencimiento', 'date'),
COALESCE(
NULLIF(R.value('@Estatus', 'varchar(30)'), ''),
'PENDIENTE'
)
FROM @ConceptosXml.nodes('/Conceptos/Concepto') AS CX(C)
CROSS APPLY C.nodes('Recibos/Recibo') AS RX(R);
END;
IF NOT EXISTS (SELECT 1 FROM @Conceptos)
BEGIN
SET @ErrorMostrar = 'Agregue al menos un concepto al convenio.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM @Conceptos AS C
LEFT JOIN dbo.ConveniosConceptos AS CC ON CC.CveConvenioConcepto = C.CveConvenioConcepto
AND CC.EsActivo = 1
WHERE CC.CveConvenioConcepto IS NULL
OR C.Importe <= 0
OR NULLIF(LTRIM(RTRIM(C.Tipo)), '') IS NULL
OR C.NumeroPagos NOT BETWEEN 1 AND 12
)
BEGIN
SET @ErrorMostrar = 'Uno de los conceptos del convenio no es válido.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM @Recibos AS R
WHERE R.Importe <= 0
OR R.FechaVencimiento IS NULL
)
BEGIN
SET @ErrorMostrar = 'Todas las parcialidades deben tener importe y vencimiento válidos.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM @Conceptos AS C
OUTER APPLY
(
SELECT
COUNT(*) AS NumeroRecibos,
SUM(R.Importe) AS ImporteRecibos
FROM @Recibos AS R
WHERE R.OrdenConcepto = C.Orden
) AS R
WHERE ISNULL(R.NumeroRecibos, 0) <> C.NumeroPagos
OR ISNULL(R.ImporteRecibos, 0) <> C.Importe
)
BEGIN
SET @ErrorMostrar =
'La cantidad y suma de las parcialidades debe coincidir con cada concepto.';
SET @ErrorTipo = 2;
RETURN;
END;
INSERT INTO dbo.Convenios
(
CveCliente,
NumeroConvenio,
NumeroOficio,
CveFraccionamientoEtapa,
CveTipoTramite,
ViviendasAutorizadas,
ViviendasEnConvenio,
ViviendasPendientes,
ViviendasContratadas,
FechaConvenio,
Observaciones,
Estatus,
CveConvenioOrigen,
CveUsuario
)
VALUES
(
@CveCliente,
@NumeroConvenio,
@NumeroOficio,
@CveFraccionamientoEtapa,
@CveTipoTramite,
@ViviendasAutorizadas,
@ViviendasEnConvenio,
@ViviendasPendientes,
@ViviendasContratadas,
@FechaConvenio,
@Observaciones,
'ACTIVO',
NULL,
@CveUsuarioEjecuta
);
DECLARE @CveConvenio int = CONVERT(int, SCOPE_IDENTITY());
DECLARE @OrdenConcepto int = 0;
DECLARE @CveConvenioConcepto int;
DECLARE @ImporteConcepto decimal(18,6);
DECLARE @Tipo varchar(20);
DECLARE @NumeroPagos int;
DECLARE @CveConvenioDetalle int;
WHILE EXISTS
(
SELECT 1
FROM @Conceptos
WHERE Orden > @OrdenConcepto
)
BEGIN
SELECT TOP (1)
@OrdenConcepto = C.Orden,
@CveConvenioConcepto = C.CveConvenioConcepto,
@ImporteConcepto = C.Importe,
@Tipo = C.Tipo,
@NumeroPagos = C.NumeroPagos
FROM @Conceptos AS C
WHERE C.Orden > @OrdenConcepto
ORDER BY C.Orden;
INSERT INTO dbo.ConveniosDetalle
(
CveConvenio,
CveConvenioConcepto,
Importe,
Tipo,
NumeroPagos,
Observaciones
)
VALUES
(
@CveConvenio,
@CveConvenioConcepto,
@ImporteConcepto,
@Tipo,
@NumeroPagos,
NULL
);
SET @CveConvenioDetalle = CONVERT(int, SCOPE_IDENTITY());
INSERT INTO dbo.ConveniosRecibos
(
CveConvenioDetalle,
NumeroRecibo,
Importe,
FechaVencimiento,
Estatus
)
SELECT
@CveConvenioDetalle,
CONCAT(
'RD',
CONVERT(char(8), GETDATE(), 112),
@CveConvenio,
'-',
RIGHT('000' + CONVERT(varchar(3), @OrdenConcepto), 3),
'-',
RIGHT('000' + CONVERT(varchar(3), R.Orden), 3)
),
R.Importe,
R.FechaVencimiento,
R.Estatus
FROM @Recibos AS R
WHERE R.OrdenConcepto = @OrdenConcepto
ORDER BY R.Orden;
END;
SELECT @CveConvenio AS CveConvenio;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar =
'Ocurrió un error al guardar el convenio; favor de contactar a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Tra_ConvenioAdd'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
/*
Se vuelven a definir List/Get únicamente para alinear la salida
con Clientes.Nombre y devolver el encabezado completo del modal.
*/
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioList
@CveTipoTramite int = NULL,
@CveCliente int = NULL,
@CveFraccionamiento int = NULL,
@CveFraccionamientoEtapa int = NULL,
@Estatus varchar(30) = NULL,
@ConSaldoPendiente bit = NULL,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT
@ErrorMostrar = NULL,
@ErrorTipo = 0,
@Return = 0;
BEGIN TRY
;WITH PagadoRecibo AS
(
SELECT
PR.CveConvenioRecibo,
SUM(PR.ImporteAplicado) AS ImportePagado
FROM dbo.ConveniosPagosRecibos AS PR
GROUP BY PR.CveConvenioRecibo
),
Totales AS
(
SELECT
D.CveConvenio,
SUM(R.Importe) AS ImporteConvenio,
SUM(ISNULL(P.ImportePagado, 0)) AS ImportePagado,
SUM(R.Importe - ISNULL(P.ImportePagado, 0)) AS SaldoPendiente,
MAX(CASE WHEN P.CveConvenioRecibo IS NULL THEN 0 ELSE 1 END) AS TienePagos
FROM dbo.ConveniosDetalle AS D
LEFT JOIN dbo.ConveniosRecibos AS R ON R.CveConvenioDetalle = D.CveConvenioDetalle
LEFT JOIN PagadoRecibo AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
GROUP BY D.CveConvenio
)
SELECT
C.CveConvenio,
C.CveTipoTramite,
TT.TipoTramite,
C.CveCliente,
CL.Nombre AS Cliente,
F.CveFraccionamiento,
F.Fraccionamiento,
FE.CveFraccionamientoEtapa,
FE.Etapa,
C.NumeroConvenio,
C.NumeroOficio,
C.Estatus,
C.FechaConvenio,
ISNULL(T.ImporteConvenio, 0) AS ImporteConvenio,
ISNULL(T.ImportePagado, 0) AS ImportePagado,
ISNULL(T.SaldoPendiente, 0) AS SaldoPendiente,
CONVERT(bit, ISNULL(T.TienePagos, 0)) AS TienePagos
FROM dbo.Convenios AS C
LEFT JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = C.CveTipoTramite
INNER JOIN dbo.FraccionamientosEtapas AS FE ON FE.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = FE.CveFraccionamiento
INNER JOIN dbo.Clientes AS CL ON CL.CveCliente = C.CveCliente
LEFT JOIN Totales AS T ON T.CveConvenio = C.CveConvenio
WHERE (@CveCliente IS NULL OR C.CveCliente = @CveCliente)
AND (@CveTipoTramite IS NULL OR C.CveTipoTramite = @CveTipoTramite)
AND (@CveFraccionamiento IS NULL OR F.CveFraccionamiento = @CveFraccionamiento)
AND (@CveFraccionamientoEtapa IS NULL OR C.CveFraccionamientoEtapa = @CveFraccionamientoEtapa)
AND (NULLIF(@Estatus, '') IS NULL OR C.Estatus = @Estatus)
AND
(
@ConSaldoPendiente IS NULL
OR @ConSaldoPendiente = CASE
WHEN ISNULL(T.SaldoPendiente, 0) > 0 THEN 1
ELSE 0
END
)
ORDER BY
C.FechaConvenio DESC,
C.CveConvenio DESC;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar =
'Ocurrió un error al consultar los convenios; favor de contactar a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Tra_ConvenioList'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioGet
@CveConvenio int,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT
@ErrorMostrar = NULL,
@ErrorTipo = 0,
@Return = 0;
BEGIN TRY
IF NOT EXISTS
(
SELECT 1
FROM dbo.Convenios
WHERE CveConvenio = @CveConvenio
)
BEGIN
SET @ErrorMostrar = 'No se encontró el convenio solicitado.';
SET @ErrorTipo = 2;
RETURN;
END;
;WITH PagadoRecibo AS
(
SELECT
PR.CveConvenioRecibo,
SUM(PR.ImporteAplicado) AS ImportePagado
FROM dbo.ConveniosPagosRecibos AS PR
GROUP BY PR.CveConvenioRecibo
),
Totales AS
(
SELECT
D.CveConvenio,
SUM(R.Importe) AS ImporteConvenio,
SUM(ISNULL(P.ImportePagado, 0)) AS ImportePagado,
SUM(R.Importe - ISNULL(P.ImportePagado, 0)) AS SaldoPendiente
FROM dbo.ConveniosDetalle AS D
LEFT JOIN dbo.ConveniosRecibos AS R ON R.CveConvenioDetalle = D.CveConvenioDetalle
LEFT JOIN PagadoRecibo AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
GROUP BY D.CveConvenio
)
SELECT
C.CveConvenio,
C.CveTipoTramite,
TT.TipoTramite,
C.CveCliente,
C.CveFraccionamientoEtapa,
C.NumeroConvenio,
C.NumeroOficio,
CL.Nombre AS Cliente,
F.Fraccionamiento,
FE.Etapa,
C.Estatus,
C.FechaConvenio,
C.ViviendasAutorizadas,
C.ViviendasEnConvenio,
C.ViviendasPendientes,
C.ViviendasContratadas,
C.Observaciones,
ISNULL(T.ImporteConvenio, 0) AS ImporteConvenio,
ISNULL(T.ImportePagado, 0) AS ImportePagado,
ISNULL(T.SaldoPendiente, 0) AS SaldoPendiente
FROM dbo.Convenios AS C
LEFT JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = C.CveTipoTramite
INNER JOIN dbo.FraccionamientosEtapas AS FE ON FE.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = FE.CveFraccionamiento
INNER JOIN dbo.Clientes AS CL ON CL.CveCliente = C.CveCliente
LEFT JOIN Totales AS T ON T.CveConvenio = C.CveConvenio
WHERE C.CveConvenio = @CveConvenio;
SELECT
D.CveConvenioDetalle,
D.CveConvenioConcepto,
CC.Concepto,
D.Importe,
D.Tipo,
D.NumeroPagos
FROM dbo.ConveniosDetalle AS D
INNER JOIN dbo.ConveniosConceptos AS CC ON CC.CveConvenioConcepto = D.CveConvenioConcepto
WHERE D.CveConvenio = @CveConvenio
ORDER BY D.CveConvenioDetalle;
;WITH Pagado AS
(
SELECT
PR.CveConvenioRecibo,
SUM(PR.ImporteAplicado) AS ImportePagado
FROM dbo.ConveniosPagosRecibos AS PR
GROUP BY PR.CveConvenioRecibo
)
SELECT
R.CveConvenioRecibo,
R.CveConvenioDetalle,
R.NumeroRecibo,
R.Importe,
ISNULL(P.ImportePagado, 0) AS ImportePagado,
R.Importe - ISNULL(P.ImportePagado, 0) AS SaldoPendiente,
R.FechaVencimiento,
R.Estatus
FROM dbo.ConveniosRecibos AS R
INNER JOIN dbo.ConveniosDetalle AS D ON D.CveConvenioDetalle = R.CveConvenioDetalle
LEFT JOIN Pagado AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
WHERE D.CveConvenio = @CveConvenio
ORDER BY
R.CveConvenioDetalle,
R.FechaVencimiento,
R.CveConvenioRecibo;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar =
'Ocurrió un error al consultar el detalle del convenio; favor de contactar a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Tra_ConvenioGet'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO

View File

@@ -0,0 +1,146 @@
/*
Consolidación de documentos compartidos por etapa y tipo de documento.
Preparado para revisión; no ejecutado.
Requiere la migración Etapa_TipoTramite_20261002 ya instalada.
Ejecutar estructura y procedimientos en la misma transacción de instalación,
detenerse ante errores y confirmar sólo tras verificar los resultados.
No borra archivos ni filas históricas de documentos.
Las copias idénticas quedan como versiones históricas; se conserva una vigente.
Las configuraciones particulares idénticas se consolidan en una por etapa.
Si hubo ediciones diferentes por trámite, se detiene para no elegir una
aprobación, nota o marca de requerido arbitraria.
Convenios no se modifican.
*/
SET NOCOUNT ON;
IF @@TRANCOUNT = 0
THROW 51000, 'Abrir una transacción de instalación antes de ejecutar y revertirla ante cualquier error.', 1;
IF EXISTS
(
SELECT 1
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN dbo.Tra_DocumentosSolicitud AS O ON O.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
AND O.CveTipoDocumento = D.CveTipoDocumento
AND O.CveDocumentoSolicitud < D.CveDocumentoSolicitud
WHERE D.EsActivo = 1
AND O.EsActivo = 1
AND EXISTS
(
SELECT D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo,
D.ContentType, D.TamanoBytes, D.ComentarioCliente,
D.ComentarioAdministrativo, D.EsAprobado, D.CveUsuarioCarga,
D.CveUsuarioRevisa, D.FechaRevision, D.FechaAlta, D.UltimaNota,
D.FechaDocumento, D.FechaVencimiento, D.Vencido
EXCEPT
SELECT O.NombreArchivo, O.NombreArchivoFisico, O.RutaArchivo,
O.ContentType, O.TamanoBytes, O.ComentarioCliente,
O.ComentarioAdministrativo, O.EsAprobado, O.CveUsuarioCarga,
O.CveUsuarioRevisa, O.FechaRevision, O.FechaAlta, O.UltimaNota,
O.FechaDocumento, O.FechaVencimiento, O.Vencido
)
)
THROW 51000, 'Hay versiones vigentes con datos distintos por trámite. Revisarlas antes de consolidar; no se eliminaron documentos.', 1;
IF EXISTS
(
SELECT 1
FROM dbo.Tra_SolicitudDocumentoConfiguracion
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
HAVING MIN(CONVERT(int, EsRequerido)) <> MAX(CONVERT(int, EsRequerido))
OR MIN(CONVERT(int, EsCliente)) <> MAX(CONVERT(int, EsCliente))
OR MIN(CONVERT(int, TieneVigencia)) <> MAX(CONVERT(int, TieneVigencia))
OR MIN(CONVERT(int, EsActivo)) <> MAX(CONVERT(int, EsActivo))
OR MIN(Orden) <> MAX(Orden)
)
THROW 51000, 'Hay configuraciones manuales distintas por trámite. Resolverlas antes de consolidar la marca de la etapa.', 1;
IF EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento'
)
DROP INDEX UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento
ON dbo.Tra_DocumentosSolicitud;
IF EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento'
)
DROP INDEX UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento
ON dbo.Tra_SolicitudDocumentoConfiguracion;
-- Las columnas se conservan por compatibilidad de esquema; ya no son propietarias.
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveTipoTramite int NULL;
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ALTER COLUMN CveTipoTramite int NULL;
;WITH Versiones AS
(
SELECT
CveDocumentoSolicitud,
ROW_NUMBER() OVER
(
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
ORDER BY CveDocumentoSolicitud
) AS NumeroVersion
FROM dbo.Tra_DocumentosSolicitud
WHERE EsActivo = 1
)
UPDATE D
SET EsActivo = 0
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN Versiones AS V ON V.CveDocumentoSolicitud = D.CveDocumentoSolicitud
WHERE V.NumeroVersion > 1;
-- Sólo se retiran copias de configuración cuyos valores son idénticos.
;WITH Configuraciones AS
(
SELECT
CveConfiguracionDocumento,
ROW_NUMBER() OVER
(
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
ORDER BY CveConfiguracionDocumento
) AS NumeroConfiguracion
FROM dbo.Tra_SolicitudDocumentoConfiguracion
)
DELETE C
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
INNER JOIN Configuraciones AS O ON O.CveConfiguracionDocumento = C.CveConfiguracionDocumento
WHERE O.NumeroConfiguracion > 1;
UPDATE dbo.Tra_DocumentosSolicitud
SET CveTipoTramite = NULL
WHERE CveTipoTramite IS NOT NULL;
UPDATE dbo.Tra_SolicitudDocumentoConfiguracion
SET CveTipoTramite = NULL
WHERE CveTipoTramite IS NOT NULL;
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
)
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoDocumento)
WHERE EsActivo = 1;
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Documento'
)
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa_Documento
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveFraccionamientoEtapa, CveTipoDocumento);
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_DocumentosSolicitud_TipoTramite')
ALTER TABLE dbo.Tra_DocumentosSolicitud DROP CONSTRAINT FK_Tra_DocumentosSolicitud_TipoTramite;
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_ConfiguracionDocumento_TipoTramite')
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion DROP CONSTRAINT FK_Tra_ConfiguracionDocumento_TipoTramite;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,340 @@
/*
Preparación únicamente; no ejecutado.
Requiere Documentos_Etapa_Estructura_20260927.sql ya instalado.
Instalar estructura, procedimientos y aplicación en una ventana coordinada.
El ejecutor debe abrir una transacción, detenerse y revertir ante cualquier
error, y confirmar sólo después de instalar y verificar todos los scripts.
Los registros sin solicitud se conservan en todos los tipos activos aplicables.
Se duplica únicamente la metadata: archivos, fechas, revisiones y versiones
conservan su contenido. El identificador original queda en el menor tipo;
no significa que ese tipo tenga prioridad funcional.
GIS histórico 2 se normaliza al documento configurado 1016 / trámite 12.
Las asignaciones directas existentes no vuelven a expandirse al reinstalar.
*/
SET NOCOUNT ON;
IF @@TRANCOUNT = 0
THROW 51000, 'Abrir una transacción de instalación antes de ejecutar este script y revertirla ante cualquier error.', 1;
SELECT
D.CveDocumentoSolicitud,
D.CveFraccionamientoEtapa,
CASE WHEN D.CveTipoDocumento = 2 THEN 1016 ELSE D.CveTipoDocumento END AS CveTipoDocumento,
S.CveTipoTramite AS TipoSolicitud,
CONVERT(int, NULL) AS TipoDirecto
INTO #OrigenDocumentos
FROM dbo.Tra_DocumentosSolicitud AS D
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud;
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'CveTipoTramite') IS NOT NULL
EXEC sys.sp_executesql N'
UPDATE O
SET TipoDirecto = D.CveTipoTramite,
CveTipoDocumento = D.CveTipoDocumento
FROM #OrigenDocumentos AS O
INNER JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveDocumentoSolicitud = O.CveDocumentoSolicitud
WHERE D.CveTipoTramite IS NOT NULL;';
SELECT DISTINCT
O.CveDocumentoSolicitud,
O.CveFraccionamientoEtapa,
O.CveTipoDocumento,
COALESCE(O.TipoDirecto, O.TipoSolicitud, T.CveTipoTramite) AS CveTipoTramite
INTO #TiposDocumentos
FROM #OrigenDocumentos AS O
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS T ON T.CveTipoDocumento = O.CveTipoDocumento
AND T.EsActivo = 1
AND O.TipoDirecto IS NULL
AND O.TipoSolicitud IS NULL;
IF EXISTS (SELECT 1 FROM #TiposDocumentos WHERE CveTipoTramite IS NULL)
BEGIN
SELECT *
FROM #TiposDocumentos
WHERE CveTipoTramite IS NULL;
THROW 51000, 'Hay documentos sin tipo de trámite aplicable. Resolver su correspondencia y revertir la instalación.', 1;
END;
SELECT
D.CveConfiguracionDocumento,
D.CveFraccionamientoEtapa,
CASE WHEN D.CveTipoDocumento = 2 THEN 1016 ELSE D.CveTipoDocumento END AS CveTipoDocumento,
S.CveTipoTramite AS TipoSolicitud,
CONVERT(int, NULL) AS TipoDirecto
INTO #OrigenConfiguraciones
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud;
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveTipoTramite') IS NOT NULL
EXEC sys.sp_executesql N'
UPDATE O
SET TipoDirecto = D.CveTipoTramite,
CveTipoDocumento = D.CveTipoDocumento
FROM #OrigenConfiguraciones AS O
INNER JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS D ON D.CveConfiguracionDocumento = O.CveConfiguracionDocumento
WHERE D.CveTipoTramite IS NOT NULL;';
SELECT DISTINCT
O.CveConfiguracionDocumento,
O.CveFraccionamientoEtapa,
O.CveTipoDocumento,
COALESCE(O.TipoDirecto, O.TipoSolicitud, T.CveTipoTramite) AS CveTipoTramite
INTO #TiposConfiguraciones
FROM #OrigenConfiguraciones AS O
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS T ON T.CveTipoDocumento = O.CveTipoDocumento
AND T.EsActivo = 1
AND O.TipoDirecto IS NULL
AND O.TipoSolicitud IS NULL;
IF EXISTS (SELECT 1 FROM #TiposConfiguraciones WHERE CveTipoTramite IS NULL)
BEGIN
SELECT *
FROM #TiposConfiguraciones
WHERE CveTipoTramite IS NULL;
THROW 51000, 'Hay configuraciones sin tipo de trámite aplicable. Resolver su correspondencia y revertir la instalación.', 1;
END;
-- Nunca reemplazar una configuración específica con otra compartida.
IF EXISTS
(
SELECT 1
FROM #TiposConfiguraciones
GROUP BY CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
HAVING COUNT(*) > 1
)
BEGIN
SELECT CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
FROM #TiposConfiguraciones
GROUP BY CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
HAVING COUNT(*) > 1;
THROW 51000, 'Hay configuraciones que convergen al mismo destino. Resolverlas conservando sus valores antes de instalar.', 1;
END;
IF EXISTS
(
SELECT 1
FROM #TiposDocumentos AS T
INNER JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveDocumentoSolicitud = T.CveDocumentoSolicitud
WHERE D.EsActivo = 1
GROUP BY T.CveFraccionamientoEtapa, T.CveTipoTramite, T.CveTipoDocumento
HAVING COUNT(*) > 1
)
THROW 51000, 'Hay versiones vigentes que convergen al mismo destino. Resolver su vigencia antes de instalar.', 1;
IF EXISTS
(
SELECT 1
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
)
DROP INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento ON dbo.Tra_DocumentosSolicitud;
IF EXISTS
(
SELECT 1
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
AND name = 'UX_Tra_ConfiguracionDocumento_Solicitud'
)
DROP INDEX UX_Tra_ConfiguracionDocumento_Solicitud ON dbo.Tra_SolicitudDocumentoConfiguracion;
IF EXISTS
(
SELECT 1
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa'
)
DROP INDEX UX_Tra_ConfiguracionDocumento_Etapa ON dbo.Tra_SolicitudDocumentoConfiguracion;
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'CveTipoTramite') IS NULL
ALTER TABLE dbo.Tra_DocumentosSolicitud ADD CveTipoTramite int NULL;
-- El SQL dinámico compila después de agregar la columna.
EXEC sys.sp_executesql N'
;WITH DestinoOriginal AS
(
SELECT CveDocumentoSolicitud, MIN(CveTipoTramite) AS CveTipoTramite
FROM #TiposDocumentos
GROUP BY CveDocumentoSolicitud
)
UPDATE D
SET CveTipoTramite = T.CveTipoTramite,
CveTipoDocumento = T.CveTipoDocumento
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN DestinoOriginal AS O ON O.CveDocumentoSolicitud = D.CveDocumentoSolicitud
INNER JOIN #TiposDocumentos AS T ON T.CveDocumentoSolicitud = O.CveDocumentoSolicitud
AND T.CveTipoTramite = O.CveTipoTramite;
INSERT INTO dbo.Tra_DocumentosSolicitud
(
CveFraccionamientoEtapa,
CveTipoDocumento,
CveTipoTramite,
CveSolicitud,
NombreArchivo,
NombreArchivoFisico,
RutaArchivo,
ContentType,
TamanoBytes,
ComentarioCliente,
ComentarioAdministrativo,
EsAprobado,
CveUsuarioCarga,
CveUsuarioRevisa,
FechaRevision,
FechaAlta,
UltimaNota,
FechaDocumento,
FechaVencimiento,
EsActivo,
Vencido
)
SELECT
T.CveFraccionamientoEtapa,
T.CveTipoDocumento,
T.CveTipoTramite,
D.CveSolicitud,
D.NombreArchivo,
D.NombreArchivoFisico,
D.RutaArchivo,
D.ContentType,
D.TamanoBytes,
D.ComentarioCliente,
D.ComentarioAdministrativo,
D.EsAprobado,
D.CveUsuarioCarga,
D.CveUsuarioRevisa,
D.FechaRevision,
D.FechaAlta,
D.UltimaNota,
D.FechaDocumento,
D.FechaVencimiento,
D.EsActivo,
D.Vencido
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN #TiposDocumentos AS T ON T.CveDocumentoSolicitud = D.CveDocumentoSolicitud
WHERE T.CveTipoTramite <> D.CveTipoTramite;
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveTipoTramite int NOT NULL;';
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveTipoTramite') IS NULL
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ADD CveTipoTramite int NULL;
-- El SQL dinámico compila después de agregar la columna.
EXEC sys.sp_executesql N'
;WITH DestinoOriginal AS
(
SELECT CveConfiguracionDocumento, MIN(CveTipoTramite) AS CveTipoTramite
FROM #TiposConfiguraciones
GROUP BY CveConfiguracionDocumento
)
UPDATE D
SET CveTipoTramite = T.CveTipoTramite,
CveTipoDocumento = T.CveTipoDocumento
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
INNER JOIN DestinoOriginal AS O ON O.CveConfiguracionDocumento = D.CveConfiguracionDocumento
INNER JOIN #TiposConfiguraciones AS T ON T.CveConfiguracionDocumento = O.CveConfiguracionDocumento
AND T.CveTipoTramite = O.CveTipoTramite;
INSERT INTO dbo.Tra_SolicitudDocumentoConfiguracion
(
CveFraccionamientoEtapa,
CveTipoDocumento,
CveTipoTramite,
CveSolicitud,
EsRequerido,
EsCliente,
TieneVigencia,
Orden,
EsActivo
)
SELECT
T.CveFraccionamientoEtapa,
T.CveTipoDocumento,
T.CveTipoTramite,
D.CveSolicitud,
D.EsRequerido,
D.EsCliente,
D.TieneVigencia,
D.Orden,
D.EsActivo
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
INNER JOIN #TiposConfiguraciones AS T ON T.CveConfiguracionDocumento = D.CveConfiguracionDocumento
WHERE T.CveTipoTramite <> D.CveTipoTramite;
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ALTER COLUMN CveTipoTramite int NOT NULL;';
IF NOT EXISTS
(
SELECT 1
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento'
)
EXEC sys.sp_executesql N'
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento)
WHERE EsActivo = 1;';
IF NOT EXISTS
(
SELECT 1
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento'
)
EXEC sys.sp_executesql N'
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento
ON dbo.Tra_SolicitudDocumentoConfiguracion
(CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento);';
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_DocumentosSolicitud_TipoTramite')
EXEC sys.sp_executesql N'
ALTER TABLE dbo.Tra_DocumentosSolicitud WITH CHECK
ADD CONSTRAINT FK_Tra_DocumentosSolicitud_TipoTramite
FOREIGN KEY (CveTipoTramite) REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);';
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_ConfiguracionDocumento_TipoTramite')
EXEC sys.sp_executesql N'
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion WITH CHECK
ADD CONSTRAINT FK_Tra_ConfiguracionDocumento_TipoTramite
FOREIGN KEY (CveTipoTramite) REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);';
-- CveSolicitud se conserva sólo como referencia histórica, sin dependencia relacional.
DECLARE @QuitarRelaciones nvarchar(max) = N'';
SELECT @QuitarRelaciones = @QuitarRelaciones
+ N'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(F.parent_object_id))
+ N'.' + QUOTENAME(OBJECT_NAME(F.parent_object_id))
+ N' DROP CONSTRAINT ' + QUOTENAME(F.name) + N';'
FROM sys.foreign_keys AS F
WHERE F.parent_object_id IN
(OBJECT_ID('dbo.Tra_DocumentosSolicitud'), OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion'))
AND F.referenced_object_id = OBJECT_ID('dbo.Tra_Solicitudes');
IF @QuitarRelaciones <> N''
EXEC sys.sp_executesql @QuitarRelaciones;
INSERT INTO dbo.Bit_Campos
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
SELECT
T.CveTabla,
'CveTipoTramite',
'Tipo de trámite',
1,
'int',
1
FROM dbo.Bit_Tablas AS T
WHERE T.NombreTablaSQL IN ('Tra_DocumentosSolicitud', 'Tra_SolicitudDocumentoConfiguracion')
AND NOT EXISTS
(
SELECT 1
FROM dbo.Bit_Campos AS C
WHERE C.CveTabla = T.CveTabla
AND C.NombreCampoSQL = 'CveTipoTramite'
);
DROP TABLE #TiposDocumentos;
DROP TABLE #OrigenDocumentos;
DROP TABLE #TiposConfiguraciones;
DROP TABLE #OrigenConfiguraciones;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,110 @@
-- Preparado para revisión. La instalación requiere autorización independiente.
-- La configuración se conserva por etapa y nombre de capa del archivo original.
IF OBJECT_ID(N'dbo.FraccionamientosEtapasGISCapas', N'U') IS NULL
BEGIN
CREATE TABLE dbo.FraccionamientosEtapasGISCapas
(
CveFraccionamientoEtapa int NOT NULL,
NombreCapa nvarchar(250) COLLATE Modern_Spanish_CS_AS NOT NULL,
TipoCapa nvarchar(20) COLLATE Modern_Spanish_CS_AS NOT NULL,
Color nvarchar(7) COLLATE Modern_Spanish_CS_AS NOT NULL,
EsVisible bit NOT NULL,
CveUsuarioModifica int NOT NULL,
FechaModificacion datetime2 NOT NULL,
CONSTRAINT PK_FraccionamientosEtapasGISCapas
PRIMARY KEY (CveFraccionamientoEtapa, NombreCapa),
CONSTRAINT FK_FraccionamientosEtapasGISCapas_Etapa
FOREIGN KEY (CveFraccionamientoEtapa)
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa),
CONSTRAINT CK_FraccionamientosEtapasGISCapas_Tipo
CHECK (TipoCapa IN (N'Agua', N'Drenaje', N'Lotificacion', N'Pozos', N'Otros')),
CONSTRAINT CK_FraccionamientosEtapasGISCapas_Color
CHECK (LEN(Color) = 7 AND Color COLLATE Latin1_General_BIN2
LIKE N'#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]')
);
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaGISCapasList
@CveFraccionamientoEtapa int,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
SELECT NombreCapa, TipoCapa, Color, EsVisible
FROM dbo.FraccionamientosEtapasGISCapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible consultar la configuración de capas GIS.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(),
'; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaGISCapasSave
@CveFraccionamientoEtapa int,
@NombreCapa nvarchar(250),
@TipoCapa nvarchar(20),
@Color nvarchar(7),
@EsVisible bit,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
-- El servicio mantiene la transacción ambiental para proteger este upsert.
UPDATE dbo.FraccionamientosEtapasGISCapas WITH (UPDLOCK, HOLDLOCK)
SET TipoCapa = @TipoCapa,
Color = @Color,
EsVisible = @EsVisible,
CveUsuarioModifica = @CveUsuarioEjecuta,
FechaModificacion = SYSDATETIME()
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND NombreCapa = @NombreCapa;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO dbo.FraccionamientosEtapasGISCapas
(
CveFraccionamientoEtapa, NombreCapa, TipoCapa, Color,
EsVisible, CveUsuarioModifica, FechaModificacion
)
VALUES
(
@CveFraccionamientoEtapa, @NombreCapa, @TipoCapa, @Color,
@EsVisible, @CveUsuarioEjecuta, SYSDATETIME()
);
END;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible guardar la configuración de la capa GIS.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(),
'; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO

View File

@@ -0,0 +1,142 @@
"CveDocumentoSolicitud","CveFraccionamientoEtapa","CveTipoDocumento","EsActivo","NombreArchivo","NombreAnterior","RutaAnterior","NombreNuevo","RutaNueva","TamanoBytes","SHA256"
"3","1022","1040","True","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
"4","1022","1045","True","BORRADOR EDISA.docx","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","16889","3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77"
"5","1022","1046","True","ACTIVIDADES LETYYYY.docx","doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin","Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin","doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx","Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx","19908","8A139074FE52426D3FE0DCE395CCEDB031A03FB33462E2C989F695F14481C11D"
"6","1022","1051","True","Recibo-Ago (1).pdf","doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin","Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin","doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf","Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf","814619","86017314865C2064DDBA15CBC1318643BC2F2E0C254A3D274CEE3C17B81E9094"
"7","1022","1057","True","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"8","1022","1053","True","Etapa1_10_lotes.gis","doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin","Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin","doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis","Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis","8256","5271A9F0C57CF648101CFCDC4CB6635CB28FA2C637DECD4C60195751E8959EEF"
"9","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"10","1024","1053","False","02_Copia_escrituras.pdf","doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin","Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin","doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf","Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
"11","1024","1046","False","04_Dictamen_uso_suelo.pdf","doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin","Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin","doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
"12","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"13","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"14","1024","1079","False","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin","Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin","doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
"15","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"16","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"17","1024","1053","True","02_Copia_escrituras.pdf","doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin","Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin","doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf","Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
"18","1024","1046","True","04_Dictamen_uso_suelo.pdf","doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin","Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin","doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
"19","1024","1069","True","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"20","1024","1040","True","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"21","1024","1079","True","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin","Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin","doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
"22","1024","1034","True","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"23","1024","1037","True","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"24","1024","1082","False","11_Cedula_RFC.pdf","doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin","Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin","doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf","Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
"25","1024","1080","False","12_Autorizaciones_CIDUE.pdf","doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin","Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin","doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
"26","1024","1045","False","Croquis.png","doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
"27","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"28","1024","1082","True","11_Cedula_RFC.pdf","doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin","Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin","doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf","Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
"29","1024","1080","True","12_Autorizaciones_CIDUE.pdf","doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin","Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin","doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
"30","1024","1045","True","Croquis.png","doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
"31","1024","1057","True","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"32","1024","1051","True","01_Oficio_solicitud_obras_necesarias.pdf","doc-1024-1051-4037762f536045d59be5d818e2de6481.bin","Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481.bin","doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf","Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf","44555","DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8"
"33","1028","1053","True","02_Copia_escrituras.pdf","doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin","Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin","doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf","Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
"34","1028","1046","True","04_Dictamen_uso_suelo.pdf","doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin","Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin","doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
"35","1028","1069","True","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"36","1028","1040","True","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"37","1028","1079","True","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin","Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin","doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
"38","1028","1034","True","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"39","1028","1037","True","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"40","1028","1082","True","11_Cedula_RFC.pdf","doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin","Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin","doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf","Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
"41","1028","1080","True","12_Autorizaciones_CIDUE.pdf","doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin","Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin","doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
"42","1028","1045","True","Croquis.png","doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
"43","1028","1057","True","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"44","1028","1051","True","01_Oficio_solicitud_obras_necesarias.pdf","doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin","Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin","doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf","Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf","44555","DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8"
"45","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
"46","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
"47","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
"48","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
"49","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
"50","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
"51","1022","1045","False","BORRADOR EDISA.docx","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","16889","3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77"
"52","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"53","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"54","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"55","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"56","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"57","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"58","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
"59","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"60","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"61","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"62","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"63","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"64","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"65","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"66","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"67","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"68","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"69","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"70","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"71","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"72","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"73","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"74","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"75","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"76","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"77","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"78","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"79","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"80","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"81","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"82","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"83","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"84","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"85","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"86","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"87","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"88","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"89","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"90","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"91","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"92","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"93","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"94","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"95","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"96","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"97","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"98","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"99","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"100","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"101","1024","1045","False","Croquis.png","doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
"102","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"103","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"104","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"105","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"106","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"107","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"108","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"109","1024","1045","False","Croquis.png","doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
"110","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"111","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"112","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"113","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"114","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"115","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"116","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"117","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"118","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"119","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"120","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"121","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
"122","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"123","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"124","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"125","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"126","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"127","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
"128","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"129","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"130","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"131","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
"132","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"133","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"134","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"135","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
"136","1028","1045","False","Croquis.png","doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
"137","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"138","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"139","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"140","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"141","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"142","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
"143","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
1 CveDocumentoSolicitud CveFraccionamientoEtapa CveTipoDocumento EsActivo NombreArchivo NombreAnterior RutaAnterior NombreNuevo RutaNueva TamanoBytes SHA256
2 3 1022 1040 True VL103M user manual 20230921.pdf doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf 1146632 3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F
3 4 1022 1045 True BORRADOR EDISA.docx doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx 16889 3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77
4 5 1022 1046 True ACTIVIDADES LETYYYY.docx doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx 19908 8A139074FE52426D3FE0DCE395CCEDB031A03FB33462E2C989F695F14481C11D
5 6 1022 1051 True Recibo-Ago (1).pdf doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf 814619 86017314865C2064DDBA15CBC1318643BC2F2E0C254A3D274CEE3C17B81E9094
6 7 1022 1057 True 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
7 8 1022 1053 True Etapa1_10_lotes.gis doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis 8256 5271A9F0C57CF648101CFCDC4CB6635CB28FA2C637DECD4C60195751E8959EEF
8 9 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
9 10 1024 1053 False 02_Copia_escrituras.pdf doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf 44497 DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC
10 11 1024 1046 False 04_Dictamen_uso_suelo.pdf doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf 44359 AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28
11 12 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
12 13 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
13 14 1024 1079 False 08_Constancia_no_adeudo_Agua_Hermosillo.pdf doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf 44351 04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006
14 15 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
15 16 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
16 17 1024 1053 True 02_Copia_escrituras.pdf doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf 44497 DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC
17 18 1024 1046 True 04_Dictamen_uso_suelo.pdf doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf 44359 AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28
18 19 1024 1069 True 05_Carta_poder_representante_legal.pdf doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
19 20 1024 1040 True 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
20 21 1024 1079 True 08_Constancia_no_adeudo_Agua_Hermosillo.pdf doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf 44351 04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006
21 22 1024 1034 True 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
22 23 1024 1037 True 10_Comprobante_domicilio.pdf doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
23 24 1024 1082 False 11_Cedula_RFC.pdf doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf 44347 75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912
24 25 1024 1080 False 12_Autorizaciones_CIDUE.pdf doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf 44232 B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E
25 26 1024 1045 False Croquis.png doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png 984403 3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632
26 27 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
27 28 1024 1082 True 11_Cedula_RFC.pdf doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf 44347 75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912
28 29 1024 1080 True 12_Autorizaciones_CIDUE.pdf doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf 44232 B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E
29 30 1024 1045 True Croquis.png doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png 984403 3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632
30 31 1024 1057 True Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
31 32 1024 1051 True 01_Oficio_solicitud_obras_necesarias.pdf doc-1024-1051-4037762f536045d59be5d818e2de6481.bin Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481.bin doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf 44555 DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8
32 33 1028 1053 True 02_Copia_escrituras.pdf doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf 44497 DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC
33 34 1028 1046 True 04_Dictamen_uso_suelo.pdf doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf 44359 AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28
34 35 1028 1069 True 05_Carta_poder_representante_legal.pdf doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
35 36 1028 1040 True 06_Constancia_no_adeudo_tesoreria.pdf doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
36 37 1028 1079 True 08_Constancia_no_adeudo_Agua_Hermosillo.pdf doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf 44351 04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006
37 38 1028 1034 True 09_Acta_Constitutiva_empresa.pdf doc-1028-1034-583b7009cab246ed8287200ce7082495.bin Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
38 39 1028 1037 True 10_Comprobante_domicilio.pdf doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
39 40 1028 1082 True 11_Cedula_RFC.pdf doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf 44347 75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912
40 41 1028 1080 True 12_Autorizaciones_CIDUE.pdf doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf 44232 B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E
41 42 1028 1045 True Croquis.png doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png 984403 3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632
42 43 1028 1057 True Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
43 44 1028 1051 True 01_Oficio_solicitud_obras_necesarias.pdf doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf 44555 DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8
44 45 1022 1040 False VL103M user manual 20230921.pdf doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf 1146632 3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F
45 46 1022 1040 False VL103M user manual 20230921.pdf doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf 1146632 3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F
46 47 1022 1040 False VL103M user manual 20230921.pdf doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf 1146632 3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F
47 48 1022 1040 False VL103M user manual 20230921.pdf doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf 1146632 3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F
48 49 1022 1040 False VL103M user manual 20230921.pdf doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf 1146632 3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F
49 50 1022 1040 False VL103M user manual 20230921.pdf doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf 1146632 3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F
50 51 1022 1045 False BORRADOR EDISA.docx doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx 16889 3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77
51 52 1022 1057 False 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
52 53 1022 1057 False 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
53 54 1022 1057 False 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
54 55 1022 1057 False 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
55 56 1022 1057 False 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
56 57 1022 1057 False 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
57 58 1022 1057 False 65007.jpeg doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg 128129 0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081
58 59 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
59 60 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
60 61 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
61 62 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
62 63 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
63 64 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
64 65 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
65 66 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
66 67 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
67 68 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
68 69 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
69 70 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
70 71 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
71 72 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
72 73 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
73 74 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
74 75 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
75 76 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
76 77 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
77 78 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
78 79 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
79 80 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
80 81 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
81 82 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
82 83 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
83 84 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
84 85 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
85 86 1024 1069 False 05_Carta_poder_representante_legal.pdf doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
86 87 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
87 88 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
88 89 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
89 90 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
90 91 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
91 92 1024 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
92 93 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
93 94 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
94 95 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
95 96 1024 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
96 97 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
97 98 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
98 99 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
99 100 1024 1037 False 10_Comprobante_domicilio.pdf doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
100 101 1024 1045 False Croquis.png doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png 984403 3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632
101 102 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
102 103 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
103 104 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
104 105 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
105 106 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
106 107 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
107 108 1024 1057 False Identificación Oficial.jpg doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
108 109 1024 1045 False Croquis.png doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png 984403 3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632
109 110 1024 1057 False Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
110 111 1024 1057 False Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
111 112 1024 1057 False Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
112 113 1024 1057 False Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
113 114 1024 1057 False Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
114 115 1024 1057 False Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
115 116 1024 1057 False Identificación Oficial.jpg doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
116 117 1028 1069 False 05_Carta_poder_representante_legal.pdf doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
117 118 1028 1069 False 05_Carta_poder_representante_legal.pdf doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
118 119 1028 1069 False 05_Carta_poder_representante_legal.pdf doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
119 120 1028 1069 False 05_Carta_poder_representante_legal.pdf doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
120 121 1028 1069 False 05_Carta_poder_representante_legal.pdf doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf 44650 A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1
121 122 1028 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
122 123 1028 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
123 124 1028 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
124 125 1028 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
125 126 1028 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
126 127 1028 1040 False 06_Constancia_no_adeudo_tesoreria.pdf doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf 44515 4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F
127 128 1028 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1028-1034-583b7009cab246ed8287200ce7082495.bin Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
128 129 1028 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1028-1034-583b7009cab246ed8287200ce7082495.bin Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
129 130 1028 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1028-1034-583b7009cab246ed8287200ce7082495.bin Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
130 131 1028 1034 False 09_Acta_Constitutiva_empresa.pdf doc-1028-1034-583b7009cab246ed8287200ce7082495.bin Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf 44281 4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3
131 132 1028 1037 False 10_Comprobante_domicilio.pdf doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
132 133 1028 1037 False 10_Comprobante_domicilio.pdf doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
133 134 1028 1037 False 10_Comprobante_domicilio.pdf doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
134 135 1028 1037 False 10_Comprobante_domicilio.pdf doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf 44184 0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0
135 136 1028 1045 False Croquis.png doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png 984403 3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632
136 137 1028 1057 False Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
137 138 1028 1057 False Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
138 139 1028 1057 False Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
139 140 1028 1057 False Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
140 141 1028 1057 False Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
141 142 1028 1057 False Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076
142 143 1028 1057 False Identificación Oficial.jpg doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg 55724 A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076

View File

@@ -0,0 +1,243 @@
-- Migración de nombres físicos autorizada el 2026-10-03.
-- Requiere copias verificadas con el inventario CSV antes de ejecutarse.
-- Respaldo: Respaldo_NombresDocumentos_20261003.
SET NOCOUNT ON;
SET XACT_ABORT ON;
DECLARE @Mapeo TABLE
(
CveDocumentoSolicitud int PRIMARY KEY,
NombreAnterior varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
RutaAnterior varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
NombreNuevo varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
RutaNueva varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL
);
INSERT INTO @Mapeo
(CveDocumentoSolicitud, NombreAnterior, RutaAnterior, NombreNuevo, RutaNueva)
VALUES
(3, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
(4, N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx'),
(5, N'doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin', N'Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin', N'doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx', N'Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx'),
(6, N'doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin', N'Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin', N'doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf', N'Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf'),
(7, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(8, N'doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin', N'Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin', N'doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis', N'Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis'),
(9, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
(10, N'doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin', N'Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin', N'doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf'),
(11, N'doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin', N'Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin', N'doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf'),
(12, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
(13, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
(14, N'doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin', N'doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
(15, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
(16, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
(17, N'doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin', N'Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin', N'doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf'),
(18, N'doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin', N'Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin', N'doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf'),
(19, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
(20, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
(21, N'doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin', N'Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin', N'doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
(22, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
(23, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
(24, N'doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin', N'Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin', N'doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf'),
(25, N'doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin', N'Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin', N'doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf'),
(26, N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png'),
(27, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(28, N'doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin', N'Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin', N'doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf'),
(29, N'doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin', N'Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin', N'doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf'),
(30, N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png'),
(31, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(32, N'doc-1024-1051-4037762f536045d59be5d818e2de6481.bin', N'Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481.bin', N'doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf', N'Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf'),
(33, N'doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin', N'Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin', N'doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf'),
(34, N'doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin', N'Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin', N'doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf'),
(35, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
(36, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
(37, N'doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin', N'Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin', N'doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
(38, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
(39, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
(40, N'doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin', N'Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin', N'doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf'),
(41, N'doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin', N'Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin', N'doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf'),
(42, N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png'),
(43, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
(44, N'doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin', N'Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin', N'doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf', N'Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf'),
(45, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
(46, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
(47, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
(48, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
(49, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
(50, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
(51, N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx'),
(52, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(53, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(54, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(55, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(56, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(57, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(58, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
(59, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
(60, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
(61, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
(62, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
(63, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
(64, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
(65, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
(66, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
(67, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
(68, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
(69, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
(70, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
(71, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
(72, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
(73, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
(74, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
(75, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
(76, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
(77, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
(78, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
(79, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
(80, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
(81, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
(82, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
(83, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
(84, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
(85, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
(86, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
(87, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
(88, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
(89, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
(90, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
(91, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
(92, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
(93, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
(94, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
(95, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
(96, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
(97, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
(98, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
(99, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
(100, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
(101, N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png'),
(102, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(103, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(104, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(105, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(106, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(107, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(108, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
(109, N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png'),
(110, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(111, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(112, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(113, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(114, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(115, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(116, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
(117, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
(118, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
(119, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
(120, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
(121, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
(122, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
(123, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
(124, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
(125, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
(126, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
(127, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
(128, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
(129, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
(130, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
(131, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
(132, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
(133, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
(134, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
(135, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
(136, N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png'),
(137, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
(138, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
(139, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
(140, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
(141, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
(142, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
(143, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg');
BEGIN TRY
BEGIN TRANSACTION;
SELECT documento.*
INTO #Antes
FROM dbo.Tra_DocumentosSolicitud AS documento WITH (TABLOCKX, HOLDLOCK);
IF EXISTS
(
SELECT 1
FROM @Mapeo AS mapeo
LEFT JOIN #Antes AS documento ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
WHERE documento.CveDocumentoSolicitud IS NULL
OR documento.NombreArchivoFisico IS NULL
OR documento.RutaArchivo IS NULL
OR NOT
(
(documento.NombreArchivoFisico = mapeo.NombreAnterior AND documento.RutaArchivo = mapeo.RutaAnterior)
OR (documento.NombreArchivoFisico = mapeo.NombreNuevo AND documento.RutaArchivo = mapeo.RutaNueva)
)
)
THROW 51000, 'El inventario cambió. Revisar antes de migrar.', 1;
IF EXISTS
(
SELECT 1
FROM #Antes AS documento
INNER JOIN @Mapeo AS mapeo ON documento.RutaArchivo = mapeo.RutaAnterior
WHERE NOT EXISTS
(
SELECT 1
FROM @Mapeo AS conocido
WHERE conocido.CveDocumentoSolicitud = documento.CveDocumentoSolicitud
)
)
THROW 51001, 'Existen nuevas referencias a los archivos anteriores.', 1;
UPDATE documento
SET NombreArchivoFisico = mapeo.NombreNuevo,
RutaArchivo = mapeo.RutaNueva
FROM dbo.Tra_DocumentosSolicitud AS documento
INNER JOIN @Mapeo AS mapeo ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
WHERE documento.NombreArchivoFisico = mapeo.NombreAnterior
AND documento.RutaArchivo = mapeo.RutaAnterior;
DECLARE @Actualizados int = @@ROWCOUNT;
IF EXISTS
(
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
FROM #Antes
EXCEPT
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
FROM dbo.Tra_DocumentosSolicitud
)
OR EXISTS
(
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
FROM dbo.Tra_DocumentosSolicitud
EXCEPT
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
FROM #Antes
)
THROW 51002, 'Se detectó un cambio ajeno a las rutas.', 1;
IF EXISTS
(
SELECT 1
FROM @Mapeo AS mapeo
INNER JOIN dbo.Tra_DocumentosSolicitud AS documento ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
WHERE documento.NombreArchivoFisico <> mapeo.NombreNuevo
OR documento.RutaArchivo <> mapeo.RutaNueva
)
THROW 51003, 'No se actualizaron todas las referencias.', 1;
COMMIT TRANSACTION;
SELECT @Actualizados AS ReferenciasActualizadas;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;

View File

@@ -0,0 +1,412 @@
{
"type": "FeatureCollection",
"name": "Etapa1_10_lotes",
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
},
"features": [
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-1",
"Tipo": "Lote",
"Calle": "Calle Demo 1",
"Catastro": "CAT-001",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9555,
29.09
],
[
-110.95532,
29.09
],
[
-110.95532,
29.090139999999998
],
[
-110.9555,
29.090139999999998
],
[
-110.9555,
29.09
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-2",
"Tipo": "Lote",
"Calle": "Calle Demo 1",
"Catastro": "CAT-002",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9553,
29.09
],
[
-110.95512,
29.09
],
[
-110.95512,
29.090139999999998
],
[
-110.9553,
29.090139999999998
],
[
-110.9553,
29.09
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-3",
"Tipo": "Lote",
"Calle": "Calle Demo 1",
"Catastro": "CAT-003",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9551,
29.09
],
[
-110.95492,
29.09
],
[
-110.95492,
29.090139999999998
],
[
-110.9551,
29.090139999999998
],
[
-110.9551,
29.09
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-4",
"Tipo": "Lote",
"Calle": "Calle Demo 1",
"Catastro": "CAT-004",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9549,
29.09
],
[
-110.95472,
29.09
],
[
-110.95472,
29.090139999999998
],
[
-110.9549,
29.090139999999998
],
[
-110.9549,
29.09
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-5",
"Tipo": "Lote",
"Calle": "Calle Demo 1",
"Catastro": "CAT-005",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9547,
29.09
],
[
-110.95452,
29.09
],
[
-110.95452,
29.090139999999998
],
[
-110.9547,
29.090139999999998
],
[
-110.9547,
29.09
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-6",
"Tipo": "Lote",
"Calle": "Calle Demo 2",
"Catastro": "CAT-006",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9555,
29.09016
],
[
-110.95532,
29.09016
],
[
-110.95532,
29.0903
],
[
-110.9555,
29.0903
],
[
-110.9555,
29.09016
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-7",
"Tipo": "Lote",
"Calle": "Calle Demo 2",
"Catastro": "CAT-007",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9553,
29.09016
],
[
-110.95512,
29.09016
],
[
-110.95512,
29.0903
],
[
-110.9553,
29.0903
],
[
-110.9553,
29.09016
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-8",
"Tipo": "Lote",
"Calle": "Calle Demo 2",
"Catastro": "CAT-008",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9551,
29.09016
],
[
-110.95492,
29.09016
],
[
-110.95492,
29.0903
],
[
-110.9551,
29.0903
],
[
-110.9551,
29.09016
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-9",
"Tipo": "Lote",
"Calle": "Calle Demo 2",
"Catastro": "CAT-009",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9549,
29.09016
],
[
-110.95472,
29.09016
],
[
-110.95472,
29.0903
],
[
-110.9549,
29.0903
],
[
-110.9549,
29.09016
]
]
]
}
},
{
"type": "Feature",
"properties": {
"Etapa": "Etapa 1",
"Nombre": "Umbrella-10",
"Tipo": "Lote",
"Calle": "Calle Demo 2",
"Catastro": "CAT-010",
"MetrosCuadrados": 200.0,
"Duplicador": 1,
"Estatus": "Activa"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-110.9547,
29.09016
],
[
-110.95452,
29.09016
],
[
-110.95452,
29.0903
],
[
-110.9547,
29.0903
],
[
-110.9547,
29.09016
]
]
]
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 961 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 961 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 961 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Configuration;
using SIG.Web.AppCode.Contracts.Clientes;
using SIG.Web.AppCode.Contracts.Convenios;
@@ -18,6 +18,7 @@ using SIG.Web.AppCode.Contracts.Security;
using SIG.Web.AppCode.Contracts.Tramites;
using SIG.Web.AppCode.Contracts.Ventas;
using SIG.Web.AppCode.Notifications.Contracts;
using SIG.Web.AppCode.Notifications.Repositories;
using SIG.Web.AppCode.Notifications.Services;
using SIG.Web.AppCode.Repositories.Bitacora;
using SIG.Web.AppCode.Repositories.Database;
@@ -65,6 +66,7 @@ namespace SIG.Web.AppCode.Configuration
public static IClienteDocumentoService ClienteDocumentoService { get; private set; }
public static ITramiteDocumentoService TramiteDocumentoService { get; private set; }
public static IServicioFraccionamiento ServicioFraccionamiento { get; private set; }
public static IServicioLotesEtapa ServicioLotesEtapa { get; private set; }
public static IServicioGisFraccionamiento ServicioGisFraccionamiento { get; private set; }
public static ITramiteCatalogService TramiteCatalogService { get; private set; }
public static ITramiteSolicitudService TramiteSolicitudService { get; private set; }
@@ -80,6 +82,8 @@ namespace SIG.Web.AppCode.Configuration
public static IPermissionService PermissionService { get; private set; }
public static IMenuProvider MenuProvider { get; private set; }
public static INotificationCenter NotificationCenter { get; private set; }
public static INotificacionService NotificacionService { get; private set; }
public static INotificacionConfiguracionService NotificacionConfiguracionService { get; private set; }
public static IBuscadorCatalogoDataProvider SearchProvider { get; private set; }
public static void Configure()
@@ -139,6 +143,14 @@ namespace SIG.Web.AppCode.Configuration
ITramiteSolicitudRepository tramiteSolicitudRepository =
new TramiteSolicitudRepository(DbExecutor);
INotificacionRepository notificacionRepository =
new NotificacionRepository(DbExecutor);
NotificacionService = new NotificacionService(
notificacionRepository,
new SmtpEmailSender());
NotificacionConfiguracionService = new NotificacionConfiguracionService(
notificacionRepository,
NotificacionService);
ITramiteDocumentoRepository tramiteDocumentoRepository =
new TramiteDocumentoRepository(DbExecutor);
ITramiteDocumentoFileStore tramiteDocumentoFileStore =
@@ -148,7 +160,8 @@ namespace SIG.Web.AppCode.Configuration
tramiteDocumentoFileStore,
BitacoraService,
UserContext,
tramiteSolicitudRepository);
tramiteSolicitudRepository,
NotificacionConfiguracionService);
IRepositorioFraccionamiento repositorioFraccionamiento =
new RepositorioFraccionamiento(DbExecutor);
@@ -158,6 +171,12 @@ namespace SIG.Web.AppCode.Configuration
tramiteSolicitudRepository,
BitacoraService);
IRepositorioLotesEtapa repositorioLotesEtapa =
new RepositorioLotesEtapa(DbExecutor);
ServicioLotesEtapa = new ServicioLotesEtapa(
repositorioLotesEtapa,
BitacoraService);
IRepositorioGisFraccionamiento repositorioGis =
new RepositorioGisFraccionamiento(DbExecutor);
IAlmacenArchivosGisFraccionamiento almacenArchivosGis =
@@ -183,7 +202,8 @@ namespace SIG.Web.AppCode.Configuration
repositorioFraccionamiento,
BitacoraService,
TramiteDocumentoService,
UserContext);
UserContext,
NotificacionConfiguracionService);
var clienteProfact = new ClienteTimbradoPacProfact(
new ProveedorCredencialPacConfiguracion());
ServicioTimbradoCfdi = new ServicioTimbradoCfdi(

View File

@@ -1,4 +1,4 @@
using System.Web.Optimization;
using System.Web.Optimization;
using System.Web.UI;
namespace SIG.Web.AppCode.Configuration
@@ -59,6 +59,9 @@ namespace SIG.Web.AppCode.Configuration
"~/Scripts/SigPdfDrawer.js",
"~/Scripts/PanelLateral.js",
"~/Scripts/DocumentosEtapa.js",
"~/Scripts/DocumentosEtapaCargaMasiva.js",
"~/Scripts/SigVisualizadorArchivo.js",
"~/Scripts/DocumentosEtapaNavegacion.js",
"~/Scripts/Visitas.js",
"~/Scripts/PagosConvenios.js",
"~/Scripts/custom.js",
@@ -66,7 +69,9 @@ namespace SIG.Web.AppCode.Configuration
"~/Scripts/filtrosig.js",
"~/Scripts/scrollsig.js",
"~/Scripts/sig-grid-agrupado.js",
"~/Scripts/Convenios.js"
"~/Scripts/Convenios.js",
"~/Scripts/VisorGis.js",
"~/Scripts/LotesEtapa.js"
));
bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
"~/Scripts/WebForms/WebForms.js",
@@ -125,14 +130,19 @@ namespace SIG.Web.AppCode.Configuration
"~/Styles/SigPdfViewer.css",
"~/Styles/SigPdfDrawer.css",
"~/Styles/PanelLateral.css",
"~/Styles/SigVisualizadorArchivo.css",
"~/Styles/DetalleEtapa.css",
"~/Styles/DocumentosEtapa.css",
"~/Styles/DocumentosEtapaCargaMasiva.css",
"~/Styles/DocumentosEtapaNavegacion.css",
"~/Styles/Archivos.css",
"~/Styles/Estilos.css",
"~/Styles/filtrosig.css",
"~/Styles/scrollsig.css",
"~/Styles/sig-grid-agrupado.css",
"~/Styles/Convenios.css",
"~/Styles/VisorGis.css",
"~/Styles/LotesEtapa.css",
"~/Metronic/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css",
"~/Metronic/assets/global/plugins/bootstrap-toastr/toastr.min.css",
"~/Metronic/assets/layouts/layout3/css/jquery.datetimepicker.css",

View File

@@ -6,6 +6,12 @@ namespace SIG.Web.AppCode.Contracts.Clientes
{
public interface IRepositorioPortalCliente
{
DbResult<List<PagoPendienteTramiteCliente>> ListarPagosPendientesTramites(
int cveCliente,
int cveFraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<List<PagoConvenioClienteFila>> ListarPagos(
int cveCliente,
int? cveFraccionamiento,

View File

@@ -18,7 +18,7 @@ namespace SIG.Web.AppCode.Contracts.Clientes
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> GuardarFraccionamientoConEtapa(
DbResult<ResultadoGuardarFraccionamientoConEtapas> GuardarFraccionamientoConEtapa(
ModeloFraccionamiento fraccionamiento,
ModeloEtapaFraccionamiento etapa,
int cveUsuarioEjecuta,

View File

@@ -10,6 +10,8 @@ namespace SIG.Web.AppCode.Contracts.Convenios
DbResult<ConvenioDetalleCompleto> Obtener(int cveConvenio, int usuario, string dominio);
DbResult<List<ConvenioConceptoCatalogo>> ListarConceptos(int usuario, string dominio);
DbResult<int> Agregar(SolicitudAltaConvenio solicitud, int usuario, string dominio);
DbResult<ConvenioLotesConvenio> ObtenerLotesConvenio(int cveConvenio, int usuario, string dominio);
DbResult<bool> GuardarLotesConvenio(int cveConvenio, int lotesConvenio, int usuario, string dominio);
DbResult<bool> Eliminar(int cveConvenio, int usuario, string dominio);
}
}

View File

@@ -8,7 +8,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
TramiteDocumentoPreparedFile Prepare(
TramiteDocumentoUploadContextModel context,
Stream source,
string previousRelativePath);
string previousRelativePath,
string nombreArchivoOriginal);
void Promote(TramiteDocumentoPreparedFile preparedFile);
void Rollback(TramiteDocumentoPreparedFile preparedFile);

View File

@@ -1,10 +1,13 @@
using System;
using System;
using System.Collections.Generic;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Documentos;
namespace SIG.Web.AppCode.Contracts.Documentos
{
// Los documentos y sus marcas particulares pertenecen a etapa y tipo de documento.
// Los parámetros de trámite en carga se conservan por compatibilidad;
// sólo los listados de requisitos utilizan el trámite como filtro.
public interface ITramiteDocumentoRepository
{
DbResult<List<SolicitudDocumentoConfiguracionModel>> ListarConfiguracionSolicitud(
@@ -12,7 +15,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int cveSolicitud,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<bool> ActualizarVencimientoEtapa(
int cveFraccionamientoEtapa,
@@ -30,7 +34,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int cveTipoDocumento,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
int developmentId,
@@ -52,7 +57,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int documentTypeId,
int executingUser,
string domainName,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<TramiteDocumentoUploadContextModel> GetStageUploadContext(
int stageId,
@@ -76,7 +82,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
DateTime? fechaDocumento = null,
DateTime? fechaVencimiento = null,
bool actualizarFechas = false,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<TramiteDocumentoVencimientoResultModel> ActualizarFechaVencimiento(
int cveFraccionamiento,
@@ -85,6 +92,13 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
int cveFraccionamiento,
int cveDocumentoSolicitud,
string nota,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<TramiteDocumentoReviewResultModel> Review(
int developmentId,
int documentRequestId,

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.IO;
using SIG.Web.AppCode.Models.Common;
@@ -7,6 +7,9 @@ using SIG.Web.AppCode.Models.Documentos;
namespace SIG.Web.AppCode.Contracts.Documentos
{
// Los documentos y sus marcas particulares pertenecen a etapa y tipo de documento.
// Los parámetros de trámite en carga se conservan por compatibilidad;
// sólo los listados de requisitos utilizan el trámite como filtro.
public interface ITramiteDocumentoService
{
DbResult<List<SolicitudDocumentoConfiguracionModel>> ListarConfiguracionSolicitud(
@@ -14,7 +17,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int cveSolicitud,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<bool> ActualizarVencimientoEtapa(
int cveFraccionamientoEtapa,
@@ -32,7 +36,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int cveTipoDocumento,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
int developmentId,
@@ -54,7 +59,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int documentTypeId,
int executingUser,
string domainName,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<TramiteDocumentoSaveResultModel> Upload(
int developmentId,
@@ -69,7 +75,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
string domainName,
DateTime? fechaDocumento = null,
DateTime? fechaVencimiento = null,
int? cveFraccionamientoEtapa = null);
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null);
DbResult<bool> Eliminar(
int cveFraccionamiento,
@@ -85,6 +92,13 @@ namespace SIG.Web.AppCode.Contracts.Documentos
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
int cveFraccionamiento,
int cveDocumentoSolicitud,
string nota,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<TramiteDocumentoReviewResultModel> Review(
int developmentId,
int documentRequestId,

View File

@@ -8,6 +8,7 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
string ObtenerRutaFisica(ContextoGisFraccionamiento contexto);
bool Existe(ContextoGisFraccionamiento contexto);
void Guardar(ContextoGisFraccionamiento contexto, Stream origen);
Stream GuardarOriginalZip(ContextoGisFraccionamiento contexto, Stream origen, long longitud);
Stream AbrirLectura(ContextoGisFraccionamiento contexto);
void Eliminar(ContextoGisFraccionamiento contexto);
}

View File

@@ -0,0 +1,57 @@
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Fraccionamientos;
namespace SIG.Web.AppCode.Contracts.Fraccionamientos
{
public interface IRepositorioLotesEtapa
{
DbResult<ModeloLoteFraccionamiento> Obtener(
int cveFraccionamiento, int cveLote,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> CambiarAprobacion(
int cveFraccionamiento, int cveLote, bool aprobado,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> CambiarBloqueo(
int cveFraccionamiento, int cveLote, bool bloqueado,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> ActualizarInfraestructura(
int cveFraccionamiento, int cveLote,
decimal avanceAgua, decimal avanceDrenaje,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> CambiarAutorizacionAgua(
int cveFraccionamiento, int cveLote, bool autorizado,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> CambiarAutorizacionDrenaje(
int cveFraccionamiento, int cveLote, bool autorizado,
int cveUsuarioEjecuta, string nombreDominio);
}
public interface IServicioLotesEtapa
{
DbResult<bool> CambiarAprobacion(
int cveFraccionamiento, int cveLote, bool aprobado,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> CambiarBloqueo(
int cveFraccionamiento, int cveLote, bool bloqueado,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> ActualizarInfraestructura(
int cveFraccionamiento, int cveLote,
decimal avanceAgua, decimal avanceDrenaje,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> CambiarAutorizacionAgua(
int cveFraccionamiento, int cveLote, bool autorizado,
int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> CambiarAutorizacionDrenaje(
int cveFraccionamiento, int cveLote, bool autorizado,
int cveUsuarioEjecuta, string nombreDominio);
}
}

View File

@@ -6,6 +6,17 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
{
public interface IRepositorioGisFraccionamiento
{
DbResult<List<CapaGisFraccionamiento>> ListarCapas(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<bool> GuardarCapa(
int cveFraccionamientoEtapa,
CapaGisFraccionamiento capa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ContextoGisFraccionamiento> ObtenerContexto(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,

View File

@@ -14,89 +14,33 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
DbResult<int> VincularLoteTipoViviendaEtapa(int cveEtapa, int cveRegistro, int cveLote, int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> DesvincularLoteTipoViviendaEtapa(int cveEtapa, int cveVinculo, int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<ModeloFilaDesarrollos>> ListarDesarrollos(
int cveCliente, int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<ModeloFilaDesarrollos>> ListarDesarrollos( int cveCliente, int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<OpcionClienteFraccionamiento>> ListarClientes(int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<OpcionEstatusFraccionamiento>> ListarEstatus(int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<ModeloFraccionamiento>> Listar(string texto, int? cveCliente, bool incluirInactivo, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ModeloFraccionamiento> Obtener(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<ModeloAvisoDetalleFraccionamiento>> ObtenerAvisosDetalle(
int cveFraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> GuardarConEtapas(
ModeloFraccionamiento fraccionamiento,
IList<ModeloEtapaFraccionamiento> etapas,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<List<ModeloAvisoDetalleFraccionamiento>> ObtenerAvisosDetalle( int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ResultadoGuardarFraccionamientoConEtapas> GuardarConEtapas(
ModeloFraccionamiento fraccionamiento, IList<ModeloEtapaFraccionamiento> etapas, int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> Guardar(ModeloFraccionamiento fraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> Eliminar(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<ModeloEtapaFraccionamiento>> ListarEtapas(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ResultadoAvanceEtapaFraccionamiento> ActualizarAvanceEtapa(
int cveFraccionamientoEtapa,
decimal avance,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ModeloCondicionesEtapaFraccionamiento> ObtenerCondicionesEtapa(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ModeloCondicionesEtapaFraccionamiento> GuardarCondicionesEtapa(
ModeloCondicionesEtapaFraccionamiento condiciones,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ModeloGisEtapaFraccionamiento> GuardarGisEtapa(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ResultadoAvanceEtapaFraccionamiento> ActualizarAvanceEtapa( int cveFraccionamientoEtapa, decimal avance, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ModeloCondicionesEtapaFraccionamiento> ObtenerCondicionesEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ModeloCondicionesEtapaFraccionamiento> GuardarCondicionesEtapa( ModeloCondicionesEtapaFraccionamiento condiciones, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
DbResult<ModeloGisEtapaFraccionamiento> GuardarGisEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<ModeloTramiteEtapaFraccionamiento>> ListarTramitesEtapa(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> GuardarEtapa(ModeloEtapaFraccionamiento etapa, int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> MoverOrdenEtapa(
int cveFraccionamientoEtapa,
int cveFraccionamientoEtapaReferencia,
bool colocarDespues,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<bool> MoverOrdenEtapa( int cveFraccionamientoEtapa, int cveFraccionamientoEtapaReferencia, bool colocarDespues, int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> EliminarEtapa(int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
DbResult<List<ModeloLoteFraccionamiento>> ListarLotes(
int cveFraccionamiento,
int? cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ModeloLoteFraccionamiento> ObtenerLote(
int cveFraccionamiento,
int cveFraccionamientoLote,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> GuardarLote(
int cveFraccionamiento,
ModeloLoteFraccionamiento lote,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> GuardarLotes(
int cveFraccionamiento,
int cveFraccionamientoEtapa,
IList<ModeloLoteFraccionamiento> lotes,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<bool> EliminarLote(
int cveFraccionamiento,
int cveFraccionamientoLote,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> LimpiarLotesEtapa(
int cveFraccionamiento,
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<List<ModeloLoteFraccionamiento>> ListarLotes(int cveFraccionamiento,int? cveFraccionamientoEtapa,int cveUsuarioEjecuta,string nombreDominio);
DbResult<ModeloLoteFraccionamiento> ObtenerLote(int cveFraccionamiento,int cveFraccionamientoLote, int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> GuardarLote( int cveFraccionamiento, ModeloLoteFraccionamiento lote, int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> GuardarLotes( int cveFraccionamiento, int cveFraccionamientoEtapa, IList<ModeloLoteFraccionamiento> lotes, int cveUsuarioEjecuta, string nombreDominio);
DbResult<bool> EliminarLote( int cveFraccionamiento, int cveFraccionamientoLote, int cveUsuarioEjecuta, string nombreDominio);
DbResult<int> LimpiarLotesEtapa( int cveFraccionamiento, int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
}
}

View File

@@ -7,6 +7,31 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
{
public interface IServicioGisFraccionamiento
{
DbResult<ResultadoGuardadoGisFraccionamiento> DesvincularLote(
int cveFraccionamientoEtapa,
int cveFraccionamientoLote,
string clavePoligono,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ResultadoGuardadoGisFraccionamiento> VincularLote(
int cveFraccionamientoEtapa,
int cveFraccionamientoLote,
string clavePoligono,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<List<CapaGisFraccionamiento>> ListarCapas(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<bool> GuardarCapa(
int cveFraccionamientoEtapa,
CapaGisFraccionamiento capa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<VistaGisFraccionamiento> Obtener(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,

View File

@@ -5,5 +5,6 @@ namespace SIG.Web.AppCode.Contracts.Security
bool IsConfigured { get; }
void SendVerification(string recipient, string verificationUrl);
void EnviarContrasena(string destinatario, string nombreUsuario, string contrasena);
void Send(string recipient, string subject, string htmlBody);
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Globalization;
using System.IO;
using System.Web;
@@ -7,6 +7,7 @@ using SIG.Web.AppCode.Configuration;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Documentos;
using SIG.Web.AppCode.Session;
using SIG.Web.AppCode.SigControls;
namespace SIG.Web.Pages.Fraccionamientos
{
@@ -24,9 +25,9 @@ namespace SIG.Web.Pages.Fraccionamientos
if (currentUser == null)
{
context.Response.StatusCode = 401;
context.Response.ContentType = "text/plain";
context.Response.Write(
RespondError(
context,
401,
"Su sesión no está disponible. Inicie sesión nuevamente.");
return;
}
@@ -41,9 +42,10 @@ namespace SIG.Web.Pages.Fraccionamientos
context.Request.QueryString["documento"],
out documentRequestId))
{
context.Response.StatusCode = 400;
context.Response.ContentType = "text/plain";
context.Response.Write("El documento solicitado no es válido.");
RespondError(
context,
400,
"El documento solicitado no es válido.");
return;
}
@@ -58,9 +60,9 @@ namespace SIG.Web.Pages.Fraccionamientos
result.Data == null ||
result.Data.Content == null)
{
context.Response.StatusCode = 404;
context.Response.ContentType = "text/plain";
context.Response.Write(
RespondError(
context,
404,
result == null ||
string.IsNullOrWhiteSpace(result.UserMessage)
? "No se encontró el documento."
@@ -69,21 +71,104 @@ namespace SIG.Web.Pages.Fraccionamientos
}
TramiteDocumentoFileModel file = result.Data;
bool visualizar = string.Equals(
context.Request.QueryString["vista"],
"1",
StringComparison.Ordinal);
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.TrySkipIisCustomErrors = true;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
context.Response.ContentType =
string.IsNullOrWhiteSpace(file.ContentType)
string nombreArchivo = SanitizeFileName(file.NombreArchivo);
string tipoContenido = string.IsNullOrWhiteSpace(file.ContentType)
? MimeMapping.GetMimeMapping(nombreArchivo)
: file.ContentType;
if (visualizar &&
SigVisualizadorArchivoOfficeConverter.EsArchivoOffice(
nombreArchivo,
tipoContenido))
{
using (file.Content)
using (var contenidoOffice = new MemoryStream())
{
file.Content.CopyTo(contenidoOffice);
contenidoOffice.Position = 0;
if (SigVisualizadorArchivoVistaPreviaExcel.EsCompatible(nombreArchivo))
{
byte[] vistaPreviaExcel;
string errorExcel;
if (SigVisualizadorArchivoVistaPreviaExcel.IntentarGenerarHtml(
contenidoOffice,
nombreArchivo,
out vistaPreviaExcel,
out errorExcel))
{
PrepareResponse(
context,
"text/html; charset=utf-8",
false,
Path.GetFileNameWithoutExtension(nombreArchivo) + ".html");
context.Response.OutputStream.Write(
vistaPreviaExcel,
0,
vistaPreviaExcel.Length);
context.ApplicationInstance.CompleteRequest();
return;
}
contenidoOffice.Position = 0;
}
SigVisualizadorArchivoOfficeResultado conversion;
string errorConversion;
if (SigVisualizadorArchivoOfficeConverter.IntentarConvertir(
contenidoOffice,
nombreArchivo,
out conversion,
out errorConversion))
{
using (conversion)
using (var contenidoPdf = new FileStream(
conversion.RutaPdf,
FileMode.Open,
FileAccess.Read,
FileShare.Read))
{
PrepareResponse(
context,
"application/pdf",
false,
Path.GetFileNameWithoutExtension(nombreArchivo) + ".pdf");
contenidoPdf.CopyTo(context.Response.OutputStream);
}
context.ApplicationInstance.CompleteRequest();
return;
}
RespondError(
context,
415,
string.IsNullOrWhiteSpace(errorConversion)
? "No fue posible generar la vista previa del archivo de Office."
: errorConversion);
return;
}
}
if (visualizar && EsArchivoGis(nombreArchivo))
{
tipoContenido = "application/geo+json; charset=utf-8";
}
PrepareResponse(
context,
string.IsNullOrWhiteSpace(tipoContenido)
? "application/octet-stream"
: file.ContentType;
context.Response.AddHeader(
"Content-Disposition",
"attachment; filename=\"" +
SanitizeFileName(file.NombreArchivo) +
"\"");
: tipoContenido,
!visualizar,
nombreArchivo);
using (file.Content)
{
@@ -93,6 +178,40 @@ namespace SIG.Web.Pages.Fraccionamientos
context.ApplicationInstance.CompleteRequest();
}
private static void PrepareResponse(
HttpContext context,
string contentType,
bool download,
string fileName)
{
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.TrySkipIisCustomErrors = true;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
context.Response.ContentType = contentType;
context.Response.AddHeader(
"Content-Disposition",
(download ? "attachment" : "inline") +
"; filename=\"" + SanitizeFileName(fileName) + "\"");
}
private static void RespondError(
HttpContext context,
int statusCode,
string message)
{
context.Response.Clear();
context.Response.StatusCode = statusCode;
context.Response.TrySkipIisCustomErrors = true;
context.Response.ContentType = "text/plain; charset=utf-8";
context.Response.AddHeader(
"X-SIG-Visualizador-Mensaje",
HttpUtility.UrlEncode(message ?? string.Empty));
context.Response.Write(message);
context.ApplicationInstance.CompleteRequest();
}
private static UserSessionModel GetCurrentUser()
{
return AppServices.UserContext != null &&
@@ -113,6 +232,13 @@ namespace SIG.Web.Pages.Fraccionamientos
result > 0;
}
private static bool EsArchivoGis(string nombreArchivo)
{
string extension = Path.GetExtension(nombreArchivo ?? string.Empty);
return string.Equals(extension, ".gis", StringComparison.OrdinalIgnoreCase) ||
string.Equals(extension, ".geojson", StringComparison.OrdinalIgnoreCase);
}
private static string SanitizeFileName(string fileName)
{
string value = Path.GetFileName(

View File

@@ -0,0 +1,538 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.SessionState;
using SIG.Web.AppCode.Configuration;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Documentos;
using SIG.Web.AppCode.Session;
using SIG.Web.AppCode.Services.Logging;
namespace SIG.Web.Pages.Fraccionamientos
{
/// <summary>
/// Descarga en un ZIP todos los archivos visibles para el usuario en el
/// contexto actual del control DocumentosEtapa.
///
/// El escritor ZIP incluido aquí usa el método STORE (sin compresión) para
/// no agregar dependencias nuevas al proyecto. El resultado sigue siendo
/// un archivo .zip estándar.
/// </summary>
public sealed class TramiteDocumentosZipHandler
: IHttpHandler, IRequiresSessionState
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
UserSessionModel usuario = ObtenerUsuario();
if (usuario == null)
{
ResponderError(context, 401, "Su sesión no está disponible. Inicie sesión nuevamente.");
return;
}
int cveFraccionamiento;
if (!LeerEntero(context.Request.QueryString["fraccionamiento"], out cveFraccionamiento) ||
cveFraccionamiento <= 0)
{
ResponderError(context, 400, "El fraccionamiento solicitado no es válido.");
return;
}
int? cveEtapa;
int? cveTipoTramite;
if (!LeerEnteroOpcional(context.Request.QueryString["etapa"], out cveEtapa) ||
!LeerEnteroOpcional(context.Request.QueryString["tramite"], out cveTipoTramite))
{
ResponderError(context, 400, "Los filtros de descarga no son válidos.");
return;
}
DbResult<List<TramiteDocumentoSolicitudModel>> consulta =
AppServices.TramiteDocumentoService.ListForDevelopment(
cveFraccionamiento,
cveEtapa,
cveTipoTramite,
usuario.CveUsuario,
usuario.NombreDominio);
if (!consulta.Success)
{
ResponderError(context, 400, consulta.UserMessage ?? "No fue posible consultar los documentos.");
return;
}
List<TramiteDocumentoSolicitudModel> documentos =
(consulta.Data ?? new List<TramiteDocumentoSolicitudModel>())
.Where(documento => documento.TieneArchivo && documento.CveDocumentoSolicitud > 0)
.GroupBy(documento => documento.CveDocumentoSolicitud)
.Select(grupo => grupo.First())
.ToList();
if (documentos.Count == 0)
{
ResponderError(context, 404, "No hay archivos cargados para descargar.");
return;
}
string rutaTemporal = Path.Combine(
Path.GetTempPath(),
"SIG-Documentos-" + Guid.NewGuid().ToString("N") + ".zip");
try
{
List<string> errores;
int agregados = CrearZip(
rutaTemporal,
documentos,
cveFraccionamiento,
usuario,
out errores);
if (agregados == 0)
{
ResponderError(
context,
404,
errores.Count > 0
? string.Join(" ", errores)
: "No fue posible abrir los archivos solicitados.");
return;
}
string nombreZip = "Documentos-Fraccionamiento-" +
cveFraccionamiento.ToString(CultureInfo.InvariantCulture);
if (cveEtapa.HasValue)
{
nombreZip += "-Etapa-" + cveEtapa.Value.ToString(CultureInfo.InvariantCulture);
}
nombreZip += ".zip";
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.TrySkipIisCustomErrors = true;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
context.Response.ContentType = "application/zip";
context.Response.AddHeader(
"Content-Disposition",
"attachment; filename=\"" + nombreZip + "\"");
var informacion = new FileInfo(rutaTemporal);
context.Response.AddHeader(
"Content-Length",
informacion.Length.ToString(CultureInfo.InvariantCulture));
using (var archivoZip = new FileStream(
rutaTemporal,
FileMode.Open,
FileAccess.Read,
FileShare.Read))
{
archivoZip.CopyTo(context.Response.OutputStream);
}
context.ApplicationInstance.CompleteRequest();
}
catch (Exception ex)
{
const string mensaje =
"No fue posible generar la descarga de documentos; favor de contactar a Sistemas.";
ExceptionLogger.Log(
ex,
"TramiteDocumentosZipHandler.ProcessRequest",
mensaje);
ResponderError(context, 500, mensaje);
}
finally
{
try
{
if (File.Exists(rutaTemporal))
{
File.Delete(rutaTemporal);
}
}
catch
{
// La limpieza del temporal no debe invalidar la descarga.
}
}
}
private static int CrearZip(
string rutaZip,
IList<TramiteDocumentoSolicitudModel> documentos,
int cveFraccionamiento,
UserSessionModel usuario,
out List<string> errores)
{
errores = new List<string>();
int agregados = 0;
var nombres = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
using (var salida = new FileStream(
rutaZip,
FileMode.CreateNew,
FileAccess.ReadWrite,
FileShare.None))
using (var zip = new ZipStoreWriter(salida))
{
foreach (TramiteDocumentoSolicitudModel documento in documentos)
{
DbResult<TramiteDocumentoFileModel> resultado =
AppServices.TramiteDocumentoService.Open(
cveFraccionamiento,
documento.CveDocumentoSolicitud,
usuario.CveUsuario,
usuario.NombreDominio);
if (!resultado.Success || resultado.Data == null || resultado.Data.Content == null)
{
errores.Add(
(documento.TipoDocumento ?? "Documento") + ": " +
(resultado.UserMessage ?? "No fue posible abrir el archivo."));
continue;
}
TramiteDocumentoFileModel archivo = resultado.Data;
string nombreEntrada = NombreUnico(
LimpiarNombreArchivo(archivo.NombreArchivo, documento.CveDocumentoSolicitud),
nombres);
using (archivo.Content)
{
zip.AddEntry(nombreEntrada, archivo.Content, DateTime.Now);
}
agregados++;
}
if (agregados > 0 && errores.Count > 0)
{
byte[] contenidoError = Encoding.UTF8.GetBytes(
"Algunos archivos no pudieron agregarse a la descarga:\r\n\r\n" +
string.Join("\r\n", errores.Select(error => "- " + error)));
using (var memoria = new MemoryStream(contenidoError))
{
zip.AddEntry("_ERRORES.txt", memoria, DateTime.Now);
}
}
}
return agregados;
}
private static string LimpiarNombreArchivo(string nombre, int clave)
{
string limpio = Path.GetFileName(nombre ?? string.Empty);
if (string.IsNullOrWhiteSpace(limpio))
{
limpio = "Documento-" + clave.ToString(CultureInfo.InvariantCulture) + ".bin";
}
foreach (char caracter in Path.GetInvalidFileNameChars())
{
limpio = limpio.Replace(caracter, '_');
}
return limpio;
}
private static string NombreUnico(string nombre, HashSet<string> usados)
{
if (usados.Add(nombre))
{
return nombre;
}
string extension = Path.GetExtension(nombre);
string baseNombre = Path.GetFileNameWithoutExtension(nombre);
int consecutivo = 2;
while (true)
{
string candidato = baseNombre + " (" +
consecutivo.ToString(CultureInfo.InvariantCulture) + ")" + extension;
if (usados.Add(candidato))
{
return candidato;
}
consecutivo++;
}
}
private static UserSessionModel ObtenerUsuario()
{
return AppServices.UserContext != null && AppServices.UserContext.IsAuthenticated()
? AppServices.UserContext.GetCurrentUser()
: null;
}
private static bool LeerEntero(string valor, out int resultado)
{
return int.TryParse(
valor,
NumberStyles.Integer,
CultureInfo.InvariantCulture,
out resultado);
}
private static bool LeerEnteroOpcional(string valor, out int? resultado)
{
resultado = null;
if (string.IsNullOrWhiteSpace(valor))
{
return true;
}
int entero;
if (!LeerEntero(valor, out entero) || entero <= 0)
{
return false;
}
resultado = entero;
return true;
}
private static void ResponderError(HttpContext context, int statusCode, string mensaje)
{
context.Response.Clear();
context.Response.StatusCode = statusCode;
context.Response.TrySkipIisCustomErrors = true;
context.Response.ContentType = "text/plain; charset=utf-8";
context.Response.Write(mensaje ?? "No fue posible completar la descarga.");
context.ApplicationInstance.CompleteRequest();
}
/// <summary>
/// Escritor ZIP mínimo, método STORE (sin compresión), UTF-8 y data descriptor.
/// Evita agregar una dependencia adicional únicamente para esta descarga.
/// </summary>
private sealed class ZipStoreWriter : IDisposable
{
private const uint FirmaLocal = 0x04034b50;
private const uint FirmaDescriptor = 0x08074b50;
private const uint FirmaCentral = 0x02014b50;
private const uint FirmaFin = 0x06054b50;
private const ushort Version = 20;
private const ushort Flags = 0x0808; // UTF-8 + data descriptor.
private const ushort MetodoStore = 0;
private readonly Stream _salida;
private readonly BinaryWriter _writer;
private readonly List<EntradaZip> _entradas = new List<EntradaZip>();
private bool _cerrado;
public ZipStoreWriter(Stream salida)
{
_salida = salida ?? throw new ArgumentNullException("salida");
if (!salida.CanWrite || !salida.CanSeek)
{
throw new ArgumentException("El stream ZIP debe permitir escritura y posicionamiento.", "salida");
}
_writer = new BinaryWriter(salida, Encoding.UTF8, true);
}
public void AddEntry(string nombre, Stream contenido, DateTime fecha)
{
if (_cerrado)
{
throw new ObjectDisposedException("ZipStoreWriter");
}
if (contenido == null)
{
throw new ArgumentNullException("contenido");
}
byte[] nombreBytes = Encoding.UTF8.GetBytes(nombre ?? "archivo.bin");
if (nombreBytes.Length > ushort.MaxValue)
{
throw new InvalidOperationException("El nombre del archivo es demasiado largo para el ZIP.");
}
long offsetLocalLong = _salida.Position;
if (offsetLocalLong > uint.MaxValue)
{
throw new InvalidOperationException("La descarga excede el tamaño ZIP soportado.");
}
ushort horaDos;
ushort fechaDos;
ConvertirFechaDos(fecha, out horaDos, out fechaDos);
_writer.Write(FirmaLocal);
_writer.Write(Version);
_writer.Write(Flags);
_writer.Write(MetodoStore);
_writer.Write(horaDos);
_writer.Write(fechaDos);
_writer.Write((uint)0);
_writer.Write((uint)0);
_writer.Write((uint)0);
_writer.Write((ushort)nombreBytes.Length);
_writer.Write((ushort)0);
_writer.Write(nombreBytes);
var crc = new Crc32();
long longitud = 0;
byte[] buffer = new byte[81920];
int leidos;
while ((leidos = contenido.Read(buffer, 0, buffer.Length)) > 0)
{
_salida.Write(buffer, 0, leidos);
crc.Update(buffer, 0, leidos);
longitud += leidos;
if (longitud > uint.MaxValue)
{
throw new InvalidOperationException(
"Uno de los archivos excede el tamaño ZIP soportado.");
}
}
uint tamano = (uint)longitud;
uint valorCrc = crc.Value;
_writer.Write(FirmaDescriptor);
_writer.Write(valorCrc);
_writer.Write(tamano);
_writer.Write(tamano);
_entradas.Add(new EntradaZip
{
Nombre = nombreBytes,
Crc = valorCrc,
Tamano = tamano,
OffsetLocal = (uint)offsetLocalLong,
HoraDos = horaDos,
FechaDos = fechaDos
});
}
public void Dispose()
{
if (_cerrado)
{
return;
}
_cerrado = true;
EscribirDirectorioCentral();
_writer.Flush();
_writer.Dispose();
}
private void EscribirDirectorioCentral()
{
if (_entradas.Count > ushort.MaxValue)
{
throw new InvalidOperationException("La descarga contiene demasiados archivos.");
}
long inicioCentralLong = _salida.Position;
if (inicioCentralLong > uint.MaxValue)
{
throw new InvalidOperationException("La descarga excede el tamaño ZIP soportado.");
}
foreach (EntradaZip entrada in _entradas)
{
_writer.Write(FirmaCentral);
_writer.Write(Version);
_writer.Write(Version);
_writer.Write(Flags);
_writer.Write(MetodoStore);
_writer.Write(entrada.HoraDos);
_writer.Write(entrada.FechaDos);
_writer.Write(entrada.Crc);
_writer.Write(entrada.Tamano);
_writer.Write(entrada.Tamano);
_writer.Write((ushort)entrada.Nombre.Length);
_writer.Write((ushort)0);
_writer.Write((ushort)0);
_writer.Write((ushort)0);
_writer.Write((ushort)0);
_writer.Write((uint)0);
_writer.Write(entrada.OffsetLocal);
_writer.Write(entrada.Nombre);
}
long finCentralLong = _salida.Position;
long tamanoCentralLong = finCentralLong - inicioCentralLong;
if (tamanoCentralLong > uint.MaxValue)
{
throw new InvalidOperationException("El directorio ZIP excede el tamaño soportado.");
}
ushort cantidad = (ushort)_entradas.Count;
_writer.Write(FirmaFin);
_writer.Write((ushort)0);
_writer.Write((ushort)0);
_writer.Write(cantidad);
_writer.Write(cantidad);
_writer.Write((uint)tamanoCentralLong);
_writer.Write((uint)inicioCentralLong);
_writer.Write((ushort)0);
}
private static void ConvertirFechaDos(DateTime fecha, out ushort hora, out ushort dia)
{
DateTime valor = fecha.Year < 1980
? new DateTime(1980, 1, 1, 0, 0, 0)
: fecha;
hora = (ushort)((valor.Hour << 11) |
(valor.Minute << 5) |
(valor.Second / 2));
dia = (ushort)(((valor.Year - 1980) << 9) |
(valor.Month << 5) |
valor.Day);
}
private sealed class EntradaZip
{
public byte[] Nombre { get; set; }
public uint Crc { get; set; }
public uint Tamano { get; set; }
public uint OffsetLocal { get; set; }
public ushort HoraDos { get; set; }
public ushort FechaDos { get; set; }
}
private sealed class Crc32
{
private uint _crc = 0xFFFFFFFF;
public uint Value
{
get { return _crc ^ 0xFFFFFFFF; }
}
public void Update(byte[] buffer, int offset, int count)
{
for (int indice = offset; indice < offset + count; indice++)
{
_crc ^= buffer[indice];
for (int bit = 0; bit < 8; bit++)
{
_crc = (_crc & 1) != 0
? (_crc >> 1) ^ 0xEDB88320
: _crc >> 1;
}
}
}
}
}
}
}

View File

@@ -53,6 +53,24 @@ namespace SIG.Web.Pages.Fraccionamientos
"POST",
StringComparison.OrdinalIgnoreCase))
{
if (string.Equals(metodo, "DesvincularLote", StringComparison.OrdinalIgnoreCase))
{
DesvincularLote(contexto, actualUsuario);
return;
}
if (string.Equals(metodo, "VincularLote", StringComparison.OrdinalIgnoreCase))
{
VincularLote(contexto, actualUsuario);
return;
}
if (string.Equals(metodo, "GuardarCapa", StringComparison.OrdinalIgnoreCase))
{
GuardarCapa(contexto, actualUsuario);
return;
}
if (string.Equals(metodo, "Save", StringComparison.OrdinalIgnoreCase) ||
string.Equals(metodo, "GuardarArchivo", StringComparison.OrdinalIgnoreCase) ||
string.Equals(metodo, "GuardarVinculos", StringComparison.OrdinalIgnoreCase))
@@ -94,6 +112,21 @@ namespace SIG.Web.Pages.Fraccionamientos
return;
}
if (string.Equals(metodo, "Capas", StringComparison.OrdinalIgnoreCase))
{
DbResult<List<CapaGisFraccionamiento>> capas =
AppServices.ServicioGisFraccionamiento.ListarCapas(
cveFraccionamientoEtapa, actualUsuario.CveUsuario, actualUsuario.NombreDominio);
if (!capas.Success)
{
EscribirFalloResultado(contexto, capas, 400);
return;
}
EscribirJson(contexto, 200, new { success = true, data = capas.Data });
return;
}
if (string.Equals(metodo, "Context", StringComparison.OrdinalIgnoreCase))
{
ObtenerContexto(contexto, actualUsuario, cveFraccionamientoEtapa);
@@ -162,6 +195,86 @@ namespace SIG.Web.Pages.Fraccionamientos
});
}
private static void VincularLote(HttpContext contexto, UserSessionModel actualUsuario)
{
int etapa;
int lote;
if (!IntentarObtenerCveEtapa(contexto, out etapa) ||
!int.TryParse(contexto.Request.Form["CveFraccionamientoLote"], out lote))
{
EscribirJson(contexto, 400, new { success = false, message = "Seleccione una etapa y un lote válidos." });
return;
}
DbResult<ResultadoGuardadoGisFraccionamiento> resultado =
AppServices.ServicioGisFraccionamiento.VincularLote(
etapa, lote, contexto.Request.Form["ClavePoligono"],
actualUsuario.CveUsuario, actualUsuario.NombreDominio);
if (!resultado.Success)
{
EscribirFalloResultado(contexto, resultado, 400);
return;
}
EscribirJson(contexto, 200, new { success = true, message = "Lote vinculado correctamente." });
}
private static void DesvincularLote(HttpContext contexto, UserSessionModel actualUsuario)
{
int etapa;
int lote;
if (!IntentarObtenerCveEtapa(contexto, out etapa) ||
!int.TryParse(contexto.Request.Form["CveFraccionamientoLote"], out lote))
{
EscribirJson(contexto, 400, new { success = false, message = "Seleccione una etapa y un lote válidos." });
return;
}
var resultado = AppServices.ServicioGisFraccionamiento.DesvincularLote(
etapa, lote, contexto.Request.Form["ClavePoligono"],
actualUsuario.CveUsuario, actualUsuario.NombreDominio);
if (!resultado.Success)
{
EscribirFalloResultado(contexto, resultado, 400);
return;
}
EscribirJson(contexto, 200, new { success = true, message = "Lote desvinculado correctamente." });
}
private static void GuardarCapa(HttpContext contexto, UserSessionModel actualUsuario)
{
int etapa;
bool visible;
if (!IntentarObtenerCveEtapa(contexto, out etapa) ||
!bool.TryParse(contexto.Request.Form["EsVisible"], out visible))
{
EscribirJson(contexto, 400, new
{
success = false,
message = "Indique una etapa y configuración válidas."
});
return;
}
CapaGisFraccionamiento capa = new CapaGisFraccionamiento
{
NombreCapa = contexto.Request.Form["NombreCapa"],
TipoCapa = contexto.Request.Form["TipoCapa"],
Color = contexto.Request.Form["Color"],
EsVisible = visible
};
DbResult<bool> resultado = AppServices.ServicioGisFraccionamiento.GuardarCapa(
etapa, capa, actualUsuario.CveUsuario, actualUsuario.NombreDominio);
if (!resultado.Success)
{
EscribirFalloResultado(contexto, resultado, 400);
return;
}
EscribirJson(contexto, 200, new { success = true, message = "Capa guardada." });
}
private static void Guardar(
HttpContext contexto,
UserSessionModel actualUsuario,

View File

@@ -48,6 +48,13 @@ namespace SIG.Web.AppCode.Models.Clientes
public string Agrupacion { get; set; }
}
[Serializable]
public sealed class PagoPendienteTramiteCliente
{
public int CveSolicitud { get; set; }
public int CveConvenioRecibo { get; set; }
}
[Serializable]
public sealed class PagoConvenioClienteFila
{

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
namespace SIG.Web.AppCode.Models.Convenios
@@ -9,6 +9,7 @@ namespace SIG.Web.AppCode.Models.Convenios
public int? CveCliente { get; set; }
public int? CveFraccionamiento { get; set; }
public int? CveFraccionamientoEtapa { get; set; }
public int? CveTipoTramite { get; set; }
public string Estatus { get; set; }
public bool? ConSaldoPendiente { get; set; }
}
@@ -21,6 +22,8 @@ namespace SIG.Web.AppCode.Models.Convenios
public int CveFraccionamiento { get; set; }
public string Fraccionamiento { get; set; }
public int CveFraccionamientoEtapa { get; set; }
public int CveTipoTramite { get; set; }
public string TipoTramite { get; set; }
public string Etapa { get; set; }
public string NumeroConvenio { get; set; }
public string NumeroOficio { get; set; }
@@ -38,6 +41,8 @@ namespace SIG.Web.AppCode.Models.Convenios
public int CveConvenio { get; set; }
public int CveCliente { get; set; }
public int CveFraccionamientoEtapa { get; set; }
public int CveTipoTramite { get; set; }
public string TipoTramite { get; set; }
public string NumeroConvenio { get; set; }
public string NumeroOficio { get; set; }
public string Cliente { get; set; }
@@ -49,6 +54,7 @@ namespace SIG.Web.AppCode.Models.Convenios
public int ViviendasEnConvenio { get; set; }
public int? ViviendasPendientes { get; set; }
public int? ViviendasContratadas { get; set; }
public int LotesConvenio { get; set; }
public string Observaciones { get; set; }
public decimal ImporteConvenio { get; set; }
public decimal ImportePagado { get; set; }
@@ -96,17 +102,26 @@ namespace SIG.Web.AppCode.Models.Convenios
{
public int CveCliente { get; set; }
public int CveFraccionamientoEtapa { get; set; }
public int CveTipoTramite { get; set; }
public string TipoTramite { get; set; }
public string NumeroConvenio { get; set; }
public string NumeroOficio { get; set; }
public int? ViviendasAutorizadas { get; set; }
public int ViviendasEnConvenio { get; set; }
public int? ViviendasPendientes { get; set; }
public int? ViviendasContratadas { get; set; }
public int LotesConvenio { get; set; }
public DateTime FechaConvenio { get; set; }
public string Observaciones { get; set; }
public List<ConvenioConceptoCaptura> Conceptos { get; set; }
}
public sealed class ConvenioLotesConvenio
{
public int CveConvenio { get; set; }
public int LotesConvenio { get; set; }
}
[Serializable]
public sealed class ConvenioConceptoCaptura
{

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.IO;
namespace SIG.Web.AppCode.Models.Documentos
@@ -6,6 +6,7 @@ namespace SIG.Web.AppCode.Models.Documentos
[Serializable]
public sealed class SolicitudDocumentoConfiguracionModel
{
public int CveTipoTramite { get; set; }
public int CveSolicitud { get; set; }
public int CveTipoDocumento { get; set; }
public int CveCliente { get; set; }
@@ -94,6 +95,16 @@ namespace SIG.Web.AppCode.Models.Documentos
{
get { return EsRequerido && !TieneArchivo; }
}
public bool ImpideAvanzar
{
get
{
return EsRequerido &&
(!TieneArchivo || EsAprobado != true || FechaExpirada ||
(TieneVigencia && !FechaVencimiento.HasValue));
}
}
}
public sealed class TramiteDocumentoUploadContextModel
@@ -211,6 +222,24 @@ namespace SIG.Web.AppCode.Models.Documentos
public bool HuboCambio { get; set; }
}
public sealed class TramiteDocumentoNotaResultModel
{
public int CveDocumentoSolicitud { get; set; }
public int CveSolicitud { get; set; }
public string Folio { get; set; }
public int CveCliente { get; set; }
public int CveFraccionamiento { get; set; }
public int CveFraccionamientoEtapa { get; set; }
public string Etapa { get; set; }
public int CveTipoTramite { get; set; }
public string TipoTramite { get; set; }
public int CveTipoDocumento { get; set; }
public string TipoDocumento { get; set; }
public string NombreArchivo { get; set; }
public string ComentarioAdministrativoAnterior { get; set; }
public string ComentarioAdministrativo { get; set; }
}
public sealed class TramiteDocumentoDeleteResultModel
{
public int CveDocumentoSolicitud { get; set; }

View File

@@ -0,0 +1,33 @@
using System;
namespace SIG.Web.AppCode.Models.Fraccionamientos
{
[Serializable]
public sealed class ModeloLoteEtapa
{
public int CveFraccionamientoLote { get; set; }
public int CveFraccionamientoEtapa { get; set; }
public int CveFraccionamiento { get; set; }
public int CveCliente { get; set; }
public string Etapa { get; set; }
public string Nombre { get; set; }
public string Tipo { get; set; }
public string Calle { get; set; }
public string Catastro { get; set; }
public decimal? MetrosCuadrados { get; set; }
public string Duplicador { get; set; }
public bool EsActivo { get; set; }
public int? CveTipoVivienda { get; set; }
public string TipoVivienda { get; set; }
public decimal? Latitud { get; set; }
public decimal? Longitud { get; set; }
public decimal AvanceAguaPotable { get; set; }
public decimal AvanceDrenaje { get; set; }
public bool AguaPotableAutorizada { get; set; }
public bool DrenajeAutorizado { get; set; }
public bool Aprobado { get; set; }
public bool Bloqueado { get; set; }
public bool PuedeEditar { get; set; }
public string GISPoligonoClave { get; set; }
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace SIG.Web.AppCode.Models.Fraccionamientos
{
@@ -14,6 +14,7 @@ namespace SIG.Web.AppCode.Models.Fraccionamientos
public bool EsFraccionamiento { get; set; }
public string Etapa { get; set; }
public decimal? Hectareas { get; set; }
public decimal Avance { get; set; }
public bool Fideicomiso { get; set; }
public bool EsActivo { get; set; }
}
@@ -149,6 +150,30 @@ namespace SIG.Web.AppCode.Models.Fraccionamientos
public string Duplicador { get; set; }
public bool EsActivo { get; set; }
public int? CveTipoVivienda { get; set; }
public string TipoVivienda { get; set; }
public decimal? Latitud { get; set; }
public decimal? Longitud { get; set; }
public decimal AvanceAguaPotable { get; set; }
public decimal AvanceDrenaje { get; set; }
public bool AguaPotableAutorizada { get; set; }
public bool DrenajeAutorizado { get; set; }
public bool Aprobado { get; set; }
public bool Bloqueado { get; set; }
public bool PuedeEditar { get; set; }
public string GISPoligonoClave { get; set; }
}
public sealed class ModeloTramiteEtapaFraccionamiento

View File

@@ -4,6 +4,16 @@ using System.IO;
namespace SIG.Web.AppCode.Models.Fraccionamientos
{
public sealed class CapaGisFraccionamiento
{
public string NombreCapa { get; set; }
public string TipoCapa { get; set; }
public string Color { get; set; }
public bool EsVisible { get; set; }
public string Geometria { get; set; }
public int Elementos { get; set; }
}
public sealed class ContextoGisFraccionamiento
{
public int CveCliente { get; set; }

View File

@@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace SIG.Web.AppCode.Models.Fraccionamientos
{
public sealed class ResultadoGuardarFraccionamientoConEtapas
{
public int CveFraccionamiento { get; set; }
public List<ModeloEtapaFraccionamiento> Etapas { get; set; }
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using SIG.Web.AppCode.Models.Documentos;
@@ -49,6 +49,28 @@ namespace SIG.Web.AppCode.Models.Tramites
public DateTime? FechaAutorizacion { get; set; }
public bool PuedeCambiarEstatus { get; set; }
public bool EsAutorizada { get; set; }
public int DocumentosPendientes { get; set; }
public int PagosPendientes { get; set; }
public string TextoDocumentos
{
get
{
return DocumentosPendientes == 0
? "Completo"
: DocumentosPendientes + " pendiente(s)";
}
}
public string TextoPagos
{
get
{
return PagosPendientes == 0
? "Sin pendientes"
: PagosPendientes + " pendiente(s)";
}
}
}
[Serializable]

View File

@@ -0,0 +1,41 @@
using System.Collections.Generic;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Documentos;
using SIG.Web.AppCode.Models.Tramites;
using SIG.Web.AppCode.Notifications.Models;
namespace SIG.Web.AppCode.Notifications.Contracts
{
public interface INotificacionConfiguracionService
{
DbResult<List<TipoNotificacionModel>> ListarTipos(
bool incluirInactivos, int usuario, string dominio);
DbResult<TipoNotificacionModel> ObtenerTipo(
int cveTipoNotificacion, int usuario, string dominio);
DbResult<int> GuardarTipo(
TipoNotificacionModel model, int usuario, string dominio);
DbResult<bool> EliminarTipo(
int cveTipoNotificacion, int usuario, string dominio);
DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
string origen, int? cveOrigen, int usuario, string dominio);
DbResult<int> GuardarConfiguracion(
ConfiguracionNotificacionModel model, int usuario, string dominio);
DbResult<bool> EliminarConfiguracion(
string origen, int cveConfiguracion, int usuario, string dominio);
void NotificarDocumentoCargado(
TramiteDocumentoSaveResultModel documento,
int usuario,
string dominio);
void NotificarDocumentoRevisado(
TramiteDocumentoReviewResultModel documento,
int usuario,
string dominio);
void NotificarTramite(
string evento,
TramiteSolicitudStatusChangeModel tramite,
int usuario,
string dominio);
}
}

View File

@@ -0,0 +1,46 @@
using System.Collections.Generic;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Notifications.Models;
namespace SIG.Web.AppCode.Notifications.Contracts
{
public interface INotificacionRepository
{
DbResult<List<TipoNotificacionModel>> ListarTipos(
bool incluirInactivos, int usuario, string dominio);
DbResult<TipoNotificacionModel> ObtenerTipo(
int cveTipoNotificacion, int usuario, string dominio);
DbResult<int> GuardarTipo(
TipoNotificacionModel model, int usuario, string dominio);
DbResult<bool> EliminarTipo(
int cveTipoNotificacion, int usuario, string dominio);
DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
string origen, int? cveOrigen, int usuario, string dominio);
DbResult<int> GuardarConfiguracion(
ConfiguracionNotificacionModel model, int usuario, string dominio);
DbResult<bool> EliminarConfiguracion(
string origen, int cveConfiguracion, int usuario, string dominio);
DbResult<List<ConfiguracionNotificacionModel>> ResolverDocumento(
int cveTipoDocumento,
string evento,
int cveCliente,
int cveFraccionamientoEtapa,
int usuario,
string dominio);
DbResult<List<ConfiguracionNotificacionModel>> ResolverTramite(
int cveTipoTramite,
string evento,
int cveCliente,
int cveFraccionamientoEtapa,
int usuario,
string dominio);
DbResult<long> RegistrarHistorial(
HistorialNotificacionModel model,
int usuario,
string dominio);
}
}

View File

@@ -0,0 +1,13 @@
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Notifications.Models;
namespace SIG.Web.AppCode.Notifications.Contracts
{
public interface INotificacionService
{
DbResult<bool> Enviar(
SolicitudEnvioNotificacionModel solicitud,
int usuario,
string dominio);
}
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
namespace SIG.Web.AppCode.Notifications.Models
{
public sealed class TipoNotificacionModel
{
public int CveTipoNotificacion { get; set; }
public string Codigo { get; set; }
public string Nombre { get; set; }
public string TipoEnvio { get; set; }
public string Asunto { get; set; }
public string CuerpoHtml { get; set; }
public bool GeneraHistorial { get; set; }
public bool EsActivo { get; set; }
}
public sealed class ConfiguracionNotificacionModel
{
public int CveConfiguracionNotificacion { get; set; }
public string Origen { get; set; }
public int CveOrigen { get; set; }
public string OrigenNombre { get; set; }
public string Evento { get; set; }
public int CveTipoNotificacion { get; set; }
public string TipoNotificacion { get; set; }
public string CorreoDestino { get; set; }
public int? CveCliente { get; set; }
public string Cliente { get; set; }
public int? CveFraccionamientoEtapa { get; set; }
public string Fraccionamiento { get; set; }
public string Etapa { get; set; }
public bool EsActivo { get; set; }
}
public sealed class SolicitudEnvioNotificacionModel
{
public int CveTipoNotificacion { get; set; }
public string CorreoDestino { get; set; }
public string Origen { get; set; }
public string Evento { get; set; }
public long? CveReferencia { get; set; }
public int? CveCliente { get; set; }
public int? CveFraccionamientoEtapa { get; set; }
public IDictionary<string, string> Variables { get; set; }
}
public sealed class HistorialNotificacionModel
{
public int CveTipoNotificacion { get; set; }
public string TipoEnvio { get; set; }
public string Origen { get; set; }
public string Evento { get; set; }
public long? CveReferencia { get; set; }
public int? CveCliente { get; set; }
public int? CveFraccionamientoEtapa { get; set; }
public string Destinatario { get; set; }
public string Asunto { get; set; }
public string Mensaje { get; set; }
public bool Enviado { get; set; }
public DateTime FechaIntento { get; set; }
public DateTime? FechaEnvio { get; set; }
public string MensajeResultado { get; set; }
}
}

View File

@@ -0,0 +1,197 @@
using System.Collections.Generic;
using System.Data;
using SIG.Web.AppCode.Contracts.Database;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Notifications.Contracts;
using SIG.Web.AppCode.Notifications.Models;
using SIG.Web.AppCode.Repositories.Database;
namespace SIG.Web.AppCode.Notifications.Repositories
{
public sealed class NotificacionRepository
: RepositoryBase, INotificacionRepository
{
public NotificacionRepository(IDbExecutor db)
: base(db)
{
}
public DbResult<List<TipoNotificacionModel>> ListarTipos(
bool incluirInactivos, int usuario, string dominio)
{
return QueryList<TipoNotificacionModel>(
"dbo.PA_Not_TipoNotificacionList",
usuario,
dominio,
c => StoredProcedureCommand.AddInput(
c, "@IncluirInactivos", incluirInactivos, DbType.Boolean));
}
public DbResult<TipoNotificacionModel> ObtenerTipo(
int cveTipoNotificacion, int usuario, string dominio)
{
return QueryOne<TipoNotificacionModel>(
"dbo.PA_Not_TipoNotificacionGet",
usuario,
dominio,
c => StoredProcedureCommand.AddInput(
c, "@CveTipoNotificacion", cveTipoNotificacion, DbType.Int32));
}
public DbResult<int> GuardarTipo(
TipoNotificacionModel model, int usuario, string dominio)
{
return QueryScalarId(
"dbo.PA_Not_TipoNotificacionSave",
usuario,
dominio,
c =>
{
StoredProcedureCommand.AddInput(c, "@CveTipoNotificacion",
model.CveTipoNotificacion <= 0 ? (object)null : model.CveTipoNotificacion,
DbType.Int32);
StoredProcedureCommand.AddInput(c, "@Codigo", model.Codigo, DbType.String);
StoredProcedureCommand.AddInput(c, "@Nombre", model.Nombre, DbType.String);
StoredProcedureCommand.AddInput(c, "@TipoEnvio", model.TipoEnvio, DbType.String);
StoredProcedureCommand.AddInput(c, "@Asunto", model.Asunto, DbType.String);
StoredProcedureCommand.AddInput(c, "@CuerpoHtml", model.CuerpoHtml, DbType.String);
StoredProcedureCommand.AddInput(c, "@GeneraHistorial", model.GeneraHistorial, DbType.Boolean);
StoredProcedureCommand.AddInput(c, "@EsActivo", model.EsActivo, DbType.Boolean);
});
}
public DbResult<bool> EliminarTipo(
int cveTipoNotificacion, int usuario, string dominio)
{
return Execute(
"dbo.PA_Not_TipoNotificacionDelete",
usuario,
dominio,
c => StoredProcedureCommand.AddInput(
c, "@CveTipoNotificacion", cveTipoNotificacion, DbType.Int32));
}
public DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
string origen, int? cveOrigen, int usuario, string dominio)
{
return QueryList<ConfiguracionNotificacionModel>(
"dbo.PA_Not_ConfiguracionList",
usuario,
dominio,
c =>
{
StoredProcedureCommand.AddInput(c, "@Origen", origen, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveOrigen", cveOrigen, DbType.Int32);
});
}
public DbResult<int> GuardarConfiguracion(
ConfiguracionNotificacionModel model, int usuario, string dominio)
{
return QueryScalarId(
"dbo.PA_Not_ConfiguracionSave",
usuario,
dominio,
c =>
{
StoredProcedureCommand.AddInput(c, "@Origen", model.Origen, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveConfiguracionNotificacion",
model.CveConfiguracionNotificacion <= 0
? (object)null
: model.CveConfiguracionNotificacion,
DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveOrigen", model.CveOrigen, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@Evento", model.Evento, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveTipoNotificacion", model.CveTipoNotificacion, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CorreoDestino", model.CorreoDestino, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveCliente", model.CveCliente, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", model.CveFraccionamientoEtapa, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@EsActivo", model.EsActivo, DbType.Boolean);
});
}
public DbResult<bool> EliminarConfiguracion(
string origen, int cveConfiguracion, int usuario, string dominio)
{
return Execute(
"dbo.PA_Not_ConfiguracionDelete",
usuario,
dominio,
c =>
{
StoredProcedureCommand.AddInput(c, "@Origen", origen, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveConfiguracionNotificacion", cveConfiguracion, DbType.Int32);
});
}
public DbResult<List<ConfiguracionNotificacionModel>> ResolverDocumento(
int cveTipoDocumento,
string evento,
int cveCliente,
int cveFraccionamientoEtapa,
int usuario,
string dominio)
{
return QueryList<ConfiguracionNotificacionModel>(
"dbo.PA_Not_TipoDocumentoNotificacionResolve",
usuario,
dominio,
c =>
{
StoredProcedureCommand.AddInput(c, "@CveTipoDocumento", cveTipoDocumento, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@Evento", evento, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveCliente", cveCliente, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
});
}
public DbResult<List<ConfiguracionNotificacionModel>> ResolverTramite(
int cveTipoTramite,
string evento,
int cveCliente,
int cveFraccionamientoEtapa,
int usuario,
string dominio)
{
return QueryList<ConfiguracionNotificacionModel>(
"dbo.PA_Not_TipoTramiteNotificacionResolve",
usuario,
dominio,
c =>
{
StoredProcedureCommand.AddInput(c, "@CveTipoTramite", cveTipoTramite, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@Evento", evento, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveCliente", cveCliente, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
});
}
public DbResult<long> RegistrarHistorial(
HistorialNotificacionModel model,
int usuario,
string dominio)
{
return QueryScalarLong(
"dbo.PA_Not_NotificacionAdd",
usuario,
dominio,
c =>
{
StoredProcedureCommand.AddInput(c, "@CveTipoNotificacion", model.CveTipoNotificacion, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@TipoEnvio", model.TipoEnvio, DbType.String);
StoredProcedureCommand.AddInput(c, "@Origen", model.Origen, DbType.String);
StoredProcedureCommand.AddInput(c, "@Evento", model.Evento, DbType.String);
StoredProcedureCommand.AddInput(c, "@CveReferencia", model.CveReferencia, DbType.Int64);
StoredProcedureCommand.AddInput(c, "@CveCliente", model.CveCliente, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", model.CveFraccionamientoEtapa, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@Destinatario", model.Destinatario, DbType.String);
StoredProcedureCommand.AddInput(c, "@Asunto", model.Asunto, DbType.String);
StoredProcedureCommand.AddInput(c, "@Mensaje", model.Mensaje, DbType.String);
StoredProcedureCommand.AddInput(c, "@Enviado", model.Enviado, DbType.Boolean);
StoredProcedureCommand.AddInput(c, "@FechaIntento", model.FechaIntento, DbType.DateTime2);
StoredProcedureCommand.AddInput(c, "@FechaEnvio", model.FechaEnvio, DbType.DateTime2);
StoredProcedureCommand.AddInput(c, "@MensajeResultado", model.MensajeResultado, DbType.String);
});
}
}
}

View File

@@ -0,0 +1,391 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Documentos;
using SIG.Web.AppCode.Models.Tramites;
using SIG.Web.AppCode.Notifications.Contracts;
using SIG.Web.AppCode.Notifications.Models;
using SIG.Web.AppCode.Services.Logging;
namespace SIG.Web.AppCode.Notifications.Services
{
public sealed class NotificacionConfiguracionService
: INotificacionConfiguracionService
{
public const string OrigenDocumento = "DOCUMENTO";
public const string OrigenTramite = "TRAMITE";
private readonly INotificacionRepository _repository;
private readonly INotificacionService _notificacionService;
public NotificacionConfiguracionService(
INotificacionRepository repository,
INotificacionService notificacionService)
{
_repository = repository ?? throw new ArgumentNullException("repository");
_notificacionService = notificacionService ?? throw new ArgumentNullException("notificacionService");
}
public DbResult<List<TipoNotificacionModel>> ListarTipos(
bool incluirInactivos, int usuario, string dominio)
{
return _repository.ListarTipos(incluirInactivos, usuario, dominio);
}
public DbResult<TipoNotificacionModel> ObtenerTipo(
int cveTipoNotificacion, int usuario, string dominio)
{
return cveTipoNotificacion > 0
? _repository.ObtenerTipo(cveTipoNotificacion, usuario, dominio)
: DbResult<TipoNotificacionModel>.Fail(
"Seleccione un tipo de notificación válido.",
"CveTipoNotificacion inválida.",
null);
}
public DbResult<int> GuardarTipo(
TipoNotificacionModel model, int usuario, string dominio)
{
if (model == null ||
string.IsNullOrWhiteSpace(model.Codigo) ||
string.IsNullOrWhiteSpace(model.Nombre) ||
string.IsNullOrWhiteSpace(model.Asunto) ||
string.IsNullOrWhiteSpace(model.CuerpoHtml))
{
return DbResult<int>.Fail(
"Capture código, nombre, asunto y cuerpo de la notificación.",
"Datos incompletos para Not_TiposNotificacion.",
null);
}
model.Codigo = model.Codigo.Trim().ToUpperInvariant();
model.Nombre = model.Nombre.Trim();
model.TipoEnvio = string.IsNullOrWhiteSpace(model.TipoEnvio)
? "CORREO"
: model.TipoEnvio.Trim().ToUpperInvariant();
model.Asunto = model.Asunto.Trim();
model.CuerpoHtml = model.CuerpoHtml.Trim();
return _repository.GuardarTipo(model, usuario, dominio);
}
public DbResult<bool> EliminarTipo(
int cveTipoNotificacion, int usuario, string dominio)
{
return cveTipoNotificacion > 0
? _repository.EliminarTipo(cveTipoNotificacion, usuario, dominio)
: DbResult<bool>.Fail(
"Seleccione un tipo de notificación válido.",
"CveTipoNotificacion inválida.",
null);
}
public DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
string origen, int? cveOrigen, int usuario, string dominio)
{
origen = NormalizarOrigen(origen);
if (origen == null ||
(cveOrigen.HasValue && cveOrigen.Value <= 0))
{
return DbResult<List<ConfiguracionNotificacionModel>>.Fail(
"Seleccione un origen válido.",
"Origen o CveOrigen inválidos.",
null);
}
return _repository.ListarConfiguraciones(
origen, cveOrigen, usuario, dominio);
}
public DbResult<int> GuardarConfiguracion(
ConfiguracionNotificacionModel model, int usuario, string dominio)
{
if (model == null)
{
return DbResult<int>.Fail(
"Capture la configuración de notificación.",
"ConfiguracionNotificacionModel nulo.",
null);
}
model.Origen = NormalizarOrigen(model.Origen);
model.Evento = (model.Evento ?? string.Empty).Trim().ToUpperInvariant();
model.CorreoDestino = (model.CorreoDestino ?? string.Empty).Trim();
if (model.Origen == null ||
model.CveOrigen <= 0 ||
model.CveTipoNotificacion <= 0 ||
model.Evento.Length == 0 ||
!CorreoValido(model.CorreoDestino))
{
return DbResult<int>.Fail(
"Seleccione el evento y tipo de notificación, y capture un correo válido.",
"Configuración de notificación incompleta.",
null);
}
return _repository.GuardarConfiguracion(model, usuario, dominio);
}
public DbResult<bool> EliminarConfiguracion(
string origen, int cveConfiguracion, int usuario, string dominio)
{
origen = NormalizarOrigen(origen);
if (origen == null || cveConfiguracion <= 0)
{
return DbResult<bool>.Fail(
"Seleccione una configuración válida.",
"Origen o CveConfiguracion inválidos.",
null);
}
return _repository.EliminarConfiguracion(
origen, cveConfiguracion, usuario, dominio);
}
public void NotificarDocumentoCargado(
TramiteDocumentoSaveResultModel documento,
int usuario,
string dominio)
{
if (documento == null)
{
return;
}
NotificarDocumento(
"CARGADO",
documento.CveTipoDocumento,
documento.CveCliente,
documento.CveFraccionamiento,
documento.CveFraccionamientoEtapa,
documento.CveDocumentoSolicitud,
documento.Folio,
documento.TipoTramite,
documento.TipoDocumento,
documento.NombreArchivo,
documento.Etapa,
usuario,
dominio);
}
public void NotificarDocumentoRevisado(
TramiteDocumentoReviewResultModel documento,
int usuario,
string dominio)
{
if (documento == null || !documento.HuboCambio)
{
return;
}
string evento = documento.EsAprobado == true
? "APROBADO"
: "RECHAZADO";
NotificarDocumento(
evento,
documento.CveTipoDocumento,
documento.CveCliente,
documento.CveFraccionamiento,
documento.CveFraccionamientoEtapa,
documento.CveDocumentoSolicitud,
documento.Folio,
documento.TipoTramite,
documento.TipoDocumento,
documento.NombreArchivo,
documento.Etapa,
usuario,
dominio);
}
public void NotificarTramite(
string evento,
TramiteSolicitudStatusChangeModel tramite,
int usuario,
string dominio)
{
if (tramite == null || !tramite.HuboCambio)
{
return;
}
evento = (evento ?? string.Empty).Trim().ToUpperInvariant();
if (evento.Length == 0)
{
return;
}
DbResult<List<ConfiguracionNotificacionModel>> configuraciones =
_repository.ResolverTramite(
tramite.CveTipoTramite,
evento,
tramite.CveCliente,
tramite.CveFraccionamientoEtapa,
usuario,
dominio);
if (!configuraciones.Success)
{
RegistrarErrorConfiguracion(
configuraciones,
"NotificacionConfiguracionService.NotificarTramite");
return;
}
var variables = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "Evento", evento },
{ "Folio", tramite.Folio },
{ "TipoTramite", tramite.TipoTramite },
{ "Etapa", tramite.Etapa },
{ "Estatus", tramite.EstatusSolicitud },
{ "EstatusAnterior", tramite.EstatusSolicitudAnterior },
{ "CveCliente", tramite.CveCliente.ToString() },
{ "CveFraccionamiento", tramite.CveFraccionamiento.ToString() },
{ "CveFraccionamientoEtapa", tramite.CveFraccionamientoEtapa.ToString() }
};
EnviarConfiguraciones(
configuraciones.Data,
OrigenTramite,
evento,
tramite.CveSolicitud,
tramite.CveCliente,
tramite.CveFraccionamientoEtapa,
variables,
usuario,
dominio);
}
private void NotificarDocumento(
string evento,
int cveTipoDocumento,
int cveCliente,
int cveFraccionamiento,
int cveFraccionamientoEtapa,
int cveDocumentoSolicitud,
string folio,
string tipoTramite,
string tipoDocumento,
string nombreArchivo,
string etapa,
int usuario,
string dominio)
{
DbResult<List<ConfiguracionNotificacionModel>> configuraciones =
_repository.ResolverDocumento(
cveTipoDocumento,
evento,
cveCliente,
cveFraccionamientoEtapa,
usuario,
dominio);
if (!configuraciones.Success)
{
RegistrarErrorConfiguracion(
configuraciones,
"NotificacionConfiguracionService.NotificarDocumento");
return;
}
var variables = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "Evento", evento },
{ "Folio", folio },
{ "TipoTramite", tipoTramite },
{ "TipoDocumento", tipoDocumento },
{ "NombreArchivo", nombreArchivo },
{ "Etapa", etapa },
{ "CveCliente", cveCliente.ToString() },
{ "CveFraccionamiento", cveFraccionamiento.ToString() },
{ "CveFraccionamientoEtapa", cveFraccionamientoEtapa.ToString() }
};
EnviarConfiguraciones(
configuraciones.Data,
OrigenDocumento,
evento,
cveDocumentoSolicitud,
cveCliente,
cveFraccionamientoEtapa,
variables,
usuario,
dominio);
}
private void EnviarConfiguraciones(
IEnumerable<ConfiguracionNotificacionModel> configuraciones,
string origen,
string evento,
long cveReferencia,
int cveCliente,
int cveFraccionamientoEtapa,
IDictionary<string, string> variables,
int usuario,
string dominio)
{
foreach (ConfiguracionNotificacionModel configuracion in
configuraciones ?? Enumerable.Empty<ConfiguracionNotificacionModel>())
{
_notificacionService.Enviar(
new SolicitudEnvioNotificacionModel
{
CveTipoNotificacion = configuracion.CveTipoNotificacion,
CorreoDestino = configuracion.CorreoDestino,
Origen = origen,
Evento = evento,
CveReferencia = cveReferencia,
CveCliente = cveCliente,
CveFraccionamientoEtapa = cveFraccionamientoEtapa,
Variables = variables
},
usuario,
dominio);
}
}
private static string NormalizarOrigen(string origen)
{
string valor = (origen ?? string.Empty).Trim().ToUpperInvariant();
return valor == OrigenDocumento || valor == OrigenTramite
? valor
: null;
}
private static bool CorreoValido(string correo)
{
try
{
if (string.IsNullOrWhiteSpace(correo))
{
return false;
}
var mail = new MailAddress(correo.Trim());
return string.Equals(
mail.Address,
correo.Trim(),
StringComparison.OrdinalIgnoreCase);
}
catch
{
return false;
}
}
private static void RegistrarErrorConfiguracion<T>(
DbResult<T> resultado,
string origen)
{
ExceptionLogger.Log(
resultado.Exception ?? new InvalidOperationException(
resultado.TechnicalMessage ?? resultado.UserMessage),
origen,
"No fue posible resolver las notificaciones configuradas.");
}
}
}

View File

@@ -0,0 +1,239 @@
using System;
using System.Collections.Generic;
using SIG.Web.AppCode.Contracts.Security;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Notifications.Contracts;
using SIG.Web.AppCode.Notifications.Models;
using SIG.Web.AppCode.Services.Logging;
namespace SIG.Web.AppCode.Notifications.Services
{
public sealed class NotificacionService : INotificacionService
{
private readonly INotificacionRepository _repository;
private readonly IEmailSender _emailSender;
public NotificacionService(
INotificacionRepository repository,
IEmailSender emailSender)
{
_repository = repository ?? throw new ArgumentNullException("repository");
_emailSender = emailSender ?? throw new ArgumentNullException("emailSender");
}
public DbResult<bool> Enviar(
SolicitudEnvioNotificacionModel solicitud,
int usuario,
string dominio)
{
if (solicitud == null || solicitud.CveTipoNotificacion <= 0)
{
return DbResult<bool>.Fail(
"Seleccione un tipo de notificación válido.",
"Solicitud de notificación sin tipo.",
null);
}
if (string.IsNullOrWhiteSpace(solicitud.CorreoDestino))
{
return DbResult<bool>.Fail(
"La notificación no tiene destinatario.",
"Solicitud de notificación sin CorreoDestino.",
null);
}
DbResult<TipoNotificacionModel> tipo =
_repository.ObtenerTipo(
solicitud.CveTipoNotificacion,
usuario,
dominio);
if (!tipo.Success || tipo.Data == null || !tipo.Data.EsActivo)
{
string detalle = tipo.Success
? "El tipo de notificación está inactivo o no existe."
: tipo.TechnicalMessage;
ExceptionLogger.Log(
new InvalidOperationException(detalle),
"NotificacionService.Enviar.Tipo",
"No fue posible preparar la notificación.");
return DbResult<bool>.Fail(
"No fue posible preparar la notificación.",
detalle,
tipo.Exception);
}
using (var envio = new NotificacionEnvioScope(
_repository,
_emailSender,
tipo.Data,
solicitud,
usuario,
dominio))
{
return envio.Enviar();
}
}
private sealed class NotificacionEnvioScope : IDisposable
{
private readonly INotificacionRepository _repository;
private readonly IEmailSender _emailSender;
private readonly TipoNotificacionModel _tipo;
private readonly SolicitudEnvioNotificacionModel _solicitud;
private readonly int _usuario;
private readonly string _dominio;
private readonly DateTime _fechaIntento;
private bool _enviado;
private DateTime? _fechaEnvio;
private string _resultado;
private string _asunto;
private string _mensaje;
private bool _disposed;
public NotificacionEnvioScope(
INotificacionRepository repository,
IEmailSender emailSender,
TipoNotificacionModel tipo,
SolicitudEnvioNotificacionModel solicitud,
int usuario,
string dominio)
{
_repository = repository;
_emailSender = emailSender;
_tipo = tipo;
_solicitud = solicitud;
_usuario = usuario;
_dominio = dominio;
_fechaIntento = DateTime.Now;
_enviado = false;
_resultado = "No fue posible enviar la notificación.";
_asunto = AplicarVariables(tipo.Asunto, solicitud.Variables);
_mensaje = AplicarVariables(tipo.CuerpoHtml, solicitud.Variables);
}
public DbResult<bool> Enviar()
{
try
{
if (!string.Equals(
_tipo.TipoEnvio,
"CORREO",
StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException(
"Tipo de envío no soportado: " + _tipo.TipoEnvio + ".");
}
_emailSender.Send(
_solicitud.CorreoDestino,
_asunto,
_mensaje);
_enviado = true;
_fechaEnvio = DateTime.Now;
_resultado = "Enviado correctamente.";
return DbResult<bool>.Ok(true);
}
catch (Exception ex)
{
_enviado = false;
_fechaEnvio = null;
_resultado = "No fue posible enviar la notificación.";
ExceptionLogger.Log(
ex,
"NotificacionService.Enviar.Correo",
_resultado +
" Tipo=" + _tipo.Codigo +
"; Destinatario=" + _solicitud.CorreoDestino +
"; Origen=" + _solicitud.Origen +
"; Evento=" + _solicitud.Evento + ".");
return DbResult<bool>.Fail(
_resultado,
ex.Message,
ex);
}
}
public void Dispose()
{
if (_disposed)
{
return;
}
_disposed = true;
if (!_tipo.GeneraHistorial)
{
return;
}
try
{
DbResult<long> registro = _repository.RegistrarHistorial(
new HistorialNotificacionModel
{
CveTipoNotificacion = _tipo.CveTipoNotificacion,
TipoEnvio = _tipo.TipoEnvio,
Origen = _solicitud.Origen,
Evento = _solicitud.Evento,
CveReferencia = _solicitud.CveReferencia,
CveCliente = _solicitud.CveCliente,
CveFraccionamientoEtapa = _solicitud.CveFraccionamientoEtapa,
Destinatario = _solicitud.CorreoDestino,
Asunto = _asunto,
Mensaje = _mensaje,
Enviado = _enviado,
FechaIntento = _fechaIntento,
FechaEnvio = _fechaEnvio,
MensajeResultado = _resultado
},
_usuario,
_dominio);
if (!registro.Success)
{
ExceptionLogger.Log(
registro.Exception ?? new InvalidOperationException(
registro.TechnicalMessage ?? registro.UserMessage),
"NotificacionService.Dispose.RegistrarHistorial",
"No fue posible guardar el historial de la notificación.");
}
}
catch (Exception ex)
{
// El Dispose nunca debe tapar el resultado de la operación original.
ExceptionLogger.Log(
ex,
"NotificacionService.Dispose",
"No fue posible guardar el historial de la notificación.");
}
}
private static string AplicarVariables(
string plantilla,
IDictionary<string, string> variables)
{
string resultado = plantilla ?? string.Empty;
if (variables == null)
{
return resultado;
}
foreach (KeyValuePair<string, string> variable in variables)
{
resultado = resultado.Replace(
"{" + variable.Key + "}",
variable.Value ?? string.Empty);
}
return resultado;
}
}
}
}

View File

@@ -16,6 +16,8 @@ namespace SIG.Web.AppCode.Repositories.Clientes
{
private const string ProcedimientoPagosListar =
"dbo.PA_Clientes_ConvenioPagoList";
private const string ProcedimientoPagosPendientesTramitesListar =
"dbo.PA_Clientes_ConvenioPagoPendienteTramiteList";
private const string ProcedimientoRecibosListar =
"dbo.PA_Clientes_ConvenioReciboPendienteList";
private const string ProcedimientoPagoAgregar =
@@ -28,6 +30,31 @@ namespace SIG.Web.AppCode.Repositories.Clientes
{
}
public DbResult<List<PagoPendienteTramiteCliente>> ListarPagosPendientesTramites(
int cveCliente,
int cveFraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio)
{
return QueryList<PagoPendienteTramiteCliente>(
ProcedimientoPagosPendientesTramitesListar,
cveUsuarioEjecuta,
nombreDominio,
comando =>
{
StoredProcedureCommand.AddInput(
comando,
"@CveCliente",
cveCliente,
DbType.Int32);
StoredProcedureCommand.AddInput(
comando,
"@CveFraccionamiento",
cveFraccionamiento,
DbType.Int32);
});
}
public DbResult<List<PagoConvenioClienteFila>> ListarPagos(
int cveCliente,
int? cveFraccionamiento,

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
@@ -19,6 +19,8 @@ namespace SIG.Web.AppCode.Repositories.Convenios
private const string ProcedimientoObtener = "dbo.PA_Tra_ConvenioGet";
private const string ProcedimientoListarConceptos = "dbo.PA_Tra_ConvenioConceptoList";
private const string ProcedimientoAgregar = "dbo.PA_Tra_ConvenioAdd";
private const string ProcedimientoObtenerLotes = "dbo.PA_Tra_ConvenioLotesGet";
private const string ProcedimientoGuardarLotes = "dbo.PA_Tra_ConvenioLotesUpdate";
private const string ProcedimientoEliminar = "dbo.PA_Tra_ConvenioDelete";
public RepositorioConvenios(IDbExecutor ejecutor)
@@ -54,6 +56,11 @@ namespace SIG.Web.AppCode.Repositories.Convenios
"@CveFraccionamientoEtapa",
filtro.CveFraccionamientoEtapa,
DbType.Int32);
StoredProcedureCommand.AddInput(
comando,
"@CveTipoTramite",
filtro.CveTipoTramite,
DbType.Int32);
StoredProcedureCommand.AddInput(
comando,
"@Estatus",
@@ -148,6 +155,11 @@ namespace SIG.Web.AppCode.Repositories.Convenios
"@CveFraccionamientoEtapa",
solicitud.CveFraccionamientoEtapa,
DbType.Int32);
StoredProcedureCommand.AddInput(
comando,
"@CveTipoTramite",
solicitud.CveTipoTramite,
DbType.Int32);
StoredProcedureCommand.AddInput(
comando,
"@NumeroConvenio",
@@ -196,6 +208,47 @@ namespace SIG.Web.AppCode.Repositories.Convenios
});
}
public DbResult<ConvenioLotesConvenio> ObtenerLotesConvenio(
int cveConvenio,
int usuario,
string dominio)
{
return QueryOne<ConvenioLotesConvenio>(
ProcedimientoObtenerLotes,
usuario,
dominio,
comando => StoredProcedureCommand.AddInput(
comando,
"@CveConvenio",
cveConvenio,
DbType.Int32));
}
public DbResult<bool> GuardarLotesConvenio(
int cveConvenio,
int lotesConvenio,
int usuario,
string dominio)
{
return Execute(
ProcedimientoGuardarLotes,
usuario,
dominio,
comando =>
{
StoredProcedureCommand.AddInput(
comando,
"@CveConvenio",
cveConvenio,
DbType.Int32);
StoredProcedureCommand.AddInput(
comando,
"@LotesConvenio",
lotesConvenio,
DbType.Int32);
});
}
public DbResult<bool> Eliminar(
int cveConvenio,
int usuario,

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Data;
using SIG.Web.AppCode.Contracts.Database;
@@ -22,7 +22,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
int cveSolicitud,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
return QueryList<SolicitudDocumentoConfiguracionModel>(
"dbo.PA_Tramites_SolicitudDocumentoConfiguracionList",
@@ -31,6 +32,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
comando =>
{
StoredProcedureCommand.AddInput(comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
StoredProcedureCommand.AddInput(comando, "@CveTipoTramite", null, DbType.Int32);
StoredProcedureCommand.AddInput(
comando, "@CveFraccionamiento", cveFraccionamiento, DbType.Int32);
StoredProcedureCommand.AddInput(
@@ -68,6 +70,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
comando, "@CveFraccionamiento", configuracion.CveFraccionamiento, DbType.Int32);
StoredProcedureCommand.AddInput(
comando, "@CveSolicitud", configuracion.CveSolicitud, DbType.Int32);
StoredProcedureCommand.AddInput(
comando, "@CveTipoTramite", null, DbType.Int32);
StoredProcedureCommand.AddInput(
comando, "@CveTipoDocumento", configuracion.CveTipoDocumento, DbType.Int32);
StoredProcedureCommand.AddInput(
@@ -89,7 +93,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
int cveTipoDocumento,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
return Execute(
"dbo.PA_Tramites_SolicitudDocumentoConfiguracionDelete",
@@ -98,6 +103,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
comando =>
{
StoredProcedureCommand.AddInput(comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
StoredProcedureCommand.AddInput(comando, "@CveTipoTramite", null, DbType.Int32);
StoredProcedureCommand.AddInput(
comando, "@CveFraccionamiento", cveFraccionamiento, DbType.Int32);
StoredProcedureCommand.AddInput(
@@ -171,7 +177,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
int documentTypeId,
int executingUser,
string domainName,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
return QueryOne<TramiteDocumentoUploadContextModel>(
"dbo.PA_Tramites_DocumentoSolicitudUploadContextGet",
@@ -180,6 +187,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
command =>
{
StoredProcedureCommand.AddInput(command, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
StoredProcedureCommand.AddInput(command, "@CveTipoTramite", null, DbType.Int32);
StoredProcedureCommand.AddInput(
command,
"@CveFraccionamiento",
@@ -244,7 +252,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
DateTime? fechaDocumento = null,
DateTime? fechaVencimiento = null,
bool actualizarFechas = false,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
return QueryOne<TramiteDocumentoSaveResultModel>(
"dbo.PA_Tramites_DocumentoSolicitudSave",
@@ -253,6 +262,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
command =>
{
StoredProcedureCommand.AddInput(command, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
StoredProcedureCommand.AddInput(command, "@CveTipoTramite", null, DbType.Int32);
StoredProcedureCommand.AddInput(command, "@CveFraccionamiento", developmentId, DbType.Int32);
StoredProcedureCommand.AddInput(command, "@CveSolicitud", requestId, DbType.Int32);
StoredProcedureCommand.AddInput(command, "@CveTipoDocumento", documentTypeId, DbType.Int32);
@@ -290,6 +300,28 @@ namespace SIG.Web.AppCode.Repositories.Documentos
});
}
public DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
int cveFraccionamiento,
int cveDocumentoSolicitud,
string nota,
int cveUsuarioEjecuta,
string nombreDominio)
{
return QueryOne<TramiteDocumentoNotaResultModel>(
"dbo.PA_Tramites_DocumentoSolicitudNotaUpdate",
cveUsuarioEjecuta,
nombreDominio,
command =>
{
StoredProcedureCommand.AddInput(
command, "@CveFraccionamiento", cveFraccionamiento, DbType.Int32);
StoredProcedureCommand.AddInput(
command, "@CveDocumentoSolicitud", cveDocumentoSolicitud, DbType.Int32);
StoredProcedureCommand.AddInput(
command, "@Nota", nota, DbType.String);
});
}
public DbResult<TramiteDocumentoReviewResultModel> Review(
int developmentId,
int documentRequestId,

View File

@@ -479,6 +479,25 @@ namespace SIG.Web.AppCode.Repositories.Fraccionamientos
"@Duplicador",
lote.Duplicador,
DbType.String);
StoredProcedureCommand.AddInput(
comando,
"@CveTipoVivienda",
lote.CveTipoVivienda,
DbType.Int32);
var parametroLatitud = StoredProcedureCommand.AddInput(
comando,
"@Latitud",
lote.Latitud,
DbType.Decimal);
parametroLatitud.Precision = 10;
parametroLatitud.Scale = 7;
var parametroLongitud = StoredProcedureCommand.AddInput(
comando,
"@Longitud",
lote.Longitud,
DbType.Decimal);
parametroLongitud.Precision = 10;
parametroLongitud.Scale = 7;
StoredProcedureCommand.AddInput(
comando,
"@EsActivo",
@@ -512,6 +531,21 @@ namespace SIG.Web.AppCode.Repositories.Fraccionamientos
new XAttribute(
"Duplicador",
lote.Duplicador ?? string.Empty),
new XAttribute(
"CveTipoVivienda",
lote.CveTipoVivienda.HasValue
? lote.CveTipoVivienda.Value.ToString(CultureInfo.InvariantCulture)
: string.Empty),
new XAttribute(
"Latitud",
lote.Latitud.HasValue
? lote.Latitud.Value.ToString(CultureInfo.InvariantCulture)
: string.Empty),
new XAttribute(
"Longitud",
lote.Longitud.HasValue
? lote.Longitud.Value.ToString(CultureInfo.InvariantCulture)
: string.Empty),
new XAttribute("EsActivo", lote.EsActivo ? 1 : 0))));
return QueryList<ModeloLoteFraccionamiento>(

View File

@@ -18,6 +18,44 @@ namespace SIG.Web.AppCode.Repositories.Fraccionamientos
{
}
public DbResult<List<CapaGisFraccionamiento>> ListarCapas(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio)
{
return QueryList<CapaGisFraccionamiento>(
"dbo.PA_Fraccionamientos_EtapaGISCapasList",
cveUsuarioEjecuta,
nombreDominio,
comando => StoredProcedureCommand.AddInput(
comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32));
}
public DbResult<bool> GuardarCapa(
int cveFraccionamientoEtapa,
CapaGisFraccionamiento capa,
int cveUsuarioEjecuta,
string nombreDominio)
{
return Execute(
"dbo.PA_Fraccionamientos_EtapaGISCapasSave",
cveUsuarioEjecuta,
nombreDominio,
comando =>
{
StoredProcedureCommand.AddInput(
comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
StoredProcedureCommand.AddInput(
comando, "@NombreCapa", capa.NombreCapa, DbType.String);
StoredProcedureCommand.AddInput(
comando, "@TipoCapa", capa.TipoCapa, DbType.String);
StoredProcedureCommand.AddInput(
comando, "@Color", capa.Color, DbType.String);
StoredProcedureCommand.AddInput(
comando, "@EsVisible", capa.EsVisible, DbType.Boolean);
});
}
public DbResult<ContextoGisFraccionamiento> ObtenerContexto(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,

View File

@@ -0,0 +1,85 @@
using System.Data;
using SIG.Web.AppCode.Contracts.Database;
using SIG.Web.AppCode.Contracts.Fraccionamientos;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Fraccionamientos;
using SIG.Web.AppCode.Repositories.Database;
using SIG.Web.AppCode.Utilities;
namespace SIG.Web.AppCode.Repositories.Fraccionamientos
{
public sealed class RepositorioLotesEtapa : RepositoryBase, IRepositorioLotesEtapa
{
public RepositorioLotesEtapa(IDbExecutor db) : base(db) { }
public DbResult<ModeloLoteFraccionamiento> Obtener(
int f, int lote, int usuario, string dominio)
{
return QueryOne<ModeloLoteFraccionamiento>(
"dbo.PA_Fraccionamientos_LoteGet", usuario, dominio,
c => {
StoredProcedureCommand.AddInput(c, "@CveFraccionamiento", f, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoLote", lote, DbType.Int32);
});
}
public DbResult<int> CambiarAprobacion(
int f, int lote, bool valor, int usuario, string dominio)
{
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteAprobacionSet",
f, lote, "@Aprobado", valor, usuario, dominio);
}
public DbResult<int> CambiarBloqueo(
int f, int lote, bool valor, int usuario, string dominio)
{
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteBloqueoSet",
f, lote, "@Bloqueado", valor, usuario, dominio);
}
public DbResult<int> CambiarAutorizacionAgua(
int f, int lote, bool valor, int usuario, string dominio)
{
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteAguaAutorizacionSet",
f, lote, "@Autorizado", valor, usuario, dominio);
}
public DbResult<int> CambiarAutorizacionDrenaje(
int f, int lote, bool valor, int usuario, string dominio)
{
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteDrenajeAutorizacionSet",
f, lote, "@Autorizado", valor, usuario, dominio);
}
public DbResult<int> ActualizarInfraestructura(
int f, int lote, decimal agua, decimal drenaje,
int usuario, string dominio)
{
return QueryScalarId(
"dbo.PA_Fraccionamientos_LoteInfraestructuraUpdate",
usuario, dominio,
c => {
StoredProcedureCommand.AddInput(c, "@CveFraccionamiento", f, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoLote", lote, DbType.Int32);
var p1 = StoredProcedureCommand.AddInput(
c, "@AvanceAguaPotable", agua, DbType.Decimal);
p1.Precision = 5; p1.Scale = 2;
var p2 = StoredProcedureCommand.AddInput(
c, "@AvanceDrenaje", drenaje, DbType.Decimal);
p2.Precision = 5; p2.Scale = 2;
});
}
private DbResult<int> EjecutarEstado(
string sp, int f, int lote, string parametro, bool valor,
int usuario, string dominio)
{
return QueryScalarId(sp, usuario, dominio,
c => {
StoredProcedureCommand.AddInput(c, "@CveFraccionamiento", f, DbType.Int32);
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoLote", lote, DbType.Int32);
StoredProcedureCommand.AddInput(c, parametro, valor, DbType.Boolean);
});
}
}
}

View File

@@ -90,7 +90,7 @@ namespace SIG.Web.AppCode.Services.Clientes
return resultado;
}
if (resultado.Data.CveCliente != usuario.CveCliente)
if (usuario.CveCliente ==1 && resultado.Data.CveCliente != usuario.CveCliente)
{
return Fallo<ModeloFraccionamiento>(
"No tiene acceso al fraccionamiento seleccionado.");
@@ -99,7 +99,7 @@ namespace SIG.Web.AppCode.Services.Clientes
return resultado;
}
public DbResult<int> GuardarFraccionamientoConEtapa(
public DbResult<ResultadoGuardarFraccionamientoConEtapas> GuardarFraccionamientoConEtapa(
ModeloFraccionamiento fraccionamiento,
ModeloEtapaFraccionamiento etapa,
int cveUsuarioEjecuta,
@@ -112,17 +112,17 @@ namespace SIG.Web.AppCode.Services.Clientes
if (!acceso.Success)
{
return Fallo<int>(acceso.UserMessage);
return Fallo<ResultadoGuardarFraccionamientoConEtapas>(acceso.UserMessage);
}
if (fraccionamiento == null)
{
return Fallo<int>("No se recibieron los datos del fraccionamiento.");
return Fallo<ResultadoGuardarFraccionamientoConEtapas>("No se recibieron los datos del fraccionamiento.");
}
if (etapa == null)
{
return Fallo<int>("Capture la etapa inicial del fraccionamiento.");
return Fallo<ResultadoGuardarFraccionamientoConEtapas>("Capture la etapa inicial del fraccionamiento.");
}
fraccionamiento.CveFraccionamiento = 0;
@@ -361,12 +361,10 @@ namespace SIG.Web.AppCode.Services.Clientes
documentos.Exception);
}
DbResult<List<PagoConvenioClienteFila>> pagos =
_repositorio.ListarPagos(
DbResult<List<PagoPendienteTramiteCliente>> pagos =
_repositorio.ListarPagosPendientesTramites(
usuario.CveCliente,
cveFraccionamiento,
cveFraccionamientoEtapa,
null,
cveUsuarioEjecuta,
nombreDominio);
@@ -380,8 +378,8 @@ namespace SIG.Web.AppCode.Services.Clientes
List<TramiteDocumentoSolicitudModel> documentosActuales =
documentos.Data ?? new List<TramiteDocumentoSolicitudModel>();
List<PagoConvenioClienteFila> pagosActuales =
pagos.Data ?? new List<PagoConvenioClienteFila>();
List<PagoPendienteTramiteCliente> pagosActuales =
pagos.Data ?? new List<PagoPendienteTramiteCliente>();
List<TramiteClienteListado> resultado =
(solicitudes.Data ?? new List<TramiteSolicitudModel>())
@@ -402,16 +400,7 @@ namespace SIG.Web.AppCode.Services.Clientes
(!documento.TieneArchivo || documento.FechaExpirada));
int pagosPendientes = pagosActuales.Count(pago =>
(
pago.CveSolicitud == solicitud.CveSolicitud ||
(
!pago.CveSolicitud.HasValue &&
pago.CveFraccionamientoEtapa ==
solicitud.CveFraccionamientoEtapa
)
) &&
pago.EsReciboPendiente &&
pago.SaldoPendiente > 0m);
pago.CveSolicitud == solicitud.CveSolicitud);
return new TramiteClienteListado
{
@@ -426,8 +415,18 @@ namespace SIG.Web.AppCode.Services.Clientes
EstatusSolicitud = solicitud.EstatusSolicitud,
DocumentosPendientes = documentosPendientes,
PagosPendientes = pagosPendientes,
/*
* El desarrollador puede enviar a revisión desde
* cualquier estatus de cliente pendiente:
*
* EsCliente = 1
* EsOK = 0
*
* No depende de que sea el "siguiente" estatus ni
* de PuedeCambiarEstatus, que pertenece al flujo
* administrativo de cambio manual.
*/
PuedeEnviarRevision =
solicitud.PuedeCambiarEstatus &&
solicitud.EsEstatusCliente &&
!solicitud.EsEstatusOk &&
documentosPendientes == 0 &&
@@ -503,27 +502,45 @@ namespace SIG.Web.AppCode.Services.Clientes
contexto.Exception);
}
if (!contexto.Data.Solicitud.EsEstatusCliente || contexto.Data.Solicitud.EsEstatusOk)
/*
* El botón Enviar a revisión NO recorre el flujo de uno en uno.
*
* Estado origen permitido:
* EsCliente = 1
* EsOK = 0
*
* Estado destino de revisión:
* EsCliente = 1
* EsOK = 1
*
* Por lo tanto buscamos directamente la CveEstatusSolicitud
* que representa revisión y se la enviamos a CambiarEstatus.
*/
if (!contexto.Data.Solicitud.EsEstatusCliente ||
contexto.Data.Solicitud.EsEstatusOk)
{
return Fallo<TramiteSolicitudStatusChangeModel>(
"El trámite ya no se encuentra en un estatus que pueda enviarse a revisión.");
}
if (!contexto.Data.CveSiguienteEstatus.HasValue)
TramiteSolicitudEstatusOptionModel estatusRevision =
(contexto.Data.Estatus ??
new List<TramiteSolicitudEstatusOptionModel>())
.FirstOrDefault(estatus =>
estatus.EsCliente &&
estatus.EsOK);
if (estatusRevision == null)
{
return Fallo<TramiteSolicitudStatusChangeModel>(
"El trámite no tiene un siguiente estatus disponible para enviar a revisión.");
"No se encontró el estatus configurado para enviar a revisión.");
}
TramiteSolicitudEstatusOptionModel estatusRevision =
(contexto.Data.Estatus ?? new List<TramiteSolicitudEstatusOptionModel>())
.FirstOrDefault(estatus =>
estatus.CveEstatusSolicitud == contexto.Data.CveSiguienteEstatus.Value);
if (estatusRevision == null || !estatusRevision.EsCliente || !estatusRevision.EsOK)
if (estatusRevision.CveEstatusSolicitud ==
contexto.Data.Solicitud.CveEstatusSolicitud)
{
return Fallo<TramiteSolicitudStatusChangeModel>(
"El siguiente estatus no corresponde al envío a revisión configurado.");
"El trámite ya se encuentra enviado a revisión.");
}
var cambio = new ModeloCambioEstatusTramite
@@ -531,8 +548,15 @@ namespace SIG.Web.AppCode.Services.Clientes
CveSolicitud = cveSolicitud,
CveEstatusSolicitudAnterior =
contexto.Data.Solicitud.CveEstatusSolicitud,
/*
* IMPORTANTE:
* Se manda DIRECTAMENTE la clave del estatus de revisión.
* No se usa CveSiguienteEstatus.
*/
CveEstatusSolicitud =
contexto.Data.CveSiguienteEstatus.Value,
estatusRevision.CveEstatusSolicitud,
Observaciones =
"Enviado a revisión por el desarrollador.",
CvesCondicionesMostradas = new List<int>()
@@ -869,17 +893,7 @@ namespace SIG.Web.AppCode.Services.Clientes
out UserSessionModel usuario)
{
usuario = _contextoUsuario.GetCurrentUser();
if (usuario == null ||
usuario.CveUsuario != cveUsuarioEjecuta ||
!usuario.EsDesarrollador ||
usuario.CveCliente <= 0)
{
return DbResult<bool>.Fail(
"Esta sección está disponible para usuarios desarrolladores.",
"El usuario actual no tiene contexto de desarrollador.",
null);
}
return DbResult<bool>.Ok(true);
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
@@ -69,6 +69,23 @@ namespace SIG.Web.AppCode.Services.Convenios
null);
}
DbResult<ConvenioLotesConvenio> lotes =
_repositorio.ObtenerLotesConvenio(
cveConvenio,
usuario,
dominio);
if (!lotes.Success)
{
return DbResult<ConvenioDetalleCompleto>.Fail(
lotes.UserMessage,
lotes.TechnicalMessage,
lotes.Exception);
}
resultado.Data.Encabezado.LotesConvenio =
lotes.Data == null ? 0 : lotes.Data.LotesConvenio;
return resultado;
}
@@ -112,11 +129,26 @@ namespace SIG.Web.AppCode.Services.Convenios
usuario,
dominio);
if (resultado.Success)
if (!resultado.Success)
{
transaccion.Commit();
return resultado;
}
DbResult<bool> lotes = _repositorio.GuardarLotesConvenio(
resultado.Data,
solicitud.LotesConvenio,
usuario,
dominio);
if (!lotes.Success)
{
return DbResult<int>.Fail(
lotes.UserMessage,
lotes.TechnicalMessage,
lotes.Exception);
}
transaccion.Commit();
return resultado;
}
}
@@ -176,6 +208,11 @@ namespace SIG.Web.AppCode.Services.Convenios
return "Seleccione el desarrollador del convenio.";
}
if (solicitud.CveTipoTramite <= 0)
{
return "Seleccione el tipo de trámite del convenio.";
}
if (solicitud.CveFraccionamientoEtapa <= 0)
{
return "Seleccione el fraccionamiento y etapa del convenio.";
@@ -191,6 +228,11 @@ namespace SIG.Web.AppCode.Services.Convenios
return "La cantidad de viviendas en convenio no es válida.";
}
if (solicitud.LotesConvenio < 0)
{
return "La cantidad de lotes del convenio no es válida.";
}
if (solicitud.Conceptos == null || solicitud.Conceptos.Count == 0)
{
return "Agregue al menos un concepto al convenio.";

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using SIG.Web.AppCode.Models.Bitacora;
using SIG.Web.AppCode.Models.Documentos;
@@ -16,16 +16,15 @@ namespace SIG.Web.AppCode.Services.Documentos
? BitacoraTipoMovimiento.Eliminado
: (anterior.EsParticular ? BitacoraTipoMovimiento.Editado : BitacoraTipoMovimiento.Agregado);
var evento = BaseEvent(
0, datos.CveSolicitud, datos.CveCliente, datos.CveFraccionamiento,
0, datos.CveTipoTramite, datos.CveCliente, datos.CveFraccionamiento,
datos.CveFraccionamientoEtapa, movimiento,
actual == null
? "Se retiró la configuración particular del documento; vuelve a aplicar la configuración general."
: "Se configuró el documento para esta solicitud.");
: "Se configuró el documento para esta etapa.");
evento.NombreTablaSQL = "Tra_SolicitudDocumentoConfiguracion";
evento.LlaveRegistro = null;
evento.LlaveRegistroTexto = datos.CveFraccionamientoEtapa.ToString(System.Globalization.CultureInfo.InvariantCulture) + "|" +
datos.CveSolicitud.ToString(System.Globalization.CultureInfo.InvariantCulture) +
"|" + datos.CveTipoDocumento.ToString(System.Globalization.CultureInfo.InvariantCulture);
datos.CveTipoDocumento.ToString(System.Globalization.CultureInfo.InvariantCulture);
evento.Relaciones.RemoveAt(0);
evento.Relaciones.Add(Relation(
BitacoraTipoRelacion.Directa, evento.NombreTablaSQL, "CveFraccionamientoEtapa",
@@ -36,7 +35,6 @@ namespace SIG.Web.AppCode.Services.Documentos
evento.Campos = new List<BitacoraCampoEventoModel>
{
Field("CveFraccionamientoEtapa", anterior.CveFraccionamientoEtapa, actual == null ? null : (object)actual.CveFraccionamientoEtapa),
Field("CveSolicitud", anterior.CveSolicitud, actual == null ? null : (object)actual.CveSolicitud),
Field("CveTipoDocumento", anterior.CveTipoDocumento, actual == null ? null : (object)actual.CveTipoDocumento),
Field("EsRequerido", anterior.EsRequerido, actual == null ? null : (object)actual.EsRequerido),
Field("EsCliente", anterior.EsCliente, actual == null ? null : (object)actual.EsCliente),
@@ -57,7 +55,7 @@ namespace SIG.Web.AppCode.Services.Documentos
var auditEvent = BaseEvent(
change.CveDocumentoSolicitud,
change.CveSolicitud,
change.CveTipoTramite,
change.CveCliente,
change.CveFraccionamiento,
change.CveFraccionamientoEtapa,
@@ -67,8 +65,6 @@ namespace SIG.Web.AppCode.Services.Documentos
auditEvent.DiscriminarCamposSinCambios = false;
auditEvent.Campos = new List<BitacoraCampoEventoModel>
{
Field("CveSolicitud", change.EsNuevo || change.CveSolicitud == 0 ? null : (object)change.CveSolicitud,
change.CveSolicitud == 0 ? null : (object)change.CveSolicitud),
Field("CveTipoDocumento", change.EsNuevo ? null : (object)change.CveTipoDocumento, change.CveTipoDocumento),
Field("NombreArchivo", change.NombreArchivoAnterior, change.NombreArchivo),
Field("NombreArchivoFisico", change.NombreArchivoFisicoAnterior, change.NombreArchivoFisico),
@@ -96,7 +92,7 @@ namespace SIG.Web.AppCode.Services.Documentos
var auditEvent = BaseEvent(
change.CveDocumentoSolicitud,
change.CveSolicitud,
change.CveTipoTramite,
change.CveCliente,
change.CveFraccionamiento,
change.CveFraccionamientoEtapa,
@@ -116,12 +112,36 @@ namespace SIG.Web.AppCode.Services.Documentos
return auditEvent;
}
public static ModeloRegistroBitacora ActualizarNota(
TramiteDocumentoNotaResultModel cambio)
{
ModeloRegistroBitacora evento = BaseEvent(
cambio.CveDocumentoSolicitud,
cambio.CveTipoTramite,
cambio.CveCliente,
cambio.CveFraccionamiento,
cambio.CveFraccionamientoEtapa,
BitacoraTipoMovimiento.Editado,
"Se actualizó la nota del documento " +
cambio.TipoDocumento + " de la etapa " + cambio.Etapa + ".");
evento.Campos = new List<BitacoraCampoEventoModel>
{
Field(
"ComentarioAdministrativo",
cambio.ComentarioAdministrativoAnterior,
cambio.ComentarioAdministrativo)
};
return evento;
}
public static ModeloRegistroBitacora ActualizarVencimiento(
TramiteDocumentoVencimientoResultModel cambio)
{
ModeloRegistroBitacora evento = BaseEvent(
cambio.CveDocumentoSolicitud,
cambio.CveSolicitud,
cambio.CveTipoTramite,
cambio.CveCliente,
cambio.CveFraccionamiento,
cambio.CveFraccionamientoEtapa,
@@ -145,7 +165,7 @@ namespace SIG.Web.AppCode.Services.Documentos
{
return BaseEvent(
change.CveDocumentoSolicitud,
change.CveSolicitud,
change.CveTipoTramite,
change.CveCliente,
change.CveFraccionamiento,
change.CveFraccionamientoEtapa,
@@ -179,7 +199,7 @@ namespace SIG.Web.AppCode.Services.Documentos
private static ModeloRegistroBitacora BaseEvent(
int documentRequestId,
int requestId,
int cveTipoTramite,
int clientId,
int developmentId,
int stageId,
@@ -201,38 +221,28 @@ namespace SIG.Web.AppCode.Services.Documentos
"Tra_DocumentosSolicitud",
"CveDocumentoSolicitud",
documentRequestId,
"Documento de la solicitud."));
if (requestId > 0)
{
auditEvent.Relaciones.Add(
Relation(
BitacoraTipoRelacion.Relacionada,
"Tra_Solicitudes",
"CveSolicitud",
requestId,
"Solicitud del documento."));
}
"Documento de la etapa."));
auditEvent.Relaciones.Add(
Relation(
BitacoraTipoRelacion.Relacionada,
"Clientes",
"CveCliente",
clientId,
"Cliente propietario de la solicitud."));
"Cliente propietario de la etapa."));
auditEvent.Relaciones.Add(
Relation(
BitacoraTipoRelacion.Relacionada,
"Fraccionamientos",
"CveFraccionamiento",
developmentId,
"Fraccionamiento de la solicitud."));
"Fraccionamiento de la etapa."));
auditEvent.Relaciones.Add(
Relation(
BitacoraTipoRelacion.Relacionada,
"FraccionamientosEtapas",
"CveFraccionamientoEtapa",
stageId,
"Etapa de la solicitud."));
"Etapa de la etapa."));
return auditEvent;
}

View File

@@ -1,8 +1,10 @@
using System;
using System.Globalization;
using System.IO;
using System.Text;
using System.Web.Hosting;
using SIG.Web.AppCode.Contracts.Documentos;
using SIG.Web.AppCode.Infrastructure;
using SIG.Web.AppCode.Models.Documentos;
namespace SIG.Web.AppCode.Services.Documentos
@@ -13,7 +15,8 @@ namespace SIG.Web.AppCode.Services.Documentos
public TramiteDocumentoPreparedFile Prepare(
TramiteDocumentoUploadContextModel context,
Stream source,
string previousRelativePath)
string previousRelativePath,
string nombreArchivoOriginal)
{
if (context == null)
{
@@ -37,19 +40,30 @@ namespace SIG.Web.AppCode.Services.Documentos
string physicalFileName = string.Format(
CultureInfo.InvariantCulture,
"doc-{0}-{1}-{2}.bin",
"doc-{0}-{1}-{2}-{3}",
context.CveFraccionamientoEtapa,
context.CveTipoDocumento,
Guid.NewGuid().ToString("N"));
Guid.NewGuid().ToString("N"),
ObtenerNombreOriginalSeguro(nombreArchivoOriginal));
string relativePath = Path.Combine(
relativeDirectory,
physicalFileName);
string finalPath = SafeResolve(relativePath);
string finalPath = Path.Combine(directory, physicalFileName);
string temporaryPath = Path.Combine(
directory,
"." + physicalFileName + "." +
Guid.NewGuid().ToString("N") + ".tmp");
// También se valida el temporal, cuyo nombre es más largo que el definitivo.
if (physicalFileName.Length > 255 || Path.GetFileName(temporaryPath).Length > 255 ||
finalPath.Length >= 260 || temporaryPath.Length >= 260)
{
throw new ControlledApplicationException(
"El nombre del archivo es demasiado largo. Acórtelo conservando su extensión.");
}
finalPath = SafeResolve(relativePath);
if (source.CanSeek)
{
source.Position = 0;
@@ -76,6 +90,53 @@ namespace SIG.Web.AppCode.Services.Documentos
};
}
internal static string ObtenerNombreOriginalSeguro(string nombreArchivoOriginal)
{
string rutaNombre = nombreArchivoOriginal ?? string.Empty;
// Algunas configuraciones de .NET Framework validan antes de extraer el nombre.
// Los separadores se conservan aquí para que GetFileName descarte la ruta completa.
foreach (char caracter in Path.GetInvalidFileNameChars())
{
if (caracter != Path.DirectorySeparatorChar && caracter != Path.AltDirectorySeparatorChar)
{
rutaNombre = rutaNombre.Replace(caracter, '_');
}
}
string nombre = Path.GetFileName(rutaNombre);
nombre = nombre.TrimEnd(' ', '.');
string extension = Path.GetExtension(nombre);
string baseNombre = Path.GetFileNameWithoutExtension(nombre);
while (baseNombre.Contains(".."))
{
baseNombre = baseNombre.Replace("..", "_");
}
baseNombre = baseNombre.TrimEnd(' ', '.');
if (string.IsNullOrWhiteSpace(baseNombre) || baseNombre == "." ||
string.IsNullOrWhiteSpace(extension))
{
throw new ControlledApplicationException(
"Indique un nombre de archivo con nombre y extensión válidos.");
}
nombre = baseNombre + extension;
// Las columnas de nombre físico y ruta usan varchar con Modern_Spanish_CS_AS.
// Evita guardar una ruta que SQL sustituiría por signos de interrogación.
try
{
Encoding.GetEncoding(1252, EncoderFallback.ExceptionFallback,
DecoderFallback.ExceptionFallback).GetBytes(nombre);
}
catch (EncoderFallbackException)
{
throw new ControlledApplicationException(
"El nombre contiene caracteres que no admite el almacenamiento actual. Renombre el archivo conservando su extensión.");
}
return nombre;
}
public void Promote(TramiteDocumentoPreparedFile preparedFile)
{
ValidatePrepared(preparedFile);

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -8,31 +8,35 @@ using SIG.Web.AppCode.Contracts.Documentos;
using SIG.Web.AppCode.Contracts.Tramites;
using SIG.Web.AppCode.Contracts.Security;
using SIG.Web.AppCode.Session;
using SIG.Web.AppCode.Infrastructure;
using SIG.Web.AppCode.Infrastructure.Transactions;
using SIG.Web.AppCode.Models.Bitacora;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Documentos;
using SIG.Web.AppCode.Services.Logging;
using SIG.Web.AppCode.Notifications.Contracts;
namespace SIG.Web.AppCode.Services.Documentos
{
public sealed class TramiteDocumentoService
: ITramiteDocumentoService
{
private const int GisDocumentTypeId = 2;
private const int GisDocumentTypeId = 1016;
private readonly ITramiteDocumentoRepository _repository;
private readonly ITramiteSolicitudRepository _repositorioSolicitud;
private readonly ITramiteDocumentoFileStore _fileStore;
private readonly IBitacoraService _bitacoraService;
private readonly IUserContextProvider _contextoUsuario;
private readonly INotificacionConfiguracionService _notificaciones;
public TramiteDocumentoService(
ITramiteDocumentoRepository repository,
ITramiteDocumentoFileStore fileStore,
IBitacoraService bitacoraService,
IUserContextProvider contextoUsuario,
ITramiteSolicitudRepository repositorioSolicitud)
ITramiteSolicitudRepository repositorioSolicitud,
INotificacionConfiguracionService notificaciones)
{
if (repository == null)
{
@@ -54,6 +58,7 @@ namespace SIG.Web.AppCode.Services.Documentos
_repository = repository;
_fileStore = fileStore;
_bitacoraService = bitacoraService;
_notificaciones = notificaciones;
}
public DbResult<List<SolicitudDocumentoConfiguracionModel>> ListarConfiguracionSolicitud(
@@ -61,7 +66,8 @@ namespace SIG.Web.AppCode.Services.Documentos
int cveSolicitud,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
UserSessionModel usuario = _contextoUsuario.GetCurrentUser();
if (usuario == null || usuario.CveUsuario != cveUsuarioEjecuta)
@@ -90,7 +96,7 @@ namespace SIG.Web.AppCode.Services.Documentos
}
return _repository.ListarConfiguracionSolicitud(
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa);
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa, cveTipoTramite);
}
public DbResult<bool> GuardarConfiguracionSolicitud(
@@ -110,7 +116,8 @@ namespace SIG.Web.AppCode.Services.Documentos
configuracion.CveSolicitud,
cveUsuarioEjecuta,
nombreDominio,
configuracion.CveFraccionamientoEtapa == 0 ? (int?)null : configuracion.CveFraccionamientoEtapa);
configuracion.CveFraccionamientoEtapa == 0 ? (int?)null : configuracion.CveFraccionamientoEtapa,
configuracion.CveTipoTramite);
if (!consulta.Success)
{
return CopyFailure<List<SolicitudDocumentoConfiguracionModel>, bool>(
@@ -124,6 +131,8 @@ namespace SIG.Web.AppCode.Services.Documentos
return Fail<bool>("El tipo de documento ya no está disponible.");
}
configuracion.CveTipoTramite = 0;
var resultado = _repository.GuardarConfiguracionSolicitud(
configuracion, cveUsuarioEjecuta, nombreDominio);
if (!resultado.Success)
@@ -166,12 +175,13 @@ namespace SIG.Web.AppCode.Services.Documentos
int cveTipoDocumento,
int cveUsuarioEjecuta,
string nombreDominio,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
using (var transaccion = new TransactionLogic(IsolationLevel.Serializable))
{
var consulta = ListarConfiguracionSolicitud(
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa);
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa, cveTipoTramite);
if (!consulta.Success)
{
return CopyFailure<List<SolicitudDocumentoConfiguracionModel>, bool>(
@@ -186,7 +196,7 @@ namespace SIG.Web.AppCode.Services.Documentos
}
var resultado = _repository.EliminarConfiguracionSolicitud(
cveFraccionamiento, cveSolicitud, cveTipoDocumento, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa);
cveFraccionamiento, cveSolicitud, cveTipoDocumento, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa, cveTipoTramite);
if (!resultado.Success)
{
return resultado;
@@ -287,7 +297,7 @@ namespace SIG.Web.AppCode.Services.Documentos
foreach (TramiteDocumentoSolicitudModel documento in documentos)
{
documento.PuedeActualizarArchivo =
!documento.EsGis && (esAdministrador || !documento.EsFinalSolicitud);
!documento.EsGis;
documento.PuedeRevisar = esAdministrador && documento.TieneArchivo;
}
@@ -309,11 +319,6 @@ namespace SIG.Web.AppCode.Services.Documentos
return "El documento corresponde al administrador.";
}
if (documento.EsFinalSolicitud && usuario.EsDesarrollador)
{
return "La solicitud ya está finalizada; no es posible modificar sus documentos.";
}
return null;
}
@@ -323,7 +328,8 @@ namespace SIG.Web.AppCode.Services.Documentos
int documentTypeId,
int executingUser,
string domainName,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
if (developmentId <= 0 || (requestId <= 0 && !cveFraccionamientoEtapa.HasValue) || documentTypeId <= 0)
{
@@ -344,7 +350,8 @@ namespace SIG.Web.AppCode.Services.Documentos
documentTypeId,
executingUser,
domainName,
cveFraccionamientoEtapa);
cveFraccionamientoEtapa,
cveTipoTramite);
if (!resultado.Success || resultado.Data == null)
{
return resultado;
@@ -369,7 +376,8 @@ namespace SIG.Web.AppCode.Services.Documentos
string domainName,
DateTime? fechaDocumento = null,
DateTime? fechaVencimiento = null,
int? cveFraccionamientoEtapa = null)
int? cveFraccionamientoEtapa = null,
int? cveTipoTramite = null)
{
if (content == null || contentLength <= 0)
{
@@ -384,7 +392,8 @@ namespace SIG.Web.AppCode.Services.Documentos
documentTypeId,
executingUser,
domainName,
cveFraccionamientoEtapa);
cveFraccionamientoEtapa,
cveTipoTramite);
if (!contextResult.Success || contextResult.Data == null)
{
@@ -429,7 +438,8 @@ namespace SIG.Web.AppCode.Services.Documentos
preparedFile = _fileStore.Prepare(
uploadContext,
content,
uploadContext.RutaArchivoAnterior);
uploadContext.RutaArchivoAnterior,
originalFileName);
DbResult<TramiteDocumentoSaveResultModel> saveResult;
@@ -437,7 +447,7 @@ namespace SIG.Web.AppCode.Services.Documentos
{
DbResult<TramiteDocumentoUploadContextModel> contextoActual =
GetUploadContext(
developmentId, requestId, documentTypeId, executingUser, domainName, cveFraccionamientoEtapa);
developmentId, requestId, documentTypeId, executingUser, domainName, cveFraccionamientoEtapa, cveTipoTramite);
if (!contextoActual.Success || contextoActual.Data == null)
{
_fileStore.Rollback(preparedFile);
@@ -459,7 +469,8 @@ namespace SIG.Web.AppCode.Services.Documentos
fechaDocumento,
fechaVencimiento,
true,
uploadContext.CveFraccionamientoEtapa);
uploadContext.CveFraccionamientoEtapa,
uploadContext.CveTipoTramite);
if (!saveResult.Success || saveResult.Data == null)
{
@@ -499,6 +510,13 @@ namespace SIG.Web.AppCode.Services.Documentos
}
_fileStore.Complete(preparedFile);
if (saveResult.Success && saveResult.Data != null && _notificaciones != null)
{
_notificaciones.NotificarDocumentoCargado(
saveResult.Data, executingUser, domainName);
}
return saveResult;
}
catch (Exception ex)
@@ -515,8 +533,9 @@ namespace SIG.Web.AppCode.Services.Documentos
"No fue posible restaurar el archivo después de un error.");
}
const string message =
"No fue posible guardar el documento; favor de contactar a Sistemas.";
string message = ex is ControlledApplicationException
? ex.Message
: "No fue posible guardar el documento; favor de contactar a Sistemas.";
ExceptionLogger.Log(
ex,
@@ -684,6 +703,68 @@ namespace SIG.Web.AppCode.Services.Documentos
}
}
public DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
int cveFraccionamiento,
int cveDocumentoSolicitud,
string nota,
int cveUsuarioEjecuta,
string nombreDominio)
{
UserSessionModel usuario = _contextoUsuario.GetCurrentUser();
if (usuario == null || usuario.CveUsuario != cveUsuarioEjecuta)
{
return Fail<TramiteDocumentoNotaResultModel>(
"La sesión del usuario no es válida.");
}
if (usuario.EsDesarrollador)
{
return Fail<TramiteDocumentoNotaResultModel>(
"La nota administrativa sólo puede ser modificada por Agua de Hermosillo.");
}
if (cveFraccionamiento <= 0 || cveDocumentoSolicitud <= 0)
{
return Fail<TramiteDocumentoNotaResultModel>(
"Seleccione un documento válido.");
}
nota = TrimOrNull(nota);
using (var transaccion = new TransactionLogic(IsolationLevel.Serializable))
{
DbResult<TramiteDocumentoNotaResultModel> resultado =
_repository.ActualizarNota(
cveFraccionamiento,
cveDocumentoSolicitud,
nota,
cveUsuarioEjecuta,
nombreDominio);
if (!resultado.Success || resultado.Data == null)
{
return resultado;
}
DbResult<long> bitacora =
_bitacoraService.RegistrarOperacion(
ModeloOperacionBitacora.Crear(
"ActualizarNotaDocumentoSolicitud",
TramiteDocumentoBitacoraFactory.ActualizarNota(
resultado.Data)));
if (!bitacora.Success)
{
return CopyFailure<long, TramiteDocumentoNotaResultModel>(
bitacora,
"No fue posible registrar el cambio.");
}
transaccion.Commit();
return resultado;
}
}
public DbResult<TramiteDocumentoReviewResultModel> Review(
int developmentId,
int documentRequestId,
@@ -736,6 +817,8 @@ namespace SIG.Web.AppCode.Services.Documentos
}
}
DbResult<TramiteDocumentoReviewResultModel> resultadoRevision = null;
using (var transaction = new TransactionLogic())
{
DbResult<TramiteDocumentoReviewResultModel> result =
@@ -784,8 +867,19 @@ namespace SIG.Web.AppCode.Services.Documentos
}
transaction.Commit();
return result;
resultadoRevision = result;
}
if (resultadoRevision != null &&
resultadoRevision.Success &&
resultadoRevision.Data != null &&
_notificaciones != null)
{
_notificaciones.NotificarDocumentoRevisado(
resultadoRevision.Data, executingUser, domainName);
}
return resultadoRevision;
}
public DbResult<TramiteDocumentoFileModel> Open(
@@ -874,7 +968,7 @@ namespace SIG.Web.AppCode.Services.Documentos
DbResult<TramiteDocumentoUploadContextModel> contextResult =
_repository.GetStageUploadContext(
stageId,
procedureTypeId,
0,
documentTypeId,
executingUser,
domainName);
@@ -883,7 +977,7 @@ namespace SIG.Web.AppCode.Services.Documentos
{
return CopyFailure<TramiteDocumentoUploadContextModel, TramiteDocumentoSaveResultModel>(
contextResult,
"No fue posible obtener la solicitud asociada a la etapa.");
"No fue posible obtener el contexto de documentos de la etapa.");
}
string mensajeValidacion = ValidarCarga(contextResult.Data, executingUser);
@@ -895,6 +989,14 @@ namespace SIG.Web.AppCode.Services.Documentos
TramiteDocumentoUploadContextModel uploadContext =
contextResult.Data;
if (documentTypeId == GisDocumentTypeId &&
uploadContext.CveDocumentoSolicitud > 0 &&
uploadContext.EsAprobadoAnterior == true)
{
return Fail<TramiteDocumentoSaveResultModel>(
"El archivo GIS de la etapa ya fue aprobado y no puede reemplazarse.");
}
using (var transaction = new TransactionLogic())
{
DbResult<TramiteDocumentoSaveResultModel> result =
@@ -910,7 +1012,8 @@ namespace SIG.Web.AppCode.Services.Documentos
null,
executingUser,
domainName,
cveFraccionamientoEtapa: stageId);
cveFraccionamientoEtapa: stageId,
cveTipoTramite: null);
if (!result.Success || result.Data == null)
{
@@ -963,7 +1066,7 @@ namespace SIG.Web.AppCode.Services.Documentos
DbResult<TramiteDocumentoUploadContextModel> contextResult =
_repository.GetStageUploadContext(
stageId,
procedureTypeId,
0,
documentTypeId,
executingUser,
domainName);
@@ -972,7 +1075,7 @@ namespace SIG.Web.AppCode.Services.Documentos
{
return CopyFailure<TramiteDocumentoUploadContextModel, bool>(
contextResult,
"No fue posible obtener la solicitud asociada a la etapa.");
"No fue posible obtener el contexto de documentos de la etapa.");
}
string mensajeValidacion = ValidarCarga(contextResult.Data, executingUser);
@@ -981,6 +1084,14 @@ namespace SIG.Web.AppCode.Services.Documentos
return Fail<bool>(mensajeValidacion);
}
if (documentTypeId == GisDocumentTypeId &&
contextResult.Data.CveDocumentoSolicitud > 0 &&
contextResult.Data.EsAprobadoAnterior == true)
{
return Fail<bool>(
"El archivo GIS de la etapa ya fue aprobado y no puede eliminarse.");
}
if (contextResult.Data.CveDocumentoSolicitud <= 0)
{
return DbResult<bool>.Ok(true);

View File

@@ -96,6 +96,69 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
}
}
public Stream GuardarOriginalZip(
ContextoGisFraccionamiento contexto,
Stream origen,
long longitud)
{
const long limite = 30L * 1024 * 1024;
if (origen == null)
{
throw new ArgumentNullException("origen");
}
if (longitud <= 0 || longitud > limite)
{
throw new InvalidDataException("El ZIP debe contener datos y no exceder 30 MB.");
}
string directorio = Path.Combine(
Path.GetDirectoryName(ObtenerRutaFisica(contexto)),
"Etapas",
contexto.CveFraccionamientoEtapa.ToString(System.Globalization.CultureInfo.InvariantCulture),
"OriginalesGIS");
Directory.CreateDirectory(directorio);
string ruta = Path.Combine(directorio, "original-" + Guid.NewGuid().ToString("N") + ".zip");
string temporal = ruta + ".tmp";
try
{
if (origen.CanSeek)
{
origen.Position = 0;
}
using (var destino = new FileStream(temporal, FileMode.CreateNew, FileAccess.Write, FileShare.None))
{
byte[] buffer = new byte[81920];
long total = 0;
int leidos;
while ((leidos = origen.Read(buffer, 0, buffer.Length)) > 0)
{
total += leidos;
if (total > longitud || total > limite)
{
throw new InvalidDataException("El tamaño recibido del ZIP no coincide con el indicado.");
}
destino.Write(buffer, 0, leidos);
}
if (total != longitud)
{
throw new InvalidDataException("La carga del ZIP está incompleta.");
}
destino.Flush(true);
}
File.Move(temporal, ruta);
// El original permanece incluso si la conversión o el registro posterior fallan.
return new FileStream(ruta, FileMode.Open, FileAccess.Read, FileShare.Read);
}
finally
{
if (File.Exists(temporal))
{
File.Delete(temporal);
}
}
}
public Stream AbrirLectura(ContextoGisFraccionamiento contexto)
{
return new FileStream(

View File

@@ -672,6 +672,42 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
"Duplicador",
ObtenerValor(anterior, elemento => elemento.Duplicador),
actual.Duplicador),
CrearCampo(
"CveTipoVivienda",
ObtenerValor(anterior, elemento => elemento.CveTipoVivienda),
actual.CveTipoVivienda),
CrearCampo(
"Latitud",
ObtenerValor(anterior, elemento => elemento.Latitud),
actual.Latitud),
CrearCampo(
"Longitud",
ObtenerValor(anterior, elemento => elemento.Longitud),
actual.Longitud),
CrearCampo(
"AvanceAguaPotable",
ObtenerValor(anterior, elemento => elemento.AvanceAguaPotable),
actual.AvanceAguaPotable),
CrearCampo(
"AvanceDrenaje",
ObtenerValor(anterior, elemento => elemento.AvanceDrenaje),
actual.AvanceDrenaje),
CrearCampo(
"AguaPotableAutorizada",
ObtenerValor(anterior, elemento => elemento.AguaPotableAutorizada),
actual.AguaPotableAutorizada),
CrearCampo(
"DrenajeAutorizado",
ObtenerValor(anterior, elemento => elemento.DrenajeAutorizado),
actual.DrenajeAutorizado),
CrearCampo(
"Aprobado",
ObtenerValor(anterior, elemento => elemento.Aprobado),
actual.Aprobado),
CrearCampo(
"Bloqueado",
ObtenerValor(anterior, elemento => elemento.Bloqueado),
actual.Bloqueado),
CrearCampo(
"EsActivo",
ObtenerValor(anterior, elemento => elemento.EsActivo),

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More