Portal Municipalidad v.3.0

Descripción: Para esta tercera entrega del Portal Municipalidad se trabajó sobre la v.2.0 en la cual se realizaron una serie de modificaciones a las tablas preexistentes y se modificaron ciertos CRUDS para aumentar la funcionalidad del Portal web. Asimismo, se incorporaron una serie de nuevas tablas y  nuevos SP (de mayor complejidad). La página continúa simulando un portal web amigable con el usuario para una municipalidad (gobierno local en Costa Rica). Desde él se pueden consultar propiedades registradas, propietarios (incluyendo de tipo jurídico), usuarios registrados en el portal y conceptos de cobro sobre los servicios municipales. También se pueden gestionar las transacciones de consumo de agua, se habilita la generación de recibos recurrentes (de manera mensual), se pone a disposición las generación de ordenes de corta y reconexión de agua y el pago de recibos (este incluye el manejo de  intereses moratorios). Cuenta con una bitácora de cambios (tipo historial) realizados en una serie de tablas. Para esta última entrega se añadió el pago de los recibos desde el portal web y la generación, manejo y pago de arreglos de pago para financiar recibos atrasados. 

    Para esta nueva versión 3.0 se habilita la diferenciación de perfiles en el portal web y la . Si se utiliza el modo administrador es posible alterar las diversas relaciones entre los objetos del portal, por ejemplo: Añadir propiedades, propietarios, usuarios y conceptos de cobro; modificar los diferentes propietarios de cierta propiedad, los usuarios que tienen derecho consultar la propiedad y los conceptos de cobro que van a ser asociados a los diferentes bienes inmuebles. Además, consultar los recibos (pagados, pendientes), comprobantes de pago y las transacciones en el consumo de agua asociados a una determinada propiedad. Adicionalmente, es posible consultar un historial de cambios en un rango de fechas establecido, administrar, crear y controlar los arreglos de pago y pagar los recibos desde el portal web. Finalmente, el administrador tiene la funcionalidad de impersonar el modo cliente. 

    Para lo que corresponde al modo cliente se habilita la posibilidad de manejar solamente las propiedades registradas a su nombre, o bien, que gocen de permisos para ser vistas por un determinado cliente. El cliente puede consultar recibos de sus  propiedades, pagarlos, revisar las personas inscritas como propietarios del inmueble, revisar el historial de facturas o comprobantes de pago, consultar los diferentes tipos de conceptos de cobro a los cuales está suscrita la propiedad y, además, solicitar un arreglo de pago para financiar los recibos que tenga pendientes a un plazo conveniente. 

Características:

  1. Utilización de CRUD's para realizar las diferentes acciones de la página web. 
  2. Scripts para carga desde archivos XML tipo simulación.
  3. Manejo de errores por medio de códigos personalizados.
  4. Validaciones en capa de datos y en capa lógica para evitar al máximo los bugs.
  5. Versionamiento de la página por medio de la plataforma Github.
  6. Base de datos con respaldo en servidor de AWS.
  7. La página web posee una UI amigable. 
  8. Creación de INSERTS masivos desde el XML.
  9. Validación de tipos de usuarios en página web y base de datos.
  10. Procesamiento de transacciones de consumo y manejo diferenciado por tipos.
  11. Reconstrucción del acumulado total de m3 de agua en las propiedades.
  12. Generación de recibos de manera recurrentes y en caso extraordinarios.
  13. Utilización de tipos de datos personalizados en SQL para el manejo de parámetros tabla.
  14. Procesamiento de pagos de forma retroactiva, con validación de recibos pendientes y manejo de intereses moratorios.
  15. Generación de órdenes de corta y reconexión de agua.
  16. Utilización de trigger para manejo de cambios en las tabla de Propiedades.
  17. Deshabilitación y habilitación de triggers por medio de comandos de tipo varchar.
  18. Utilización de ip's y nombres de usuario para generar trazabilidad de los cambios registrado en la bitácora.
  19. Modificación de los CRUDS originales en las principales tablas para el registro de los cambios en la bitácora.
  20. Parseo de formato JSON para mostrar los cambios en las entidades de la base de datos.
  21. Consultas a un historial de cambios por rango de fechas de forma intuitiva y amigable con el usuario.
  22. Pago de recibos desde el Portal Web, mediante una selección interactiva para el usuario.
  23. Confirmación del pago mediante el código del comprobante recién creado.
  24. Despliegue de los comprobantes de en orden cronológico y agrupado por tipo de Concepto de Cobro.
  25. Muestra de los comprobantes en encabezados, con apartado de detalle. Es este último se detallan los recibos que fueron pagados por un determinado comprobante.
  26. Creación de arreglos de pago, generados con plazos variables y con cuotas fijas mensuales para brindar financiamiento a los clientes.
  27. Creación de tabla para el manejo de variables de configuración que facilitan cambios a nivel global de la base de datos.
  28. Administración de los arreglos de pago mediante el patrón de diseño saldo-movimiento.
  29. Impersonación del usuario cliente por parte de un usuario administrador.
  30. Mejoramiento de la interfaz web para que sea estéticamente mejor y más intuitiva.
