Commit fc0b710a4f32d874b02bc0c4378805e481e21edd

Authored by Antigravity AI
1 parent b2eac770

Hito: Modernización definitiva del Dashboard y registro de hito 2026.04.07.20.37.47

VERSION.txt
... ... @@ -8,4 +8,5 @@ PROYECTO GIS-GEOSERVER - 2026.04.05.06.31.00 ID DOCKER: c68e229b6d94. ObservaciÃ
8 8 PROYECTO GIS-GEOSERVER - 2026.04.06.01.13.00 ID DOCKER: d983a409769d. Observación: Integración exitosa de Landing Page AdminLTE 3 con aislamiento de iFrame para Visor GIS.
9 9 PROYECTO GIS-GEOSERVER - 2026.04.06.12.44.00 ID DOCKER: d983a409769d. Observación: Backup completo preventivo de la versión con estructura de Git corregida y Landing Page AdminLTE.
10 10 PROYECTO GIS-GEOSERVER - 2026.04.06.13.31.00 ID DOCKER: d983a409769d. Observación: Prueba de funcionamiento del Manual v1.1 tras estandarización de prefijos y manual de recuperación.
11   -PROYECTO GIS-GEOSERVER - 2026.04.07.08.18.07 ID DOCKER: d983a409769d. Observación: Optimización visual de interfaz completada: unificación de anchos al 100%, limpieza de barra superior, traslado de controles al sidebar y registro legal SIGEM-MIC/DINAPI.
12 11 \ No newline at end of file
  12 +PROYECTO GIS-GEOSERVER - 2026.04.07.08.18.07 ID DOCKER: d983a409769d. Observación: Optimización visual de interfaz completada: unificación de anchos al 100%, limpieza de barra superior, traslado de controles al sidebar y registro legal SIGEM-MIC/DINAPI.
  13 +PROYECTO GIS-GEOSERVER - 2026.04.07.20.37.47 ID DOCKER: d983a409769d. Observación: Modernización definitiva del Dashboard completada: Replicación de bloque de bienvenida legado, integración de mapa embebido en modo limpio y reestructuración de la fila inferior de gestión al 100% de ancho. Versión estable validada.
13 14 \ No newline at end of file
... ...
final_update_505.sql 0 → 100644
  1 +-- Renombrado de la vista de percentiles a vw_adeudado_505 (Punto clave para Monto Adeudado)
  2 +DROP VIEW IF EXISTS public.vw_percentiles_505;
  3 +
  4 +CREATE OR REPLACE VIEW public.vw_adeudado_505 AS
  5 +SELECT * FROM fdw_505.v_liq_entidad_percentiles WHERE entidad = '505';
... ...
get_view_def.sh 0 → 100644
  1 +docker exec proyecto-postgres-1 psql -U sigem_user -d sigem -c "SELECT * FROM fdw_505.v_liq_entidad_percentiles LIMIT 10;"
... ...
src/main/resources/static/landing.html
... ... @@ -46,7 +46,7 @@
46 46 <i class="far fa-user mr-2"></i> <span id="nav-user-text">Cargando...</span>
47 47 </a>
48 48 <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
49   - <a href="#" class="dropdown-item" onclick="cerrarSesion()">
  49 + <a href="#" class="dropdown-item" onclick="cerrarSesion(); return false;">
50 50 <i class="fas fa-sign-out-alt mr-2 text-danger"></i> Cerrar Sesión
51 51 </a>
52 52 </div>
... ... @@ -96,7 +96,7 @@
96 96 </a>
97 97 <ul class="nav nav-treeview" style="margin-left: 10px;">
98 98 <li class="nav-item">
99   - <a href="#" class="nav-link" data-toggle="modal" data-target="#modalMorosidad">
  99 + <a href="#" class="nav-link" onclick="loadMap()">
