Full text
1
2
3 ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA DEL SOFTWARE Diseño e implementación de una plataforma web para empresas de servicios Design and implementation of a web platform for service companies Realizado por Roberto Sánchez Arévalo Tutorizado por Rafael Marcos Luque Baena Departamento Lenguajes y Ciencias de la Computación UNIVERSIDAD DE MÁLAGA MÁLAGA, (septiembre, 2019) Fecha defensa: Fdo.: El Secretario del Tribunal
4
5 D/Dª.:_________________________________________, con DNI ______________, estudiante del Grado/Máster en ______ __________________________________, de la Universidad de Málaga. DECLARO QUE: El Trabajo Fin de Grado/Máster denominado: _____________________________________________________________________ _________________________________________________________________, es de mi autoría, inédito (no ha sido difundido por ningún medio, incluyendo internet) y original (no es copia ni adaptación de otra), no habiendo sido presentado anteriormente por mí ni por ningún otro autor o autora, ni en parte ni en su totalidad. Así mismo, se ha desarrollado respetando los derechos intelectuales de terceros, para lo cual se han indicado las citas necesarias en las páginas donde se usan, y sus fuentes originales se han incorporado en la bibliografía. Igualmente se han respetado los derechos de propiedad industrial o intelectual que pudiesen afectar a cualquier institución o empresa. Para que así conste, firmo la presente declaración en Málaga, a _____ de __________________ de ______. Fdo.: D/Dª ______________________________________
6
7 Resumen En el presente proyecto se ha implementado una aplicación web con arquitectura de cliente/proveedor con idea de mejorar la eficiencia de una empresa multiservicios. Para ellos se han programado los dos componentes necesarios: un cliente web con el que el usuario podre interactuar con el sistema y un proveedor con los recursos requeridos por la funcionalidad del cliente. Para la representación de los elementos de la interfaz del cliente, se ha utilizado HTML5 junto con CSS y Bootstrap. Para la lógica de la aplicación se ha utilizado JavaScript junto con algunas librerías adicionales, principalmente JQuery. En cuanto al proveedor, ha sido implementado en Java, utilizando una base de datos MySQL. Para cierta funcionalidad del cliente, ha sido necesario importar la librería Weka 3 para poder generar un modelo de aprendizaje con el fin de agrupar ciertas ubicaciones. Se ha seguido un modelo incremental en el diseño e implementación del sistema. Palabras clave: • Cliente • JavaScript • JQuery • HTML5 • CSS • Bootstrap • Proveedor • RestFul • Java • MySQL • Weka 3
8 Abstract In this project, a web application with client / provider architecture has been implemented with the idea of improving the efficiency of a multiservice company. For them, the two necessary components have been programmed: a web client with which the user can interact with the system and a provider with the resources required by the client's functionality. For the representation of the elements of the client interface, HTML5 has been used together with CSS and Bootstrap. For the logic of the application JavaScript has been used along with some additional libraries, mainly JQuery. As for the provider, it has been implemented in Java, using a MySQL database. For some customer functionality, it has been necessary to import the Weka 3 library in order to generate a learning model to group certain locations. In the design and implementation of the system, an incremental model has been followed. Keywords: • Client • JavaScript • JQuery • HTML5 • CSS • Bootstrap • Provider • RestFul • Java • MySQL • Weka 3
9 Índice 1. Introducción 11 1.1. Motivación 11 1.2. Objetivos 12 2. Metodología 15 3. Tecnologías y herramientas utilizadas 17 3.1. Cliente 17 3.2. Proveedor 18 3.3. Pruebas 19 4. Fases de trabajo 21 4.1. Primera iteración 46 4.2. Segunda iteración 47 4.3. Tercera iteración 53 5. Conclusiones 61 6. Líneas futuras 63 7. Referencias 65 8. Anexos 67
16
17 3. Tecnologías y herramientas utilizadas 3.1. Cliente Durante el clico, una de las asignaturas impartidas fue “Tecnologías de aplicaciones web”, impartida por Eduardo Guzmán. En esta asignatura una de las tecnologías que se nos enseño fue JSF (Java Server Faces). En un primer momento, era la alternativa de la que disponíamos para la implementación del proyecto. Para mejorar la interfaz ofrecida por JSF, se encontró una librería gratuita con estilos para JSF llamada BootFaces [referencia 1]. Por otra parte, con idea de ver las diferentes alternativas de las que se disponía para la implementación del cliente, recurrimos a la web W3schools [referencia 2]. En esta web podemos encontrar numerosas guías de lenguajes o tecnologías, con pequeños ejemplos mostrando su uso. Se completaron todos los ejercicios propuestos en las siguientes guías: • HTML5 [referencia 3] En esta guía podremos encontrar numerosos ejemplos de HTML en general y las nuevas aportaciones de HTML5, en los que vemos cómo utilizar los diferentes componentes. • CSS [referencia 4] En esta guía podremos encontrar numerosos ejemplos de CSS, su sintaxis, uso de los selectores y una relación detallada de propiedades con su descripción y uso. • Bootstrap 4 [referencia 5] En esta guía podremos encontrar una serie de ejemplos explicando el sistema de “grid” seguido por Bootstrap, como aplicar su estilo a los distintos componentes HTML y como personalizar estos estilos. • JavaScript [referencia 6] Esta es una guía exhaustiva de JavaScript, donde se nos enseña su sintaxis, declaración de variables, tipos de datos, funciones ofrecidas por los tipos predefinidos, DOM (Document Object Model), BOM (Browser Object Model), AJAX, JSON y una comparativa entre JavaScript y JQuery.
18 • JQuery [referencia 7] En esta guía aprenderemos la sintaxis de JQuery, uso de selectores y eventos, como moverse por los elementos de la página, como acceder a servicios web. • Angular [referencia 8] De forma similar a la guía anterior, en esta se nos enseñan el uso de selectores y eventos, como moverse por los elementos de la página, como acceder a servicios web utilizando Angular. Para la codificación de las contraseñas, decidimos utilizar alguna de las variantes de SHA (Secure Hash Algorithm). Encontramos una librería gratuita para ello [referencia 9]. Para los iconos de la interfaz, nos decantamos por los ofrecidos por Google [referencia 10]. 3.2. Proveedor Para la implementación del proveedor, disponíamos de dos alternativas, aprendidas durante el grado en la asignatura “Ingeniería web”, impartida por Carlos Canal y Rafael Macos Luque. Estas dos alternativas consistían en implementar un proveedor SOAP o REST. Al ser dos alternativas muy similares, nos decantamos por REST simplemente por ser una tecnología más moderna. El lenguaje empleado para la implementación del proveedor REST ha sido Java, por ser el lenguaje en el que más experiencia se tenía. En cuanto a la base de datos, se tenía cierta experiencia en MySQL y Oracle SQL, pero solo se planteó como alternativa MySQL por tener una licencia menos restrictiva. Finalmente, para la agrupación de los siniestros en base a su ubicación, se requiere algún tipo de herramienta capaz de agrupar puntos en función de su proximidad entre ellos. Asesorado por el tutor del proyecto, Rafael Marcos Luque, se recurrió a la librería Weka [referencia 11]. Entre los algoritmos ofrecidos por esta librería, encontramos uno que se ajustaba al problema a la perfección, SimpleKMeans [referencia 12].
19 3.3. Pruebas Una vez se disponía de información sobre diferentes alternativas para la implementación tanto del cliente como del proveedor, se debía decidir cuáles de ellas se utilizarían. Inicialmente nos planteamos las tecnologías a emplear en el cliente. De entre ellas nos quedamos con dos, la posibilidad de implementar el cliente en JSF + BootFaces o de hacerlo en HTML5 + JavaScript + JQuery + Bootstrap. Para ello se realizó la implementación de un pequeño proyecto de prueba (“La Barbería”) en ambas versiones. El objetivo de este ejercicio era realizar un CRUD sobre una tabla de prueba con ambas alternativas. Se cumplió el objetivo con ambas alternativas, pero con la experiencia de este pequeño ejemplo, decidimos decantarnos por la segunda alternativa, es decir, HTML5 + JavaScript + JQuery + Bootstrap. Las implementaciones anteriormente comentadas se hicieron centrándose en el cliente, por lo que se dejó de lado el tipo de base de datos a emplear y por simpleza se utilizó Java DB. Para la implementación del proyecto se debía utilizar MySQL, de manera que se procedió a la refactorización de la prueba de “La Barbería” de la alternativa finalmente elegida. Estas pruebas sirvieron para detectar algunos problemas al tratar de conectar la base de datos en MySQL con Glassfish 5, por lo que se decidió utilizar para el proyecto Glassfish 4.1. Se adjuntan los proyectos de prueba en el soporte digital entregado [ficheros “LaBarberia-JQuey-cliente.zip”, “LaBarberia-JQuey-proveedor.zip”, “LaBarberiaJSF-cliente.zip”, y “LaBarberia-JSF-proveedor.zip”]
20
21 4. Fases de trabajo Para la realización del proyecto trato de seguirse, con mayor o menos acierto, una metodología incremental. Se comenzó con una serie de entrevistas con el cliente (gerente de la empresa multiservicios) con el fin de obtener un documento que describiese el problema planteado y los requisitos de la solución propuesta. Podemos consultar el documento resultante en el fichero adjunto “Informacion del cliente.pdf”. En dicho documento se identificaron una serie de actores y requisitos [adjuntos “Informacion del cliente (Actores).pdf” e “Informacion del cliente (Requisitos).pdf”]. En base a dichos actores y requisitos, se procedió a identificar las entidades del problema y las relaciones entre estas [adjuntos “Informacion del cliente (Entidades).pdf” e “Informacion del cliente (Relaciones).pdf”]. A continuación, se muestra el lisado de actores identificados: • [A000] Aseguradora o [A010] Operador de la aseguradora o [A020] Perito • [A100] Multiservicios • [A200] Trabajador o [A210] Operador o [A220] Gerente o [A230] Operario ▪ [A231] Reparador ▪ [A232] Limpiador • [A300] Grupo de trabajo o [A310] Conductor • [A400] Persona de contacto o [A410] Cliente ▪ [A411] Cliente habituado ▪ [A412] Cliente común ▪ [A413] Cliente no habituado • [A500] Subcontrata • [A600] Administrador
22 En el listado de requisitos funcionales identificados se hará referencia a fragmentos del adjunto “Informacion del cliente (Requisitos).pdf”, en cullas referencias se indicará el párrafo del texto en el que se encuentra dicho fragmento: • [RNF0000] → El sistema debe aumentar la eficiencia en la gestión de los siniestros. [párrafo 1] " ...aumentar la eficiencia de la gestión de dichos trabajos..." • [RF0100] → El operador podrá registrar una póliza en el sistema • [RF0101] → El operador podrá registrar una propiedad en el sistema [párrafo 2] " ...Este contrato genera una póliza sobre una determinada propiedad..." • [RF0102] → El operador podrá registrar un cliente en el sistema [párrafo 2] "...Cada compañía aseguradora dispone de su propia bolsa de clientes..." • [RNF0100] → El sistema verificara que no exista un par póliza/propiedad duplicado [párrafo 2] "...varias pólizas activas en una misma aseguradora si se están asegurando diferentes propiedades..." • [RF0200] → El operador podrá reasignar un siniestro a un perito diferente [párrafo 3] "...el siniestro es reasignado a otro perito..." • [RF0201] → El operador podrá consultar los peritos asociados a un siniestro [párrafo 3] "...saber qué peritos han estado implicados en dicho siniestro..." • [RF0300] → El gerente podrá registrar un nuevo gremio • [RF0301] → El gerente podrá eliminar un gremio • [RF0302] → El gerente podrá registrar una tarea asociada a una aseguradora • [RF0303] → El gerente podrá eliminar una tarea asociada a una aseguradora • [RF0304] → El gerente podrá modificar una tarea asociada a una aseguradora • [RNF0300] → El sistema podrá clasificar las tareas por gremio
23 • [RF0305] → El gerente podrá modificar un gremio [párrafo 4] "...para servicios de pintura, albañilería y limpieza..." • [RF0400] → El operador podrá registrar un nuevo siniestro [párrafo 5] "...recibe avisos de los trabajos asignados..." • [RF0401] → El operador podrá registrar un nuevo contacto en un siniestro • [RF0402] → El operador podrá eliminar un contacto de un siniestro • [RF0403] → El operador podrá modificar un contacto de un siniestro • [RF0404] → El operador podrá consultar los contactos de un siniestro [párrafo 5] "...personas de contacto relacionadas con el siniestro..." • [RF0405] → El operador podrá guardar una copia del original del siniestro [párrafo 5] "...guarda una copia de la información original..." • [RF0500] → El gerente podrá registrar un nuevo operador • [RF0501] → El gerente podrá eliminar un operador • [RF0502] → El gerente podrá ver el perfil de un operador • [RF0503] → El operador podrá modificar su perfil • [RF0504] → El operador podrá ver su perfil [párrafo 6] "...Operadores..." • [RF0505] → El operador podrá registrar la llamada a un cliente [párrafo 6] "... contactan con los clientes..." • [RF0506] → El operador podrá registrar la llamada de un perito [párrafo 6] "... atienden a las llamadas de los peritos..." • [RF0507] → El gerente podrá registrar un nuevo operario • [RF0508] → El gerente podrá eliminar un operario • [RF0509] → El gerente podrá ver el perfil de un operario • [RF0510] → El gerente podrá modificar el perfil de un operario • [RF0511] → El operador podrá ver el perfil de un operario [párrafo 6] "... Operarios..." • [RF0512] → El administrador podrá registrar un nuevo gerente • [RF0513] → El gerente podrá eliminar su perfil • [RF0514] → El gerente podrá editar su perfil • [RF0515] → El gerente podrá ver su perfil [párrafo 6] "... Gerente..."
24 • [RNF0500] → El sistema podrá clasificar los trabajadores por tipo [párrafo 6] "... En nuestra plantilla disponemos de distintos tipos de trabajadores..." • [RNF0501] → El gerente dispondrá de la funcionalidad de operador [párrafo 6] "... tareas de un operador además de otras propias de su cargo..." • [RF0600] → El gerente podrá generar una nueva jornada laboral • [RF0601] → El gerente podrá agregar un grupo a una jornada laboral • [RF0602] → El gerente podrá agregar un operario a un grupo [párrafo 7] "... Se formarán grupos de trabajo de uno o más operarios..." • [RF0604] → El operador podrá asignar tareas de un siniestro a una cita • [RF0605] → El operador podrá asignar una cita a un grupo de trabajo [párrafo 7] "... a cada grupo se le pueda asignar una relación de trabajos a realizar..." • [RF0606] → El operador podrá consultar el conductor de un vehículo dada una fecha [párrafo 7] "... Es necesario saber quién usa cada vehículo en todo momento..." • [RF0607] → El operador podrá consultar el progreso de la jornada laboral • [RF0608] → El gerente podrá eliminar un grupo de una jornada laboral [párrafo 7] "... progreso de la jornada laboral..." • [RF0700] → El operador podrá registrar una avería sobre un vehículo [párrafo 8] "...registrar las averías que se produzcan..." • [RF0701] → El operador podrá registrar una multa sobre un vehículo [párrafo 8] "...las multas recibidas..." • [RF0702] → El operador podrá registrar el repostaje de un vehículo • [RF0703] → El operador podrá guardar copia de la factura de un repostaje [párrafo 8] "...gasto en combustible..." • [RF0704] → El gerente podrá actualizar la caducidad de la I.T.V. de un vehículo • [RNF0700] → El sistema notificara la expiación de la I.T.V. de un vehículo [párrafo 8] "...sistema de alarmas que avise de la caducidad de la I.T.V...."
25 • [RF0705] → El gerente podrá actualizar la caducidad del seguro de un vehículo • [RF0706] → El gerente podrá registrar un nuevo vehículo • [RF0707] → El gerente podrá modificar la información de un vehículo • [RF0708] → El gerente podrá eliminar un vehículo • [RNF0701] → El sistema notificara la expiación del seguro de un vehículo [párrafo 8] "...seguro de cada vehículo..." • [RF0800] → El gerente podrá registrar una compra de material • [RF0801] → El gerente podrá consultar el gasto mensual en materiales [párrafo 9] "...gastos mensuales en material..." • [RF0802] → El gerente podrá guardar la factura de una compra de material [párrafo 9] "...guardando copia de las facturas con su fecha e importe..." • [RF0900] → El operador podrá registrar la llamada de un cliente [párrafo 10] "...atender a las llamadas de los clientes..." • [RF0901] → El operador podrá concertar una cita con un cliente [párrafo 10] "...concretar una cita..." • [RF0902] → El operador podrá retrasar una cita • [RF0903] → El operador podrá registrar la llamada a un perito [párrafo 10] "...avisarán a los operarios de posibles cambios en la planificación..." • [RF1000] → El operador podrá localizar un siniestro [párrafo 11] "...localización del siniestro correspondiente..." • [RF1001] → El operador podrá consultar un siniestro dado su número de siniestro [párrafo 11] "...localizar rápidamente su número de siniestro..." • [RF1002] → El operador podrá ver un listado de siniestros dado un número de póliza [párrafo 11] "...pero si sabe cuál es su número de póliza..." • [RF1003] → El operador podrá ver un listado de siniestros dados unos datos personales [párrafo 11] "...datos personales..."
32 • [RNF1807] → El sistema asignara el estado facturado a los siniestros cerrados que hayan sido aprobados para su facturación [párrafo 19] "... siniestros cerrados que hayan sido aprobados para su facturación..." • [RNF1808] → El sistema asignara el estado cobrado a los siniestros facturados y marcados como cobrado [párrafo 19] "... siniestros facturados de los cuales se haya recibido el importe facturado..." • [RF1900] → El gerente podrá facturar un siniestro [párrafo 20] "... El gerente podrá facturar los siniestros cerrados..." • [RF1901] → El gerente podrá anotar la fecha del cobro de un siniestro [párrafo 20] "... anotando la fecha de su cobro..." • [RF1902] → El gerente podrá asignar un albarán a un siniestro [párrafo 20] "... Los siniestros facturados pueden ir vinculados a un albarán..." • [RF1903] → El gerente podrá ver el historial completo de un siniestro [párrafo 20] "... acceder de forma sencilla el historial de un siniestro..." • [RF1904] → El gerente podrá ver la información relevante del siniestro [párrafo 20] "... resumen de la información relevante..." • [RF1905] → El gerente podrá ver la lista de eventos de un siniestro [párrafo 20] "... secuencia de eventos relacionados con el mismo..." • [RF2000] → El gerente podrá registrar una nueva nomina asociada a un trabajador • [RF2001] → El gerente podrá editar la nómina de un trabajador [párrafo 21] "... debe tenerse un registro de las nóminas..." • [RF2002] → El gerente podrá agregar la copia del original a una nomina [párrafo 21] "... copia del documento original..." • [RF2003] → El gerente podrá actualizar el estado el pago de una nomina [párrafo 21] "... estado de los pagos..." • [RF2004] → El gerente podrá conocer los periodos de actividad de un empleado [párrafo 21] "... saber en qué periodos han estado activos en la empresa..." • [RF2005] → El gerente podrá asignar una cita a una subcontrata
33 [párrafo 21] "... alguna de las tareas se recurre a la subcontrata de los servicios..." • [RF2006] → El gerente podrá registrar una nueva subcontrata [párrafo 21] "... almacenar la información de dicha empresa..." • [RF2007] → El gerente podrá agregar una factura de subcontratada a un siniestro • [RF2008] → El gerente podrá eliminar una subcontrata • [RF2009] → El gerente podrá ver la información de una subcontrata • [RF2010] → El gerente podrá actualizar la información de una subcontrata [párrafo 21] "... una copia de la factura..." A continuación, se muestra un listado de casos de uso, junto con sus identificadores y el identificador del requisito que se pretende cubrir. Se agruparán estos casos de uso en función del actor al que van dirigidos: [A600] Administrador • [CU0000] - Registrar un nuevo gerente ([RF0512]) [A220] Gerente • [CU0100] - Eliminar su perfil ([RF0513]) • [CU0101] - Editar su perfil ([RF0514]) • [CU0102] - Ver su perfil ([RF0515]) • [CU0200] - Registrar un nuevo gremio ([RF0300]) • [CU0201] - Eliminar un gremio ([RF0301]) • [CU0202] - Modificar un gremio ([RF0305]) • [CU0300] - Registrar una tarea asociada a una aseguradora ([RF0302]) • [CU0301] - Asignar una dificultad a una determinada tarea ([RF1201]) • [CU0302] - Eliminar una tarea asociada a una aseguradora ([RF0303]) • [CU0303] - Modificar una tarea asociada a una aseguradora ([RF0304]) • [CU0304] - Modificar la dificultad de una determinada tarea ([RF1202]) • [CU0400] - Registrar una nueva nomina asociada a un trabajador ([RF2000]) • [CU0401] - Editar la nómina de un trabajador ([RF2001]) • [CU0402] - Agregar la copia del original a una nómina ([RF2002])
34 • [CU0403] - Actualizar el estado el pago de una nómina ([RF2003]) • [CU0404] - Conocer los periodos de actividad de un trabajador ([RF2004]) • [CU0500] - Registrar un nuevo operador ([RF0500]) • [CU0501] - Eliminar un operador ([RF0501]) • [CU0502] - Ver el perfil de un operador ([RF0502]) • [CU0600] - Registrar una compra de material ([RF0800]) • [CU0601] - Guardar la factura de una compra de material ([RF0802]) • [CU0602] - Consultar el gasto mensual en material ([RF0801]) • [CU0700] - Registrar un nuevo operario ([RF0507]) • [CU0701] - Modificar el perfil de un operario ([RF0510]) • [CU0702] - Ver el perfil de un operario ([RF0509]) • [CU0703] - Agregar un gremio a los gremios en los que tiene experiencia un operario ([RF1200]) • [CU0704] - Designar el nivel de un operario en un gremio ([RF1203]) • [CU0705] - Modificar el nivel de un operario en un gremio ([RF1204]) • [CU0706] - Eliminar un operario ([RF0508]) • [CU0800] - Registrar un nuevo vehículo ([RF0706]) • [CU0801] - Modificar la información de un vehículo ([RF0707]) • [CU0802] - Eliminar un vehículo ([RF0708]) • [CU0803] - Actualizar la caducidad de la I.T.V. de un vehículo ([RF0704]) • [CU0804] - Actualizar la caducidad del seguro de un vehículo ([RF0705]) • [CU0900] - Generar una nueva jornada laboral ([RF0600]) • [CU0901] - Agregar un nuevo grupo a una jornada laboral ([RF0601]) • [CU0902] - Agregar un operario a un grupo de trabajo ([RF0602]) • [CU0903] - Asignar un vehículo a un grupo de trabajo ([RF1300]) • [CU0904] - Asignar un conductor a un grupo de trabajo ([RF1301]) • [CU0905] - Eliminar un grupo de una jornada laboral ([RF0608]) • [CU1000] - Cambiar el estado de un trabajo a ampliado ([RF1708]) • [CU1001] - Añadir un nuevo trabajo ampliado a un siniestro ([RF1709]) • [CU1002] - Ampliar un trabajo ya existente en un siniestro ([RF1710]) • [CU1003] - Guardar la fecha de la ampliación de un trabajo ([RF1711]) • [CU1004] - Cambiar el estado de un trabajo a anulado ([RF1707])
35 • [CU1100] - Replanificar un siniestro ([RF1501]) • [CU1101] - Establecer una nueva fecha limite a un siniestro replanificado ([RF1804]) • [CU1102] - Cerrar un siniestro ([RF1800]) • [CU1103] - Devolver un siniestro ([RF1801]) • [CU1104] - Asignar un albarán a un siniestro ([RF1902]) • [CU1105] - Facturar un siniestro ([RF1900]) • [CU1106] - Marcar como cobrado un siniestro ([RF1802]) • [CU1107] - Anotar la fecha del cobro de un siniestro ([RF1901]) • [CU1108] - Ver un listado de siniestros pendientes de cobro ([RF1803]) • [CU1109] - Ver la información relevante del siniestro ([RF1904]) • [CU1110] - Ver el historial completo de un siniestro ([RF1903]) • [CU1112] - Ver la lista de eventos de un siniestro ([RF1905]) • [CU1200] - Registrar una nueva subcontrata ([RF2006]) • [CU1201] - Agregar una factura de subcontratada a un siniestro ([RF2007]) • [CU1202] - Asignar una cita a una subcontrata ([RF2005]) • [CU1203] - Eliminar una subcontrata ([RF2008]) • [CU1204] - Ver la información de una subcontrata ([RF2009]) • [CU1205] - Actualizar la información de una subcontrata ([RF2010]) [A210] Operador • [CU1300] - Ver su perfil ([RF0504]) • [CU1301] - Modificar su perfil ([RF0503]) • [CU1302] - Ver el perfil de un operario ([RF0511]) • [CU1303] - Registrar una póliza en el sistema ([RF0100]) • [CU1304] - Registrar una propiedad en el sistema ([RF0101]) • [CU1305] - Registrar un cliente en el sistema ([RF0102]) • [CU1400] - Ver un ranking de siniestros recomendados ([RF1600]) • [CU1401] - Ver un listado de siniestros ordenado por fecha ([RF1500]) • [CU1402] - Ver un listado de siniestros ordenado por tipo de cliente ([RF1503])
36 • [CU1403] - Ver un listado de siniestros ordenado por proximidad ([RF1504]) • [CU1404] - Ver un resumen con el estado de un siniestro ([RF1103]) • [CU1405] - Consultar la ubicación de un siniestro ([RF1601]) • [CU1406] - Acceder desde un siniestro a la póliza ([RF1101]) • [CU1407] - Acceder desde la póliza al listado de siniestros ([RF1102]) • [CU1500] - Registrar un nuevo siniestro ([RF0400]) • [CU1501] - Guardar una copia del original del siniestro ([RF0405]) • [CU1502] - Registrar un nuevo contacto en un siniestro ([RF0401]) • [CU1503] - Modificar un contacto de un siniestro ([RF0403]) • [CU1504] - Consultar los contactos de un siniestro ([RF0404]) • [CU1505] - Eliminar un contacto de un siniestro ([RF0402]) • [CU1506] - Consultar los peritos asociados a un siniestro ([RF0201]) • [CU1507] - Agregar un recurso a un siniestro ([RF1700]) • [CU1508] - Agregar una factura a un siniestro ([RF1702]) • [CU1509] - Agregar una foto a un siniestro ([RF1701]) • [CU1510] - Reasignar un siniestro a un perito diferente ([RF0200]) • [CU1600] - Localizar (identificar) un siniestro ([RF1000]) • [CU1601] - Consultar un siniestro dado su número de siniestro ([RF1001]) • [CU1602] - Ver un listado con el resultado de la búsqueda ([RF1100]) • [CU1603] - Ver un listado de siniestros dado un número de póliza ([RF1002]) • [CU1604] - Ver un listado de siniestros dados datos personales ([RF1003]) • [CU1605] - Ver un listado de siniestros dado un nombre completo ([RF1004]) • [CU1606] - Ver un listado de siniestros dado un teléfono ([RF1006]) • [CU1607] - Ver un listado de siniestros dada una dirección ([RF1005]) • [CU1700] - Registrar la llamada a un cliente ([RF0505]) • [CU1701] - Registrar la llamada de un cliente ([RF0900]) • [CU1702] - Concertar una cita con un cliente ([RF0901]) • [CU1703] - Retrasar una cita ([RF0902]) • [CU1704] - Registrar un intento de concertar una cita ([RF1502])
37 • [CU1705] - Ver un listado de grupos disponibles para una cita ([RF1602]) • [CU1706] - Asignar una cita a un grupo de trabajo ([RF0605]) • [CU1707] - Asignar tareas de un siniestro a una cita ([RF0604]) • [CU1708] - Consultar la experiencia del conductor en una zona ([RF1604]) • [CU1709] - Consultar grupos de trabajo de distintas jornadas ([RF1603]) • [CU1710] - Registrar la llamada a un perito ([RF0903]) • [CU1711] - Registrar la llamada de un perito ([RF0506]) • [CU1712] - Localizar y consultar una factura ([RF1105]) • [CU1713] - Localizar y consultar un albarán ([RF1104]) • [CU1800] - Consultar el progreso de la jornada laboral ([RF0607]) • [CU1801] - Ver qué grupo de trabajo ha asistido a una cita ([RF1400]) • [CU1802] - Ver qué operarios han asistido a una cita ([RF1401]) • [CU1803] - Ver qué tareas se han realizado en una cita ([RF1402]) • [CU1900] - Actualizar el estado de una tarea ([RF1703]) • [CU1901] - Cambiar el estado de una tarea a pendiente ([RF1704]) • [CU1902] - Cambiar el estado de una tarea a en proceso ([RF1705]) • [CU1903] - Cambiar el estado de una tarea a finalizada ([RF1706]) • [CU2000] - Consultar el conductor de un vehículo dada una fecha ([RF0606]) • [CU2001] - Registrar una avería sobre un vehículo ([RF0700]) • [CU2002] - Registrar una multa sobre un vehículo ([RF0701]) • [CU2003] - Registrar el repostaje de un vehículo ([RF0702]) • [CU2004] - Guardar copia de la factura de un repostaje ([RF0703]) • [CX1300] - Registrar una localidad en el sistema Sistema • [CU2100] - Asignar el estado pendiente de cita a los nuevos siniestros ([RNF1800]) • [CU2101] - Mantener con el estado pendiente de cita a los siniestros que nos han sido asignados, pero aún no tienen una cita concertada ([RNF1801]) • [CU2102] - Alertar sobre siniestros sin cita aproximándose al mes de asignación ([RNF1501])
38 • [CU2103] - Asignar el estado en proceso a los siniestros que, teniendo alguna cita concertada, no tiene todas sus tareas anuladas o finalizadas ([RNF1802]) • [CU2104] - Asignar el estado finalizado a los siniestros que tengan todas sus tareas finalizadas ([RNF1803]) • [CU2105] - Asignar el estado devuelto a los siniestros que, teniendo todas sus tareas anuladas, han sido aprobados para su devolución ([RNF1804]) • [CU2106] - Asignar el estado parcialmente finalizado a los siniestros que, sin estar finalizados o devueltos, tienen todas sus tareas anuladas o finalizadas ([RNF1805]) • [CU2107] - Asignar el estado cerrado a los siniestros finalizados o parcialmente finalizados que hayan sido aprobados para su cierre ([RNF1806]) • [CU2108] - Asignar el estado facturado a los siniestros cerrados que hayan sido aprobados para su facturación ([RNF1807]) • [CU2109] - Asignar el estado cobrado a los siniestros facturados y marcados como cobrado ([RNF1808]) • [CU2200] - Aumentar la eficiencia en la gestión de los siniestros ([RNF0000]) • [CU2201] - Verificar que no exista un par póliza/propiedad duplicado ([RNF0100]) • [CU2300] - Clasificar las tareas por gremio ([RNF0300]) • [CU2301] - Clasificar la dificultad de los trabajos ([RNF1200]) • [CU2302] - Clasificar las capacidades del trabajador ([RNF1201]) • [CU2303] - Clasificar los trabajadores por tipo ([RNF0500]) • [CU2304] - Ofrecer al gerente la funcionalidad de operador ([RNF0501]) • [CU2400] - Reducir los desplazamientos a diferentes localidades ([RNF1506]) • [CU2401] - Registrar el número de veces que un conductor ha acudido a una localidad ([RNF1600]) • [CU2402] - Comprobar que cada grupo tenga conductor ([RNF1300]) • [CU2403] - Notificar la expiación del seguro de un vehículo ([RNF0701]) • [CU2404] - Notificar la expiación de la I.T.V. de un vehículo ([RNF0700])
39 • [CU2500] - Replanificar un siniestro varias veces ([RNF1502]) • [CU2501] - Guardar un historial de replanificaciones ([RNF1503]) • [CU2502] - Guardar fecha y copia del original en tareas ampliadas ([RNF1700]) • [CU2503] - Permitir concertar varias citas sobre un siniestro ([RNF1400]) • [CU2600] - Priorizar la atención de ciertos siniestros ([RNF1504]) • [CU2601] - Ordenar los siniestros en base a ciertos criterios ([RNF1500]) • [CU2602] - Flexibilizar las prioridades ([RNF1505]) • [CU2603] - Alertar si la carga de trabajo se desequilibra ([RNF1601]) Pasamos a mostrar un listado con las entidades identificadas junto con sus identificadores: • [E0000] Aseguradora o [E0010] Perito • [E0100] Cliente o [E0110] Póliza ▪ [E0111] Propiedad • [E0200] Siniestro o [E0210] Tarea o [E0220] Contacto o [E0230] Replanificación o [E0240] Participante o [E0250] Reasignación • [E0300] Trabajo o [E0310] Gremio • [E0400] Recurso o [E0410] Factura o [E0420] Adjunto • [E0500] Jornada o [E0510] Grupo ▪ [E0511] Conductor ▪ [E0512] Integrante • [E0600] Trabajador
40 o [E0610] Nomina o [E0620] Operador o [E0630] Operario ▪ [E0631] Capacidad • [E0700] Vehículo o [E0710] Mantenimiento • [E0800] Evento o [E0810] Llamada o [E0820] Cita ▪ [E0821] TareasCita • [E0900] Localidad o [E0910] LocalidadesVisitadas • [E1000] Multiservicios • [E1100] Subcontrata o [E1110] RecursosSubcontrata • [E1200] Material Por último, se muestra un listado de relaciones entre entidades. Para cada una de estas relaciones se mostrarán las entidades implicadas junto con sus identificadores, la cardinalidad de la relación y un fragmento de texto del adjunto “Informacion del cliente (Relaciones).pdf”, indicando el párrafo en el que se encuentra dicho fragmento: • [REL0000] consiste [E0300] Trabajo (0..N) → (1) [E0210] Tarea [párrafo 1] "...trabajos efectuados a las compañías aseguradoras..." • [REL0100] contacta [E0000] Aseguradora (0..N) → (1) [E0100] Cliente [párrafo 2] "...Cada compañía aseguradora dispone de su propia bolsa de clientes..." • [REL0101] asegura [E0110] Póliza (1) → [E0111] Propiedad [párrafo 2] "...una póliza sobre una determinada propiedad..."
41 • [REL0102] contrata [E0100] Cliente (0..N) → (1) [E0110] Póliza [párrafo 2] "...un mismo cliente tener varias pólizas activas en una misma aseguradora si se están asegurando diferentes propiedades..." • [REL0200] dispone [E0000] Aseguradora (0..N) → (1) [E0010] Perito [párrafo 3] "...lo notifica a la compañía aseguradora y esta envía a un técnico, habitualmente llamado perito..." • [REL0201] genera [E0200] Siniestro (1) → (0..N) [E0110] Póliza [párrafo 3] "...siniestro, con la información del cliente, su número de póliza..." • [REL0202] redacta [E0200] Siniestro (1) → (0..N) [E0010] Perito [párrafo 3] "...perito asociado..." • [REL0203] implica [E0200] Siniestro (0..N) → (1) [E0210] Tarea [párrafo 3] "...lista de tareas a realizar..." • [REL0204] reasigna • [E0200] Siniestro (0..N) → (1) [E0250] Reasignación [E0250] Reasignación (1) → (0..M) [E0010] Perito [párrafo 3] "... peritos han estado implicados en dicho siniestro..." • [REL0205] participa [E0200] Siniestro (0..N) → (1) [E0240] Participante [E0240] Participante (1) → (0..M) [E1000] Multiservicios [párrafo 3] "...un mismo siniestro se pueden ver implicadas varias compañías multiservicios..." • [REL0300] pacta [E0000] Aseguradora (0..N) → (1) [E0300] Trabajo [párrafo 4] "...la compañía aseguradora dispone de una serie de acuerdos con las compañías multiservicios en los cuales se pactan los precios de los servicios según el tipo y magnitud del trabajo..."
48 • [CU1406] - Acceder desde un siniestro a la póliza • [CU1407] - Acceder desde la póliza al listado de siniestros • [CU1500] - Registrar un nuevo siniestro • [CU1501] - Guardar una copia del original del siniestro • [CU1502] - Registrar un nuevo contacto en un siniestro • [CU1503] - Modificar un contacto de un siniestro • [CU1504] - Consultar los contactos de un siniestro • [CU1505] - Eliminar un contacto de un siniestro • [CU1506] - Consultar los peritos asociados a un siniestro • [CU1507] - Agregar un recurso a un siniestro • [CU1508] - Agregar una factura a un siniestro • [CU1509] - Agregar una foto a un siniestro • [CU1510] - Reasignar un siniestro a un perito diferente • [CU1600] - Localizar (identificar) un siniestro • [CU1601] - Consultar un siniestro dado su número de siniestro • [CU1602] - Ver un listado con el resultado de la búsqueda • [CU1603] - Ver un listado de siniestros dado un número de póliza • [CU1604] - Ver un listado de siniestros dados datos personales • [CU1605] - Ver un listado de siniestros dado un nombre completo • [CU1606] - Ver un listado de siniestros dado un teléfono • [CU1607] - Ver un listado de siniestros dada una dirección • [CU1900] - Actualizar el estado de una tarea • [CU1901] - Cambiar el estado de una tarea a pendiente • [CU1902] - Cambiar el estado de una tarea a en proceso • [CU1903] - Cambiar el estado de una tarea a finalizada • [CX1300] - Registrar una localidad en el sistema • [CU2100] - Asignar el estado pendiente de cita a los nuevos siniestros • [CU2101] - Mantener con el estado pendiente de cita a los siniestros que nos han sido asignados, pero aún no tienen una cita concertada • [CU2103] - Asignar el estado en proceso a los siniestros que, teniendo alguna cita concertada, no tiene todas sus tareas anuladas o finalizadas
49 • [CU2104] - Asignar el estado finalizado a los siniestros que tengan todas sus tareas finalizadas • [CU2105] - Asignar el estado devuelto a los siniestros que, teniendo todas sus tareas anuladas, han sido aprobados para su devolución • [CU2106] - Asignar el estado parcialmente finalizado a los siniestros que, sin estar finalizados o devueltos, tienen todas sus tareas anuladas o finalizadas • [CU2107] - Asignar el estado cerrado a los siniestros finalizados o parcialmente finalizados que hayan sido aprobados para su cierre • [CU2108] - Asignar el estado facturado a los siniestros cerrados que hayan sido aprobados para su facturación • [CU2109] - Asignar el estado cobrado a los siniestros facturados y marcados como cobrado • [CU2200] - Aumentar la eficiencia en la gestión de los siniestros • [CU2500] - Replanificar un siniestro varias veces • [CU2501] - Guardar un historial de replanificaciones • [CU2503] - Permitir concertar varias citas sobre un siniestro En esta iteración se abordó por tanto una se las secciones críticas del proyecto, el registro del siniestro. Se tomo como decisión no utilizar la dirección dada por el usuario a la hora de registrar las direcciones de las propiedades, en su lugar se consultará en Google la dirección dada y se ofrecerá una lista de sugerencias en base a las respuestas de Google. La dirección que finalmente se guardará será la de dicha sugerencia. Ilustración 1: ejemplo de sugerencia recuperada de Google.
50 Ilustración 2: ejemplo de código con el que consultar una dirección con la API de Google. En el código anterior (ilustración 2) se muestra como se ha accedido a la API de Google para obtener una lista de resultados en base a la dirección dada por el usuario y como interpretar la información obtenida de la API.
51 Esta misma estrategia se utilizó en el registro del siniestro a la hora de registrar la dirección de la propiedad asegurada y/o afectada, con el fin de mantener un estándar en las direcciones almacenadas en el sistema. Ilustración 3: ejemplo de dirección sugerida a la hora de registrar un siniestro. Otro punto destacable de la implementación del registro del siniestro y su consulta es la posibilidad de almacenar un fichero, y según su tipo, incluso mostrar una vista previa del mismo. Ilustración 4: ejemplo de vista previa y almacenamiento de un fichero (PDF). Ilustración 5: ejemplo de código para la previsualización de un PDF.
52 En el código anterior (ilustración 5), podemos ver como se ha mostrado la vista previa de los ficheros PDF. Ilustración 6: ejemplo de código para la lectura de un fichero.
53 En este código (ilustración 6), podemos ver como se ha realizado la lectura de los ficheros. 4.3. Tercera iteración A continuación, se muestra un listado con los casos de uso abordados en esta iteración: • [CU0900] - Generar una nueva jornada laboral • [CU0901] - Agregar un nuevo grupo a una jornada laboral • [CU0902] - Agregar un operario a un grupo de trabajo • [CU0903] - Asignar un vehículo a un grupo de trabajo • [CU0904] - Asignar un conductor a un grupo de trabajo • [CU1400] - Ver un ranking de siniestros recomendados • [CU1401] - Ver un listado de siniestros ordenado por fecha • [CU1403] - Ver un listado de siniestros ordenado por proximidad • [CU1700] - Registrar la llamada a un cliente • [CU1701] - Registrar la llamada de un cliente • [CU1702] - Concertar una cita con un cliente • [CU1704] - Registrar un intento de concertar una cita • [CU1705] - Ver un listado de grupos disponibles para una cita • [CU1706] - Asignar una cita a un grupo de trabajo • [CU1707] - Asignar tareas de un siniestro a una cita • [CU1709] - Consultar grupos de trabajo de distintas jornadas • [CU1710] - Registrar la llamada a un perito • [CU1711] - Registrar la llamada de un perito • [CU1801] - Ver qué grupo de trabajo ha asistido a una cita • [CU1802] - Ver qué operarios han asistido a una cita • [CU1803] - Ver qué tareas se han realizado en una cita • [CU2400] - Reducir los desplazamientos a diferentes localidades • [CU2402] - Comprobar que cada grupo tenga conductor • [CU2600] - Priorizar la atención de ciertos siniestros Como podemos observar, en esta última iteración se abordó la segunda sección critica del proyecto, el asistente de citas. De esta parte se pueden destacar varias
54 partes. Una de ellas es el calendario implementado para representar las jornadas registradas. Ilustración 7: ejemplo de calendario con una jornada registrada. Ilustración 8: ejemplo de código para mostrar el calendario.
55 En el código anterior (ilustración 8), podemos ver el método implementado para mostrar el calendario. Otro punto interesante implementado en esta iteración es la impresión de las citas. Ilustración 9: ejemplo de impresión de una cita registrada. Ilustración 10: ejemplo de código para la impresión de la cita I.
56 Ilustración 11: ejemplo de código para la impresión de la cita II. Por último, para la obtención de los siniestros sugeridos fue requerido el uso de un modelo de aprendizaje. Para ello el tutor del proyecto facilitó una librería junto con un ejemplo de uso de esta. La librería en cuestión es “Weka”, la cual dispone de un conjunto de algoritmos entre los que se encuentra “SimpleKMeans”, el cual permite establecer unos centroides juntos con su posición y clasificación en base a unos puntos dados ya clasificados. Permite establecer el número de conjuntos a formar y comprobar el error del modelo ofrecido como respuesta. Utilizando consultas JPQL sobre la base de datos del proveedor, se puede obtener un listado de siniestros a agrupar, los cuales se agruparán en base a su ubicación utilizando “SimpleKMeans”. Este proceso se repetirá en siete ocasiones, en las que se establecerán de dos a ocho grupos y se dará como solución la que tenga menor error cuadrático medio. Ilustración 12: ejemplo de agrupación de siniestros por zona I.
57 Ilustración 13: ejemplo de agrupación de siniestros por zona II. Ilustración 14: ejemplo de código para la agrupación de siniestros I.
64
65 7. Referencias ➢ referencia 1: "https://www.bootsfaces.net/" ➢ referencia 2: "https://www.w3schools.com" ➢ referencia 3: "https://www.w3schools.com/html/default.asp" ➢ referencia 4: "https://www.w3schools.com/css/default.asp" ➢ referencia 5: "https://www.w3schools.com/bootstrap4/default.asp" ➢ referencia 6: "https://www.w3schools.com/js/default.asp" ➢ referencia 7: "https://www.w3schools.com/jquery/default.asp" ➢ referencia 8: "https://www.w3schools.com/angular/default.asp" ➢ referencia 9: "https://rawgit.com/emn178/js-sha3/master/build/sha3.min.js" ➢ referencia 10: "https://material.io/" ➢ referencia 11: "https://www.cs.waikato.ac.nz/~ml/weka/" ➢ referencia 12: "http://weka.sourceforge.net/doc.stable/"
66
67 8. Anexos
68
69 ReForms Manual de usuario
70
71 Introducción Bienvenidos a la aplicación web “ReForms”. En el presente manual de usuario trataremos de explicar de forma clara y concisa como utilizar dicha aplicación. Esta herramienta consta de dos componentes, un proveedor en el que almacenar la información y un cliente encargado de acceder al proveedor y mostrar la información solicitada. Este manual se centrará íntegramente en el uso del cliente, ya que el proveedor debe ser invisible para el usuario una vez implantado el sistema.
72
73 Índice 1. Acceso 75 2. Siniestros 77 2.1. Buscador 77 2.2. Consulta del siniestro 81 2.2.1. Información del siniestro 81 2.2.2. Tareas 84 2.2.3. Eventos 87 2.2.4. Información adicional 90 2.2.4.1. Participantes 90 2.2.4.2. Historial de replanificaciones 91 2.2.4.3. Historial de reasignaciones 91 2.2.4.4. Recursos 92 2.2.5. Transición de los estados del siniestro 93 2.3. Historial de la póliza 95 2.4. Registro del siniestro 96 2.4.1. Paso 1 96 2.4.2. Paso 2 97 2.4.2.1. Asegurado 98 2.4.2.2. Propiedad 99 2.4.3. Paso 3 100 3. Jornadas 103 3.1. Calendario 103 3.2. Siniestros sugeridos 108
80 Figura 13: filtro de búsqueda por dirección. Una vez introducidos los campos requeridos de la dirección, se nos mostrará una lista con direcciones sugeridas, es decir, resultados obtenidos de Google Maps. Si seleccionamos una de dichas sugerencias, se nos mostrará un mapa con la dirección encontrada en Google (figuras 14 y 15). Si seleccionamos esa dirección como filtro, la búsqueda se realizará inmediatamente. Figura 14: ejemplo de sugerencias I. Figura 15: ejemplo de sugerencias II. Podemos combinar los tres grupos de filtros para afinar la búsqueda, es decir, podemos filtrar por aseguradora, estado e información de forma simultánea. Una vez localizado el siniestro buscado, podremos acceder al mismo. En caso de no estar registrado, podremos pulsar el botón “nuevo” y agregar el nuevo siniestro al sistema.
81 2.2. Consulta del siniestro Al acceder a un siniestro concreto, se nos mostrará una ventana con cuatro secciones en las que agrupar la información. En un principio la sección “información del siniestro” se encontrará expandida y las demás secciones contraídas. Para expandir/contraer una sección, basta con hacer clic sobre su cabecera (figura 16). Figura 16: ventana con la información del siniestro. 2.2.1. Información del siniestro En la sección “Información del siniestro” se nos mostrará en primer lugar: • Número de siniestro: el número de siniestro. • Fecha de registro/replanificación: fecha en la que el siniestro fue registrado en el sistema. En el caso de que el siniestro sea replanificado, ente campo pasará a mostrar la fecha replanificada. • Estado: el estado actual del siniestro. • Albarán: permanecerá vacío hasta que se facture el siniestro. En el proceso de facturación del siniestro se le podrá asignar un número de albarán, el cual aparecerá reflejado en este campo. • Perito actual: el perito encargado de supervisar el siniestro en este momento. • Ultima reasignación: se mostrará la fecha en la que el siniestro fue reasignado a otro perito por última vez. En caso de no haber sido reasignado, este campo permanecerá oculto.
82 • Perito original: se mostrará el nombre del perito asignado originalmente al siniestro. Como en el campo anterior, si el siniestro no ha sido reasignado este campo permanecerá oculto. • Original: se mostrará el nombre del fichero .pdf original enviado por la compañía aseguradora. A la derecha del nombre se dispone de un botón de descarga con el que poder descargar el original. • Afectado: se mostrará la dirección de la propiedad afectada en los siniestros en los que el afectado no es el propio asegurado. Posteriormente se nos mostrará una ficha con la información de la póliza asociada al siniestro: • Logo: en caso de disponer de una imagen con el logotipo de la aseguradora, se mostrará logotipo, de no ser asi se mostrará el nombre de la aseguradora. • Número de póliza: el número de póliza. • Datos del asegurado: o Tipo de cliente: el tipo de cliente de entre tres tipos posibles: normal, preferente o VIP. o Nombre: el nombre completo del cliente. o Teléfono: el/los teléfono/s del cliente. • Propiedad asegurada: o Localidad: el nombre de la localidad y código postal de la propiedad asegurada. o Dirección: la dirección completa de la propiedad asegurada. • Mapa: mapa obtenido de Google Maps indicando la ubicación de la propiedad asegurada. Por último, tendremos un listado con los contactos del siniestro (figura 17). En caso de querer agregar un nuevo contacto al siniestro, podremos hacerlo con el botón “nuevo” que se encuentra bajo el listado de contactos. Este nos mostrará un formulario en el que introducir los datos del contacto, de los cuales solo será obligatorio el número de teléfono (figura 18).
83 Figura 17: sección "Información del siniestro". Figura 18: agregar un nuevo contacto I.
84 Una vez introducida la información del contacto, y si el/los número/s de teléfono son válidos, se activará el botón aceptar, permitiéndonos guardar la información del contacto (figura 19). Figura 19: agregar un nuevo contacto II. Si finalmente pulsamos “aceptar”, el nuevo contacto será asociado al siniestro y aparecerá reflejado en la lista de contactos. Este nuevo contacto estará seleccionado y se nos mostrará una ficha con la información introducida. Además, podremos borrar el contacto pulsando el botón “borrar” que aparece en dicha ficha (figura 20). Figura 20: mostrar un contacto. En caso de querer borra el contacto, se nos informará de que se eliminará de forma permanente y se nos pedirá confirmación para continuar. Si confirmamos la acción, el contacto será eliminado. Figura 21: borrar un contacto. 2.2.2. Tareas En la sección “Tareas” se nos mostrará una lista de fichas con la información de las tareas a realizar, en caso de tener alguna tarea agregada (figura 22).
85 Figura 22: lista de tareas I (lista vacía). Podremos agregar nuevas tareas mediante el botón “nueva”, con lo que se nos mostrará una ficha con los campos necesarios para asignar la nueva tarea al siniestro (figura 23). Figura 23: nueva tarea I. En la cabecera de dicha ficha se nos dará la posibilidad de seleccionar el gremio de la tarea a agregar (figura 24) y su código de trabajo (figura 25). Una vez que se ha registrado una tarea con un código de trabajo concreto este código será eliminado de la lista de códigos. Figura 24: nueva tarea II. Figura 25: nueva tarea III. Una vez seleccionados gremio y código, podremos introducir la cantidad, con lo que, si el trabajo tiene un precio previamente acordado, el importe será calculado y mostrado en la ficha (figura 26). En caso de ser un trabajo sin precios pactados, se nos dará la posibilidad de introducir el precio manualmente.
86 Figura 26: nueva tarea IV. Tras introducir toda la información requerida y pulsar “aceptar”, la nueva tarea quedará registrada y se actualizará el listado de tareas (figura 27). Figura 27: lista de tareas II. Sobre dicha lista podremos seleccionar una de las tareas en concreto, con lo que se nos mostrarán una serie de botones adicionales con lo que actualizar el estado de la tarea, ampliarla (en futuras versiones de la aplicación) o borrarla (figura 28).
87 Figura 28: lista de tareas III. Si lo que deseamos es actualizar una tarea, el estado mostrado en la ficha de tareas pasará a ser editable, ofreciéndonos una lista de estados posibles de la tarea. Tambien será posible editar el campo observaciones. Figura 29: actualización de una tarea. En caso de querer eliminar una tarea registrada, bastara con seleccionar dicha área de la lista de tareas, pulsar el botón “borrar” y confirmar que deseamos eliminar la tarea en la ventana emergente de aviso (figura 30). Figura 30: borrado de una tarea. 2.2.3. Eventos En la sección “Eventos” se nos mostrará una lista de eventos registrados en el siniestro. Estos eventos podrán ser desde simples notas de texto realizando algún tipo de apunte sobre el siniestro (evento en sí), a llamadas realizadas o recibidas a alguno de los actores del siniestro o una cita concertada con algún grupo de trabajo para atender las tareas del siniestro. Por defecto esta lista se encontrará vacía y podremos registrar un nuevo evento pulsando en el botón “nuevo” de dicha lista (figura 31).
88 Figura 31: lista de eventos I (lista vacía). Al registrar un nuevo evento, se nos mostrará una ficha en la que indicar la fecha de este (que por defecto tomará el valor de la fecha actual), un campo en el que anotar comentarios sobre el evento y dos secciones en las que registrar una posible llamada asociada al evento o una posible cita (figuras 32). Figura 32: nuevo evento I. Para agregar una llamada al evento, pulsaremos el botón “llamada”, con lo que la ficha pasará a mostrarnos los campos necesarios para registrar una llamada (figura 33). Figura 33: nuevo evento II. Será necesario determinar la persona con la que contactar en la llamada y el estado de la llamada de entre los cuatro posibles: “llamada saliente”, “llamada entrante”, “llamada sin respuesta” o “llamada perdida”. En la lista de posibles personas aparecerán el cliente, peritos asociados al siniestro, grupos de trabajo que hayan acudido a alguna cita en dicho siniestro y los posibles contactos des siniestro. Tambien se nos dará la posibilidad de registrar un nuevo contacto desde esta misma ficha (figuras 34 y 35).
89 Figura 34: nuevo evento III. Figura 35: nuevo evento III. Una vez introducida toda la información sobre la llamada, podremos pulsar “aceptar” y la llamada pasará a formar parte de la información a registrar en el nuevo evento (figura 36). Explicaremos como agregar una cita a un evento posteriormente, de momento basta decir que al hacer clic en “cita”, se nos llevara a la pestaña “Jornadas”. Figura 36: nuevo evento IV. El nuevo evento registrado aparecerá en la lista de eventos del siniestro. Si seleccionamos uno de los eventos de esa lista, podremos ver la ficha con la información de dicho evento (figura 37). Figura 37: lista de eventos II.
96 Figura 58: historial de la póliza. 2.4. Registro del siniestro Como vimos en 2.1. Buscador (figura 4), en el buscador de siniestros dispondremos de un botón “nuevo” con el que registrar un nuevo siniestro. Esto nos llevará a la ventana de registro de un siniestro, en la cual iremos introduciendo la información de este en tres pasos. 2.4.1. Paso 1 En el primer paso tendremos que seleccionar la compañía aseguradora para poder introducir un numero de siniestro, en caso de tener una aseguradora predeterminada, será la que aparezca seleccionada inicialmente (figura 59). Figura 59: registro del siniestro, paso 1 I. Una vez seleccionada una aseguradora, veremos que la barra de progreso habrá avanzado y se nos permitirá introducir el número de siniestro. A medida que introduzcamos más información la barra de progreso irá indicando el progreso (figura 60).
97 Figura 60: registro del siniestro, paso 1 II. Si el número de siniestro introducido ya se encontrase ocupado con la aseguradora seleccionada, se nos informará de esta situación y se nos permitirá pasar a consultar directamente el siniestro registrado con ese número (figura 61). Figura 61: registro del siniestro, paso 1 III. Si el número de siniestro se encuentra disponible, se activará el botón “continuar”, con el que podremos ir al paso 2. 2.4.2. Paso 2 En este paso se nos pedirá introducir un número de póliza. Si el número de póliza introducido coincide con algún número de póliza ya registrado con esa aseguradora, se nos mostrará la información de la póliza y podremos pasar directamente al paso 3 (figura 62). Figura 62: registro del siniestro, paso 2 I. En caso de estar registrando un siniestro cuya póliza no ha sido registrada previamente en el sistema, se nos mostrarán los campos necesarios para registrar la misma dividimos en dos secciones, “Asegurado” y “Propiedad” (figura 63).
98 Figura 63: registrar siniestro, paso 2 II. 2.4.2.1. Asegurado En la sección “Asegurado” tendremos que introducir la información de la persona asegurada, tales como su nombre, apellidos, teléfonos de contacto y tipo (figura 64). Figura 64: registrar siniestro, paso 2 III. Al introducir la información del asegurado, se comprobará en el sistema si hay algún asegurado con datos similares a los proporcionado y se mostrará una lista de sugerencias con las coincidencias encontradas. Si pulsamos sobre una de estas sugerencias, podremos ver los datos del cliente y las pólizas asociadas a él (figura 65).
99 Figura 65: registrar siniestro, paso 2 IV. 2.4.2.2. Propiedad En la sección “Propiedad” tendremos que introducir la información de la propiedad asegurada, tales como su código postal, dirección, número y si es necesario piso. Debajo de estos campos aparecerá una tabla con las sugerencias encontradas para esa dirección. Junto con las coincidencias del sistema, se mostrarán las obtenidas al consultar consultará Google Maps (figura 66). Figura 66: registrar siniestro, paso 2 V. Si seleccionamos una de esas coincidencias, los campos de la propiedad se rellenarán con la información de la sugerencia y se mostrará un mapa con la ubicación de la propiedad y podremos ir al paso 3 (figura 67). Figura 67: registrar siniestro, paso 2 VI.
100 2.4.3. Paso 3 Finalmente, en el paso 3 tendremos que introducir la fecha de registro del siniestro, el perito original y el archivo enviado por la aseguradora para dar el aviso (figura 68). Figura 68: registrar siniestro, paso 3 I. Una vez completada la información del siniestro, la barra de progreso se verá completa y el botón “aceptar” estará habilitado. En caso de tratarse de un siniestro en el que existe una propiedad afectada diferente a la asegurada por la póliza, dispondremos de un botón “agregar” con el que agregar esa propiedad afectada (figura 69). Figura 69: registrar siniestro, paso 3 II. Para agregar la propiedad afectada se nos pedirá introducir su dirección, aunque esta vendrá inicializada como la de la propiedad asegurada y se nos ofrecerá una lista de sugerencias. Como sucedía en el paso 2, si seleccionamos una de estas sugerencias, la información de esta será cargada en los campos de la propiedad asegurada y se nos mostrará un mapa mostrando su ubicación (figuras 70 y 71).
101 Figura 70: registrar siniestro, paso 3 III. Figura 71: registrar siniestro, paso 3 IV. Tras aceptar la propiedad afectada, podremos ver un resumen de ella junto con el mapa que muestra su ubicación. Si detectamos algún error antes de guardar el siniestro, podremos pulsar en “cambiar” para volver a introducir la dirección de la propiedad afectada (figura 72). Figura 72: registrar siniestro, paso 3 V. Por último, con la información del siniestro completada podremos pulsar el botón “aceptar” y el siniestro será registrado en el sistema. Una vez registrado se nos mostrará en la ventana de consulta (2.2. Consulta del siniestro).
102
103 3. Jornadas La pestaña de jornadas nos ofrece un asistente de citas. Este se descompone en tres partes principales: el calendario, la lista de siniestros sugeridos y la cita (figura 73). Figura 73: asistente de citas. 3.1. Calendario Lo primero que encontraremos en el asistente de citas en un campo en el que seleccionar una fecha un calendario del mes seleccionado en el que aparecerán sombreadas las jornadas ya registradas. Bajo este calendario podremos ver el botón “nueva”, que nos permitirá agregar una nueva jornada de trabajo. Este botón estará inicialmente deshabilitado y solo se habilitará cuando tengamos seleccionado un dia del calendario en el que no exista una jornada registrada (figura 74). Figura 74: calendario I.
104 Para agregar una nueva jornada, no se requiere información adicional, simplemente seleccionar un dia libre y pulsar el botón “nueva” (figura 75). Figura 75: calendario II. Una vez registrada la nueva jornada, se actualizará el calendario quedando sombreado el dia correspondiente. Podremos ver los detalles de la jornada y la lista de grupos de trabajo (figura 76). Figura 76: calendario III. Si deseamos formar un nuevo grupo de trabajo para la jornada seleccionada, sólo tendremos que pulsar el botón “nuevo” bajo el listado de grupos. Se nos mostrará una ficha en la que determinar los integrantes del grupo y el vehículo que utilizarán. Figura 77: calendario IV.
105 Deberemos seleccionar un operario de la lista de integrantes (sólo se mostrarán los disponibles en esa jornada), una vez tengamos un operario seleccionado, podremos pulsar el botón “+” y el operario pasará a formar parte del grupo (figura 78). Figura 78: calendario V. Para poder finalizar con el registro del grupo de trabajo, deberemos seleccionar un conductor de la lista de integrantes. Los operarios con carné de conducir aparecerán con un icono a su izquierda semi transparente, al pulsar sobre dicho icono el operario pasará a ser el conductor. Finalmente, tras seleccionar un vehículo de la lista de vehículos disponibles para esa jornada se habilitará el botón “aceptar” y podremos confirmar el registro del grupo (figuras 79 y 80). Figura 79: calendario VI. Figura 80: calendario VII. Una vez registrado el grupo de trabajo, este aparecerá en la lista de grupos de trabajo de la jornada y en la zona de trabajo se indicará que está libre, es decir, sin citas asignadas (figura 81). Figura 81: calendario VIII. Cuando el siniestro tenga alguna cita asignada, en la lista de grupos de trabajo de la jornada se mostrará la zona en la que estará el grupo. Sobre la lista de grupos, encontraremos el botón “consultar citas” (figura 82).
112 Figura 95: calendario XXII. En 2.2.3. Eventos vimos como registrar un evento asociado a un siniestro. La forma de operar es la misma en esta pestaña. Podremos pulsar el botón “llamada” para agregar una nueva llamada en la cual podremos seleccionar el teléfono con el que se ha contactado o tratado de contactar de los registrados en el siniestro o registrar un nuevo contacto (figura 96). Figura 96: calendario XXIII. Si pulsamos el botón “cita”, podremos establecer la hora de la cita (el dia queda establecido por la jornada) y seleccionar las tareas a atender en dicha cita (figura 97). Figura 97: calendario XXIV.
113 Una vez que hayamos completado el evento, con su llamada y su cita si se da al caso, podremos pulsar el botón “aceptar” del evento y registrarlo en el sistema. La cita será asignada al grupo de trabajo y se actualizará el asistente de citas (figura 98). Figura 98: calendario XXV.
114
115 4. Aseguradoras La pestaña “Aseguradoras” solo será visible si el operador conectado tiene el cargo de gerente. Inicialmente se nos mostrará una lista de logotipos de aseguradoras y un icono con el que agregar una nueva aseguradora (figura 99). Figura 99: aseguradoras I. En caso de tener una aseguradora definida como predeterminada, esta aparecerá ya seleccionada. Una vez que tengamos una aseguradora seleccionada, se nos mostrarán dos secciones. La primera, “Peritos”, mostrará lo peritos de la aseguradora y dará la posibilidad de agregar uno nuevo. En la segunda, “Gremios y Trabajos”, se mostrará una tabla con los trabajos acordados con las compañías. En esta tabla podremos ver el código de dicho trabajo en la aseguradora actual, la descripción del trabajo y su dificultad. En la cabecera de la tabla disponemos de pestañas en las que seleccionar el gremio de las tareas mostradas, junto con un botón para agregar un nuevo gremio. Finalmente, podremos agregar un nuevo trabajo en el gremio seleccionado pulsando el botón “nuevo” bajo la tabla. Figura 100: aseguradoras II.
116
117 5. Activos En esta pestaña se nos mostrarán tres secciones: “Trabajadores”, “Vehículos” y “Materiales”. Inicialmente estarán todas contraídas y podremos expandirlas pulsando sobre el título de cualquiera de ellas (figura 101). Figura 101: activos, vista general. 5.1. Trabajadores Si expandimos la sección “Trabajadores”, podremos ver una lista de trabajadores en cuya cabecera podremos filtrar los trabajadores en función de su cargo en la empresa. Si seleccionamos uno de los trabajadores, podremos ver una ficha con los detalles del trabajador (figura 102). Figura 102: activos, trabajadores I. En la parte derecha de la ficha del trabajador, podremos ver una lista de cargos asignados al trabajador. Si pulsamos sobre uno de sus cargos, podremos ver los detalles del cargo, en caso de haberlos. Bajo la lista de cargos dispondremos del botón “nuevo”, con el que podremos asignar un nuevo cargo al trabajador. Al pulsar sobre el aparecerá un desplegable en el que podremos seleccionar el nuevo cargo a asignar (figuras 103, 104 y 105).
118 Figura 103: activos, trabajadores II. Figura 104: activos, trabajadores IV. Figura 105: activos, trabajadores III. Bajo la información del trabajador y la lista de cargos, podremos ver un listado de nóminas con su fecha, estado e importe. Si pulsamos el botón “nueva” bajo la lista, podremos agregar una nueva nómina. Para ello deberemos introducir la fecha, estado e importe (figura 106). Figura 106: activos, trabajadores V. Una vez registrada una nómina, podremos editar su estado haciendo doble clic sobre ella. (figuras 107 y 108).
119 Figura 107: activos, trabajadores VI. Figura 108: activos, trabajadores VII. Podremos agregar un nuevo trabajador pulsando el botón “nuevo” bajo la lista de trabajadores. Esto nos mostrará una ficha en la que introducir la información del trabajador (figura 109). Figura 109: activos, trabajadores VIII. Al introducir la información de la residencia del trabajador, se comprobará si dicha dirección coincide con alguna previamente registrada en el sistema y se nos mostrará una lista de sugerencias, con las coincidencias encontradas en el sistema o en su defecto en Google Maps. Al pulsar sobre una de las sugerencias,
120 se nos mostrará un mapa con la ubicación. Si pulsamos el botón “utilizar seleccionada”, los datos de la dirección seleccionada serán cargados en los campos de la residencia del trabajador y podremos finalizar su registro (figuras 110 y 111). Figura 110: activos, trabajadores IX. Figura 111: activos, trabajadores X. 5.2. Vehículos En la sección “Vehículos”, podremos ver un listado con los vehículos de nuestra empresa. Pulsando sobre uno de los vehículos, podremos ver una ficha con los detalles de este (figura 112). Figura 112: activos, vehículos I.
121 Figura 113: activos, vehículos II. En la parte derecha de la ficha del vehículo podremos ver su historial. Podremos registrar una nueva incidencia en su historial para registrar un gasto por: i.t.v., seguro obligatorio, impuestos, multas o gastos de talles (figuras 113 y 114). Figura 114: activos, vehículos III.