Anotaciones: La lectura de los archivos XML requiere subir el archivo .xml en el mismo servidor donde sea hospedada la base de datos. Por motivos de AWS (solo permite .json y .csv) no se permitía la carga de tipo BULK del archivo XML a la base de datos SQL. Es por esa razón que creamos una copia de la base de datos y la corrimos en un servidor local. Para esta segunda entrega fue importante el aprendizaje en el manejo de triggers. Cuando se utilizan triggers masivos se ejecutan en batches de ocho elementos aproximadamente, por ese motivo vemos como valioso rescatar que si se desea aplicar un sp a los elementos que vienen, utilizar un medio de interación. Asimismo, mencionar que para poder pasar una tabla como parámetro en un sp, es necesario establecer un tipo definido de variables tabla con sus características principales. Asimismo, para esta tercera entrega el orden de las transacciones es importante en el patrón saldo-movimiento. La actualización del saldo debe ser realizada siempre al final de las operaciones.

Consejos: La simulación creada a partir del XML toma muchísimo tiempo. Para aumentar la eficiencia se diseñó un método que rebaja el tiempo de ejecución un 97,67% (de 5 min a 7 seg). Este consiste en extraer los datos y colocarlos en tablas temporales, incluyendo en estas tablas la fecha para luego utilizar un 'WHERE' y sacar la información según la fecha. Por lo que en el while solamente se estará extrayendo información de las tablas con los datos precargados. 
     Esto evita que se extraigan los datos de las 3700 líneas del XML 121 veces para solo insertar las que cumplen con esa fecha. En la primera versión del archivo se brindaba la fecha en un nodo dentro de "Operacion_Dia" por lo que debíamos recorrer un nodo sacando por ejemplo los datos de un propietario y luego devolverse para poder sacar el nodo fecha lo cual ralentizaba aún más el proceso. 
    Entre los consejos de la segunda entrega del trabajo cabe destacar que tal y como nos recomendó el profesor, si bien SQL no está diseñado para trabajar de manera iterativa, en los últimos años está ganando tendencia el utilizarlo de esa manera. Esto porque es más fácil de debuggear, mantener y optimizar. Nosotros utilizamos este consejo para la transacción de consumo de agua, así como para la generación de recibos, pagos, cambios es propiedad e inclusive en el trigger. 
    Los consejos de la tercera entrega incluyen, eliminar todas las transacciones anidadas que puedan haber en los procedimientos almacenados, esto facilita su debuggeo mucho más. Asimismo, cuidar el orden de las transacciones en el patrón saldo-movimiento. La utilización de una tabla con valores de configuración resulta una característica muy útil, ya que, permite realizar un solo cambio en la base de datos y que se actualicen todos los cálculos y variables que llaman a la variables de configuración. 
     
    En la página web se pueden reutilizar métodos como por ejemplo el de mostrar propiedades ya que lo único diferente es el nombre del SP y  el de los parámetros pero siguen una línea muy similar. Además, al mostrar las propiedades los atributos a mostrar son los mismos por lo que el archivo .aspx que contiene el html y genera la misma tabla y mismo orden de botones y demás. En la cuestión de los errores se manejan en la base de datos ya que esta no puede permitir que se generen problemas, sin embargo no se puede enviar un dato que se supone que es int como varchar  porque  al sacarlo del textBox, este dará error entonces se debe previamente utilizar alguna estrategia para mitigar estos errores que pueden provocar que la página se caiga. En este caso nuestra solución fue usar expresiones regulares y al encontrar que un storing contiene letras convertir el valor de esa variable a -1 para que al recibirse en la base esta notara ese detalle y devuelva error. Para esta tercera y final entrega del proyecto se modificaron pocos detalles y se agregaron varias ventanas. En primera instancia, encontramos más opciones por parte del usuario: "cliente". Este ahora al consultar sus recibos pendientes y pagos, como lo hacía anteriormente, pero con la posibilidad de pagar estos pendientes. Primero, se observa la tabla de recibos pendientes pero con una casilla al lado izquierdo de la tabla donde el usuario puede seleccionar los recibos que desea pagar. Debe pagar de los más viejos hasta más recientes por lo que si selecciona el más reciente sin pagar los demás la plataforma no se lo permitirá. Luego, los otros botones son para ya llevar a cabo la transacción. El primero es pagar, el cuál sencillamente paga todos los recibos seleccionados. Arreglos de Pago tiene una ventana que muestra lo que se debe y luego el usuario elige el plazo y le da a calcular plazo para que pueda ver la cuota y el total final de la deuda. Luego de evaluar el mejor plazo, se crea el AP y listo. Ahora, ese AP no se puede ver dentro de los recibos normales por lo que se habilitó un botón al lado derecho de la tabla de propiedades. Esta lo que permite es ver los APs que tiene una propiedad. Con todos sus detalles. Además, se modificó para que fuera mucho más agradable a la vista agregandole animación y colores de la misma paleta que presenta el resto de la página. Por la parte del administrador es posible el ingresar a la cuenta de un usuario para hacer Arreglos de Pago para cuando el cliente visite a la municipalidad y sea atendido por algún empleado de ahí. El administrador va a la pestana de usuarios y selecciona al usuario y efectúa las consultas correspondientes.