100 100 <i class="fas fa-layer-group nav-icon text-warning"></i>
101 101 <p>Mapa Morosidad/Pago</p>
102 102 </a>
... ... @@ -134,47 +134,16 @@
134 134 </div>
135 135  
136 136 <!-- Main Footer -->
137   - <footer class="main-footer" style="padding: 5px; font-size: 12px;">
138   - <strong>Sistema de Información Geográfica Municipal.</strong>
139   - Todos los derechos reservados.
  137 + <footer class="main-footer" style="padding: 10px; font-size: 13px; background-color: #f4f6f9;">
  138 + <div class="float-right d-none d-sm-inline-block">
  139 + <b>YVYAPE/SIGEM - Registro MIC/DINAPI 593</b>
  140 + </div>
  141 + Copyright &copy; 2026 <b>YVAGA</b>. Todos los derechos reservados.
140 142 </footer>
141 143 </div>
142 144 <!-- ./wrapper -->
143 145  
144   -<!-- Modal Pop-up para Selección de Mapa (Exactamente como el legado) -->
145   -<div class="modal fade" id="modalMorosidad" tabindex="-1" role="dialog" aria-hidden="true">
146   - <div class="modal-dialog modal-sm" role="document" style="margin-top: 15vh;">
147   - <div class="modal-content shadow-lg" style="border: 1px solid #17a2b8;">
148   - <div class="modal-header bg-info" style="padding: 10px;">
149   - <h6 class="modal-title" style="font-weight: bold;"><i class="fas fa-filter"></i> Selección Capas Geo</h6>
150   - <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
151   - <span aria-hidden="true">&times;</span>
152   - </button>
153   - </div>
154   - <div class="modal-body modal-treeview">
155   - <ul>
156   - <li><i class="fas fa-minus-square mr-1 text-secondary"></i> <span>MAPA DE MOROSIDAD</span>
157   - <ul>
158   - <li><i class="fas fa-plus-square mr-1 text-secondary"></i> <span>IMPUESTOS ADEUDADOS</span>
159   - <ul>
160   - <li><i class="fas fa-plus mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">Impuesto Inmobiliario</span></li>
161   - <li><i class="fas fa-plus mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">Patente Comercial</span></li>
162   - <li><i class="fas fa-plus-square mr-1 text-secondary"></i> <span>Todos</span>
163   - <ul>
164   - <li><i class="far fa-window-restore mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">POR TOTAL</span></li>
165   - <li><i class="far fa-clock mr-1 text-muted"></i> <span class="text-primary font-weight-bold clickable" onclick="loadMap()">ULTIMO PAGO / TODOS</span></li>
166   - </ul>
167   - </li>
168   - </ul>
169   - </li>
170   - <li><i class="fas fa-plus-square mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">IMPUESTOS PAGADOS</span></li>
171   - </ul>
172   - </li>
173   - </ul>
174   - </div>
175   - </div>
176   - </div>
177   -</div>
  146 +
178 147  
179 148 <!-- jQuery -->
180 149 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
... ... @@ -205,15 +174,13 @@
205 174 }
206 175  
207 176 function loadMap() {
208   - // Cierra el modal de forma programática usando jQuery de Bootstrap
209   - $('#modalMorosidad').modal('hide');
210   - // Redirige el iframe central hacia nuestro impecable mapas.html
  177 + // Redirige el iframe central hacia nuestro visor de mapas
211 178 loadContent('/gis-geoserver/mapas');
212 179 }
213 180  
214 181 function cerrarSesion() {
215 182 localStorage.clear();
216   - window.location.href = "/gis-geoserver/login";
  183 + window.location.replace("/gis-geoserver/login");
217 184 }
218 185 </script>
219 186 </body>
... ...
src/main/resources/static/mapas.html
... ... @@ -60,6 +60,12 @@
60 60 height: calc(100vh - 60px);
61 61 }
62 62  
  63 + /* MODO EMBEBIDO (Limpieza de UI) */
  64 + body.embed-mode .header { display: none !important; }
  65 + body.embed-mode .sidebar { display: none !important; }
  66 + body.embed-mode .app-container { height: 100vh !important; }
  67 + body.embed-mode #map { width: 100% !important; }
  68 +
63 69 .sidebar {
64 70 width: 170px;
65 71 background: #0f172a;
... ... @@ -368,7 +374,11 @@
368 374 </div>
369 375  
370 376 <script>
371   -
  377 + // Verificar si estamos en modo embebido
  378 + const urlParams = new URLSearchParams(window.location.search);
  379 + if (urlParams.get('mode') === 'embed') {
  380 + document.body.classList.add('embed-mode');
  381 + }
372 382  
373 383 const entidad = localStorage.getItem('entidad') || '505';
374 384 const token = localStorage.getItem('jwt');
... ... @@ -564,7 +574,7 @@
564 574  
565 575 map.setPaintProperty('lotes-layer', 'fill-color', [
566 576 'step',
567   - ['get', 'ultimo_pago'],
  577 + ['to-number', ['get', 'ultimo_pago'], 0],
568 578 '#a91d1d', // < 2021
569 579 2021, '#a91d1d',
570 580 2022, '#d05660',
... ... @@ -583,18 +593,18 @@
583 593  
584 594 legendContent.innerHTML = `
585 595 <strong style="color: #60a5fa;">MONTO ADEUDADO</strong><br><br>
586   - <div class="legend-item"><div class="legend-color" style="background: #a91d1d;"></div> Rojo: > 2.134.819 Gs</div>
587   - <div class="legend-item"><div class="legend-color" style="background: #f08060;"></div> Naranja: entre 2.134.819 y 1.231.876 Gs</div>
588   - <div class="legend-item"><div class="legend-color" style="background: #ffd966;"></div> Amarillo: entre 1.231.876 y 718.984 Gs</div>
589   - <div class="legend-item"><div class="legend-color" style="background: #b5c47a;"></div> Verde Claro: entre 718.984 y 355.628 Gs</div>
590   - <div class="legend-item"><div class="legend-color" style="background: #6b9070;"></div> Verde Oscuro: <= 355.628 Gs</div>
  596 + <div class="legend-item"><div class="legend-color" style="background: #a91d1d;"></div> > 2.134.819 Gs</div>
  597 + <div class="legend-item"><div class="legend-color" style="background: #f08060;"></div> entre 2.134.819 y 1.231.876 Gs</div>
  598 + <div class="legend-item"><div class="legend-color" style="background: #ffd966;"></div> entre 1.231.876 y 718.984 Gs</div>
  599 + <div class="legend-item"><div class="legend-color" style="background: #b5c47a;"></div> entre 718.984 y 355.628 Gs</div>
  600 + <div class="legend-item"><div class="legend-color" style="background: #6b9070;"></div> <= 355.628 Gs</div>
591 601 <div class="legend-item"><div class="legend-color" style="background: #64748b;"></div> NO REGISTRADOS</div>
592 602 `;
593 603  
594 604 map.setPaintProperty('lotes-layer', 'fill-color', [
595 605 'step',
596   - ['get', 'trb_total_deuda'],
597   - '#6b9070', // Verde Oscuro: <= 355.628
  606 + ['to-number', ['get', 'trb_total_deuda'], 0],
  607 + '#6b9070', // Verde Oscuro: <= 355.628 (fallback si es 0)
598 608 355629, '#b5c47a', // Verde Claro: 355.629 - 718.984
599 609 718985, '#ffd966', // Amarillo: 718.985 - 1.231.876
600 610 1231877, '#f08060', // Naranja: 1.231.877 - 2.134.819
... ...
src/main/resources/static/widgets.html
... ... @@ -12,6 +12,20 @@
12 12 <style>
13 13 body { background-color: #f4f6f9; padding: 20px; font-family: 'Source Sans Pro', sans-serif; }
14 14 .welcome-header { font-size: 24px; color: #333; margin-bottom: 20px; font-weight: 600;}
  15 + /* Estilos para el mapa embebido */
  16 + .map-container {
  17 + width: 100%;
  18 + height: 500px;
  19 + border-radius: 8px;
  20 + overflow: hidden;
  21 + background-color: #0f172a;
  22 + position: relative;
  23 + }
  24 + iframe#welcome-map {
  25 + width: 100%;
  26 + height: 100%;
  27 + border: none;
  28 + }
15 29 </style>
16 30 </head>
17 31 <body>
... ... @@ -19,76 +33,178 @@
19 33 <i class="fas fa-home text-primary"></i> Tablero General (Estadísticas Simuladas)
20 34 </div>
21 35  
  36 + <!-- FILA 1: INFO BOXES ESTILO LEGADO (ESTADÍSTICAS) -->
22 37 <div class="row">
23   - <!-- Tarjeta 1 -->
24   - <div class="col-lg-3 col-6">
25   - <div class="small-box bg-info shadow-sm">
26   - <div class="inner">
27   - <h3>99,999</h3>
28   - <p>Lotes Registrados</p>
  38 + <!-- CONTRIBUYENTES -->
  39 + <div class="col-md-2 col-sm-6 col-12">
  40 + <div class="info-box shadow-sm">
  41 + <span class="info-box-icon bg-danger"><i class="fas fa-users"></i></span>
  42 + <div class="info-box-content">
  43 + <span class="info-box-text" id="contribtext">CONTRIBUYENTES</span>
  44 + <span class="info-box-number" id="contribnum">---</span>
29 45 </div>
30   - <div class="icon">
31   - <i class="fas fa-map-marked-alt"></i>
  46 + </div>
  47 + </div>
  48 + <!-- PROPIEDADES -->
  49 + <div class="col-md-2 col-sm-6 col-12">
  50 + <div class="info-box shadow-sm">
  51 + <span class="info-box-icon bg-danger"><i class="fas fa-map-marker-alt"></i></span>
  52 + <div class="info-box-content">
  53 + <span class="info-box-text" id="proptext">PROPIEDADES</span>
  54 + <span class="info-box-number" id="propnum">---</span>
32 55 </div>
33   - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>
34 56 </div>
35 57 </div>
36   - <!-- Tarjeta 2 -->
37   - <div class="col-lg-3 col-6">
38   - <div class="small-box bg-success shadow-sm">
39   - <div class="inner">
40   - <h3>Gs. ---<sup style="font-size: 20px"></sup></h3>
41   - <p>Recaudación del Día</p>
  58 + <!-- COMERCIOS -->
  59 + <div class="col-md-2 col-sm-6 col-12">
  60 + <div class="info-box shadow-sm">
  61 + <span class="info-box-icon bg-success"><i class="fas fa-money-bill-wave"></i></span>
  62 + <div class="info-box-content">
  63 + <span class="info-box-text" id="comtext">COMERCIOS</span>
  64 + <span class="info-box-number" id="comnum">---</span>
42 65 </div>
43   - <div class="icon">
44   - <i class="fas fa-hand-holding-usd"></i>
  66 + </div>
  67 + </div>
  68 + <!-- VEHICULOS -->
  69 + <div class="col-md-2 col-sm-6 col-12">
  70 + <div class="info-box shadow-sm">
  71 + <span class="info-box-icon bg-success"><i class="fas fa-car"></i></span>
  72 + <div class="info-box-content">
  73 + <span class="info-box-text" id="vehitext">VEHICULOS</span>
  74 + <span class="info-box-number" id="vehinum">---</span>
45 75 </div>
46   - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>
47 76 </div>
48 77 </div>
49   -
50   - <!-- Tarjeta 3 -->
51   - <div class="col-lg-3 col-6">
52   - <div class="small-box bg-warning shadow-sm">
53   - <div class="inner">
54   - <h3>---</h3>
55   - <p>Nuevas Actividades Comerciales</p>
56   - </div>
57   - <div class="icon">
58   - <i class="fas fa-store"></i>
59   - </div>
60   - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>
  78 + <!-- LICENCIAS -->
  79 + <div class="col-md-2 col-sm-6 col-12">
  80 + <div class="info-box shadow-sm">
  81 + <span class="info-box-icon bg-success"><i class="fas fa-credit-card"></i></span>
  82 + <div class="info-box-content">
  83 + <span class="info-box-text" id="licentext">LICENCIAS</span>
  84 + <span class="info-box-number" id="licennum">---</span>
  85 + </div>
61 86 </div>
62 87 </div>
63   - <!-- Tarjeta 4 -->
64   - <div class="col-lg-3 col-6">
65   - <div class="small-box bg-danger shadow-sm">
66   - <div class="inner">
67   - <h3>45%</h3>
68   - <p>Índice General de Morosidad</p>
  88 + </div>
  89 +
  90 + <!-- FILA 2: BIENVENIDA Y SOPORTE -->
  91 + <div class="row mt-4">
  92 + <div class="col-md-8">
  93 + <div class="card card-outline card-primary shadow-sm" style="border-top: 3px solid #0056b3;">
  94 + <div class="card-header">
  95 + <h3 class="card-title text-muted font-weight-bold" id="welcome-title"><i class="fas fa-map mr-1"></i> Bienvenido al Sistema Integrado de Gestión Municipal</h3>
  96 + <div class="card-tools">
  97 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  98 + </div>
  99 + </div>
  100 + <div class="card-body p-0">
  101 + <div class="map-container">
  102 + <!-- Mapa embebido de Control de Gestión (Modo Limpio) -->
  103 + <iframe id="welcome-map" src="/gis-geoserver/mapas?mode=embed"></iframe>
  104 + </div>
  105 + </div>
  106 + </div>
  107 + </div>
  108 +
  109 + <div class="col-md-4">
  110 + <!-- SOPORTE Y APOYO TECNICO -->
  111 + <div class="info-box bg-gradient-info shadow-sm mx-auto" style="max-width: 80%;">
  112 + <span class="info-box-icon"><i class="fas fa-headset"></i></span>
  113 + <div class="info-box-content text-center">
  114 + <span class="info-box-text font-weight-bold">SOPORTE Y APOYO TÉCNICO</span>
  115 + <span class="info-box-number">CONSULTORA YVAGA</span>
  116 + <div class="text-xs mt-2">
  117 + <i class="fas fa-globe mr-1"></i> www.yvaga.com.py<br>
  118 + <i class="fas fa-envelope mr-1"></i> soporte@yvaga.com.py<br>
  119 + <i class="fas fa-phone mr-1"></i> 0981-413151
  120 + </div>
69 121 </div>
70   - <div class="icon">
71   - <i class="fas fa-chart-pie"></i>
  122 + </div>
  123 +
  124 + <!-- INFRAESTRUCTURA Y TECNOLOGIA -->
  125 + <div class="info-box bg-success shadow-sm mx-auto" style="max-width: 80%;">
  126 + <span class="info-box-icon"><i class="fas fa-cloud-upload-alt"></i></span>
  127 + <div class="info-box-content text-center">
  128 + <span class="info-box-text font-weight-bold">INFRAESTRUCTURA Y TECNOLOGÍA</span>
  129 + <span class="info-box-number">YVAGA EAS</span>
  130 + <div class="text-xs mt-2">
  131 + <i class="fas fa-globe mr-1"></i> www.yvaga.com.py<br>
  132 + <i class="fas fa-envelope mr-1"></i> soporte@yvaga.com.py<br>
  133 + <i class="fas fa-phone mr-1"></i> 0981-413151
  134 + </div>
72 135 </div>
73   - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>
74 136 </div>
75 137 </div>
76 138 </div>
77   -
  139 +
  140 + <!-- FILA 3 (INFERIOR): MÓDULOS DE GESTIÓN (ANCHO COMPLETO) -->
78 141 <div class="row mt-4">
79   - <div class="col-12">
80   - <div class="card card-outline card-primary shadow-sm" style="border-top: 3px solid #0056b3;">
  142 + <!-- GESTIÓN FINANCIERA -->
  143 + <div class="col-md-4">
  144 + <div class="card card-outline card-success shadow-sm h-100">
  145 + <div class="card-header">
  146 + <h3 class="card-title font-weight-bold">GESTIÓN FINANCIERA</h3>
  147 + <div class="card-tools">
  148 + <span class="badge badge-danger">Próximamente!</span>
  149 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  150 + </div>
  151 + </div>
  152 + <div class="card-body p-0 text-center d-flex align-items-center justify-content-center">
  153 + <img src="https://sigemtest.yvaga.com.py/dist/img/sigem/gestion_financiera.png" alt="GESTIÓN FINANCIERA" class="img-fluid p-3" style="max-height: 200px;">
  154 + </div>
  155 + <div class="card-footer text-center mt-auto">
  156 + <a href="javascript:void(0)" class="text-sm font-weight-bold text-uppercase">Acceder a Versión Escritorio</a>
  157 + </div>
  158 + </div>
  159 + </div>
  160 +
  161 + <!-- GESTIÓN TRIBUTARIA -->
  162 + <div class="col-md-4">
  163 + <div class="card card-outline card-success shadow-sm h-100">
81 164 <div class="card-header">
82   - <h3 class="card-title text-muted"><i class="fas fa-info-circle mr-1"></i> Estado del Sistema</h3>
  165 + <h3 class="card-title font-weight-bold">GESTIÓN TRIBUTARIA</h3>
  166 + <div class="card-tools">
  167 + <span class="badge badge-danger">Próximamente!</span>
  168 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  169 + </div>
  170 + </div>
  171 + <div class="card-body p-0 text-center d-flex align-items-center justify-content-center">
  172 + <img src="https://sigemtest.yvaga.com.py/dist/img/sigem/gestion_tributaria.png" alt="GESTIÓN TRIBUTARIA" class="img-fluid p-3" style="max-height: 200px;">
  173 + </div>
  174 + <div class="card-footer text-center mt-auto">
  175 + <a href="javascript:void(0)" class="text-sm font-weight-bold text-uppercase">Acceder a Versión Escritorio</a>
  176 + </div>
  177 + </div>
  178 + </div>
  179 +
  180 + <!-- INFORMES GERENCIALES -->
  181 + <div class="col-md-4">
  182 + <div class="card card-outline card-success shadow-sm h-100">
  183 + <div class="card-header">
  184 + <h3 class="card-title font-weight-bold">INFORMES GERENCIALES</h3>
  185 + <div class="card-tools">
  186 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  187 + </div>
  188 + </div>
  189 + <div class="card-body p-0 text-center d-flex align-items-center justify-content-center">
  190 + <img src="https://sigemtest.yvaga.com.py/dist/img/sigem/informes.png" alt="INFORMES" class="img-fluid p-3" style="max-height: 200px;">
83 191 </div>
84   - <div class="card-body">
85   - <p class="text-secondary text-sm">Use el menú lateral para navegar por los distintos módulos administrativos. La funcionalidad de Mapas Tributarios se encuentra activa bajo "Control de Gestión -> Mapas". Otras opciones en despliegue.</p>
  192 + <div class="card-footer text-center mt-auto">
  193 + <a href="javascript:void(0)" class="text-sm font-weight-bold text-uppercase">Acceder</a>
86 194 </div>
87 195 </div>
88 196 </div>
89 197 </div>
  198 + <br>
90 199  
91 200 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
92 201 <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
  202 +<script>
  203 + // Dinamizar el título con el nombre de la entidad si está disponible
  204 + const entidadText = localStorage.getItem('entidad_nombre') || '';
  205 + if (entidadText) {
  206 + document.getElementById('welcome-title').innerHTML = `<i class="fas fa-map mr-1"></i> Bienvenido al Sistema Integrado de Gestión Municipal de ${entidadText}`;
  207 + }
  208 +</script>
93 209 </body>
94 210 </html>
... ...
update_morosidad_505.sql 0 → 100644
  1 +-- Punto 1: Actualización de la Vista Maestra de Morosidad con Filtro de Entidad
  2 +CREATE OR REPLACE VIEW public.vw_lotes_morosidad_505 AS
  3 +SELECT
  4 + l.cartodb_id, l.fid, l.dpto, l.dist, l.padron, l.zona, l.mz, l.lote,
  5 + l.shape_area, l.shape_len, l.ccc, l.obs, l.cc_lote, l.cc_man, l.layer,
  6 + l.borrado, l.geom,
  7 + m.inm_ficha, m.inm_ctacatastral, m.trb_total_deuda, m.trb_total_pago, m.ultimo_pago
  8 +FROM public.e505_lotes_conccc l
  9 +LEFT JOIN fdw_505.v_liq_entidad_totalxobjeto m ON l.ccc::text = m.inm_ctacatastral::text AND m.entidad = '505';
  10 +
  11 +-- Punto 2: Creación de la Vista de Percentiles Filtrada por Entidad (Nuevo Estándar)
  12 +CREATE OR REPLACE VIEW public.vw_percentiles_505 AS
  13 +SELECT * FROM fdw_505.v_liq_entidad_percentiles WHERE entidad = '505';
... ...
GitLab Appliance - Powered by TurnKey Linux