Recursos:
La página web fue creada utilizando ASP.NET con conexión a una base de datos creada en SQL Server. AWS (Debido a la emergencia de la cuarentena se logró trabajar de manera remota para que ambos integrantes pudiesen trabajar en conjunto)

Estado final: Luego de arduos días de trabajo la base finalmente se encuentra totalmente funcional. Cuenta con todos los requerimientos pedido por el profesor. Esto se traduce en la implementación del modelado hecho en clase, siguiendo exclusivamente los estándares del curso: utilización de índices por medio de llaves primarias, de tipo integer, identity, incremental de 1 en 1, con formato de nombre "ID". Además, la colocación del prefijo "in"(input) para parámetros de entrada de los diferentes stored procedures. La base posee manejo de errores por medio de Try and Catch y de la variable del sistema @TRANCOUNT, retornando números de error personalizados. La implementación de alias para las tablas en los inner join. De igual forma la implementación de las fórmulas para el cálculo de los recibos detalladas en el documento, mediantes el uso de CASE. Por último, la utilización de triggers para el registro de cambios es una determinada tabla. Para esta tercer entrega, se eliminaron todas las transacciones anidadas que existían y se cumple con los cálculos de la cuota de los arreglos de pago detallados en el documento del profesor.  

Adicionalmente, se implementaron CRUD's en la totalidad de la tablas para satisfacer las consultas requeridas por el portal, utilizando el estándar de stored procedure dado en clase. La página web también está también totalmente funcional y contiene elementos para optimizarla como por ejemplo:  no mostramos todos los objetos de una tabla para no sobrecargar la página. Además, se implementó un botón de volver para que el usuario pueda ir hacia atrás sin tener que darle click a los botones de arriba. Esto puede ser más funcional en el caso de que se desee agregar más elementos a la página y existan más botones. Y es bastante natural tener botón para ir hacia atrás en la UI de las páginas. Se utiliza un menú principal que permite navegar por las diferentes páginas; este se mantiene estático por lo que facilita la navegación por el portal y permite ir de una consulta a otra fácilmente. El tamaño de los botones y del texto fue considerado ya que, como no hay muchos elementos se puede ampliar el texto pero sin que sea masivo, tratando de mantener una interfaz limpia. En el caso de las propiedades donde el texto es muy extenso se amplía el ancho de las tablas para evitar la acumulación de texto en un espacio reducido y así mantener un buen diseño. Para esta segunda entrega el portal web cuenta con la completa implementación de generación de recibos, facturación, manejo en el consumo de agua, cortes y reconexión de agua, historial de cambios, pago de recibos desde el portal web y financiamiento mediante el uso de arreglos de pagos. Para la UI de la página web se implementa el uso de la bitácora de cambios de manera intuitiva para el usuario (por medio de animaciones de calendario) y el menú de opciones se expandió para abarcar las nuevas funcionalidades y muestra lo necesario dependiendo del tipo de usuario que haya accedido a la plataforma. Se rediseñan las ventanas de pago, para brindar comprobaciones finales y se incorpora la creación y cotización de arreglos de pago con sus debidas validaciones. Quedamos muy satisfechos con el producto final, esperamos que sea de su agrado!

Comentarios

Entradas más populares de este blog

Avance #28

Avance #39

Avance #32