Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Requisitos Sistema Asistencia en Laravel

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

Desarrollo de sistema de control de asistencias en Laravel

Lo que se requiere:

➢ Registro de departamentos y subdepartamentos. En donde trabaja cada empleado. En


cada departamento y subdepartamento hay jefes.
➢ Registro de grupos de empleados: descripción (por ejemplo: grupo1, grupo2, grupo3), días
de vacación, días de incremento, años laborables, máximo días acumulables, máximo días
por mes, meses de período (por lo general 12 meses).
➢ Registro de empleados: ID, nombres, grupo de empleado, jefe, horas laborables,
departamento, fecha entrada laboral, fecha salida laboral.
➢ Registro de estado de horarios: descripción (por ejemplo: libre, permiso, vacaciones,
feriado).
➢ Registro de horarios: descripción, hora de entrada, hora salida a almuerzo, hora entrada de
almuerzo, hora de salida, minutos (tiempo) de alimentación (para la hora de almuerzo),
estado de horario.
➢ Registro de planificación de horarios: empleado (por empleado, departamento, o grupo de
empleados), horario (de los creados en “Registro de horarios”), fecha de inicio, fecha de
fin, estado de horario.
➢ Registro de permisos de empleados: descripción (por ejemplo: institucional, enfermedad,
calamidad doméstica, maternidad, con cargo a a vacaciones por atrasos), máximo días,
máximo horas, número días justificación, si se descuenta o no de las vacaciones.
➢ Solicitudes de permisos de empelados: empleado, período vacación, tipo de permiso
(registro de permisos indicado en el punto anterior), fecha y hora (salida), fecha y hora
(regreso). También los siguientes campos que se calculan automáticamente con los
campos fecha y hora de salida y regreso: máximo días, máximo horas, días de
justificación, días y horas. También se indica el campo el jefe que autoriza la solicitud del
permiso.
➢ Registro de solicitud de vacación: empleado, período vacación, máximo días vacación,
máximo acumulable vacación, fecha inicio, fecha fin, días solicitados (basado en fecha
inicio y fin), jefe que autoriza. También tiene la sección con los campos que se calculan
automáticamente: días, horas y minutos.
➢ Reporte de permisos: por empleado, por fecha (inicio y fin) y por todos.
➢ Implementar módulo de login propio de Laravel que se crea con el comando "artisan
make:auth".
➢ Implementar módulo de permisos y roles de usuarios mediante la librería/componente para
Laravel "Spatie" (. En este enlace está un tutorial de cómo realizarlo: http://bit.ly/2CWZcI7
o alguna otra librería que se vea que sea buena y sobre todo que tenga bastante soporte
de la comunidad.
➢ Implementar módulo de auditoría de sistema utilizando el componente “Laravel Auditing”
http://bit.ly/2yUzWxK http://bit.ly/2R9fqB3 . Desde backend se tiene que tener poder ver y
consultar todos lo referentes a registros de auditoría del sistema con todos los cambios
realizados por el usuario y por el sistema en sí.
➢ Poder conectarse a todas las unidades de relojes biométricos vía IP y leer su estado
(conectado o fuera de línea).
➢ Push/Pull datos a/desde una única unidad de reloj o múltiples unidades a la vez.
➢ La extracción de los registros de timbres (marcaciones) se tiene que realizar
automáticamente mediante tarea programada utilizando el componente propio de Laravel
"Task Scheduling": http://bit.ly/2EBkc92 . La hora y frecuencia de la ejecución de la tarea
programada el usuario lo debe realizar por medio del backend del sistema. En este punto,
se debe también guardar por qué medio realizó la marcación: rostro, huella, clave, tarjeta.
➢ Tengo listo y probado el código para realizar la conexión a los relojes, la extracción de
registros de timbres (marcaciones) y también de otros datos que se guardan en dichos
relojes.
Basado en los requerimientos, los módulos y reportes que se requerirían son:

➢ Módulo de relojes para poder agregar o eliminar relojes desde sistema.


✔ Push/Pull configuraciones a/desde múltiples unidades de relojes a la vez.
✔ Los datos serían la IP, puertos, ubicación del reloj, descripción.
✔ También se requiere guardar y presentar los siguientes datos de los relojes: No. de
serie,MAC address, Otros datos más también se van a guardar que se los puede
extraer de los relojes.
✔ Creación, edición y eliminación (CRUD) de usuarios/empleados que se almacenan en
los relojes, asignación de tipo de usuario de reloj: admin o usuario normal.
✔ Cambio o fijación de fecha y hora de los relojes.
➢ Módulo de usuarios. Ya lo da por defecto Laravel con lo que hay que agregarle el resto de
campos adicionales.
➢ Módulo de provincias.
➢ Módulo de ciudades.
➢ Módulo de departamento y subdepartamento para luego poder indicar en cual de ellos
labora el empleado.
➢ Módulo de empleados.
➢ Módulo de horarios laborales para asignar a empleados y grupos de empleados.
➢ Módulo de tipos de permisos (módulo base).
✔ Tabla de los tipos de permisos con indicación de cuáles generan descuento a vacación:
https://drive.google.com/open?id=1iFk3LL-iNPelsJsOhGWm_3sVvoJHReTu
➢ Módulo de permisos de empleados.
Respecto a este módulo, el proceso sería así:
✔ Los permisos sólo lo podrían generar los usuarios con rol de administrador o también
las secretarias de cada departamento.
✔ El permiso se debe generar con un código único que pueda ser leído con lector de
código de barras. Esto es para evitar que el usuario tenga que digitar manualmente
dicho código y también para facilidad de lectura de la impresión cuando se consulte por
dicho permiso.
✔ Una vez que la secretaria genere el permiso en el sistema, lo imprime y se lo da al
usuario que solicita para que lo haga firmar. En ese permiso se guardará la fecha y
hora de generación.
✔ Cuando salga el empleado, le entrega a la persona que está en la puerta de salida y
esta persona ingresa al sistema y mediante el lector de código de barras se cargará el
permiso.
✔ Una vez cargado en el sistema el permiso, la persona que controla en la puerta de
salida, lo que hará es hacer clic en un botón (o alguna opción) de "Registro de salida"
de permiso en la que se registrará automáticamente la fecha y hora exacta que sale el
empleado. Esta fecha y hora será cargada de forma automática, es decir que no será
ingresada manualmente por la persona que controla el ingreso o salida del empleado.
✔ Cuando regrese el emplado del permiso, la persona de la puerta de salida nuevamente
cargará el permiso mediante el lector de código de barras y hará clic en el botón
respectivo (o alguna opción) de "Registro de entrada" de permiso. Ahí se registrará
automáticamente la fecha y hora exacta que llega el empleado del permiso que pidió.
Esta fecha y hora será cargada de forma automática, es decir que no será ingresada
manualmente por la persona que controla el ingreso o salida del empleado.
✔ Además del permiso por horas y/o minutos que registre el guardia mediante el código
de barras, se debe considerar que empleado puede solicitar permiso que no sean por
tiempo corto y que se lo realiza mediante formulario impreso que puede ser:
• Permiso de licencia con remuneración: enfermedad, enfermedad catastrófica,
maternidad, paternidad, matrimonio, calamidad doméstica, hijos hospitalizados
y otros.
• Permiso por días el cual puede ser: imputable a vacaciones, oficial (por trabajo),
no imputable a vacaciones (puede ser por ejemplo por compensación de horas
extras, sin remuneración) y otros.
• Permiso de ausencia temporal: puede ser por consulta médica la cual la cual
luego justifica con certificado médico para que no se le descuente a vacaciones.
Estos permisos que no son de corta duración, lo ingresa/genera sólo el usuario que
tiene permisos (roles) para ingresar permisos de empleados en el sistema.
✔ Cuando un empleado por ejemplo realizó un permiso por horas (el cual registra la
salida el guardia o persona que controla el ingreso y salida de personas), por ejemplo
salió a las 09:00 AM y tenía previsto regresar a las 11:00 AM pero que por alguna
situación ya no regresó a registrar la salida al almuerzo y luego llegó más tarde del
registro de ingreso del almuerzo por ejemplo a las 03:00 PM, el guardia debe cerrar el
permiso a la hora de salida de almuerzo con lo que el empleado tendría que hacer otro
permiso que sería para la hora de ingreso de almuerzo hasta la hora que regresó a
laborar. En resumen sería: 1 permiso de 09:00 AM a 01:00 PM y otro permiso de 02:00
PM a 03:00 PM.
También se puede dar el caso de que el empleado haya salido a las 09:00 pero no
regresó a registrar a la salida al almuerzo pero si regresó a laborar y registra el ingreso
del almuerzo. Este sería un sólo permiso de 09:00 AM a 01:00 PM.
✔ Cuando hay permisos de por ejemplo 1 o 2 días cerrados, se hace una sola solicitud de
permiso. En caso de 1 días y fracción de día, por ejemplo 1 ½ día, serían 2 permisos:
una solicitud por 1 día y otra solicitud por ½ día.
✔ Cuando sea un tipo de permiso con cargo a vacaciones, debería tenerse un campo en
el que se indique a qué período de vacación se debe realizar el cargo de dicho
permiso. En este punto, cuando un permiso es con cargo a vacación, debe ser
requerido el campo de período.
✔ Para el caso de crear/generar un permiso con cargo a vavación, primer debe estar
creado/generado el período de vacación del empleado para con eso poder escojer de
un campo de tipo selección el período al cual se va a descargar el tiempo del permiso.
✔ Estos son los formularios de permisos que se realizan cuando no son permisos por
horas:
• Permiso de ausencia temporal: https://drive.google.com/open?
id=1FNR5jr4qVtrh_KjX2SOQauQGcjwLWlhK
• Permiso de ausencia con remuneración: https://drive.google.com/open?
id=1GB7nHPEKcyKzk8AE6staagrcDZA5hCbq
• Permiso por días: https://drive.google.com/open?
id=1nOQII6HAizcVmPCFWqFs3u1EUhWALSmA
✔ Estos son ejemplos de memorandos que les envían a los empleados cuando tienen
atrasos y en que les indican que les van a descontar de vacaciones:
• Memorando indicando a empleado de los atrasos de 1 mes que le serán
descontados de vacaciones: https://drive.google.com/open?
id=1UPTy8eHCv9cPHmInZTyEz1I6LC5rm2H1
• Memorando indicando a empleado de los atrasos de varios meses que le serán
descontados de vacaciones: https://drive.google.com/open?
id=17FMMlklRHNO9MJSHNxo4R4JkbSoxRNa5
• Otro ejemplo de memorando indicando a empleado de los atrasos de varios meses
que le serán descontados de vacaciones: https://drive.google.com/open?
id=1On090Wnduu4NeaK0uOYqlgEjhSSEh9gH
Se cae en cuenta que en estos casos no los sancionan sino más bien les avisan que
los atrasos les van a ser descontados de vacaciones y que tienen 24 horas para
presentar la justificación y no descontarles. En uno de los memorandos le indican el
empleado que mejore la puntualidad para evitar inconvenientes futuros.
Se puede ver también que imagino por fallos en reportes del actual sistema que se
utiliza, pasan reportes de atrasos con meses de retraso al empleado (ejemplo No. 2).
Según conversé con un empleado, parece que cuando es poco tiempo de descuento
no les avisan nada de una posible sanción, pero cuando es mucho tiempo ahí si
pueden tramitar la sanción. Igualmente basado en los ejemplos de esos reportes que
indico, se puede ver que tienen hasta casi 6 horas de atrasos en 1 sólo mes. Imagino
que no le dicen nada al empleado de posible sanción ya que se ha demorado en
avisarle al usuario (igual tiene meses de retraso que le indican al empleado de ese
reporte).
✔ Para poder luego obtener los reportes, los timbres de los empleados se toman en
cuenta para saber los atrasos o faltas que tengan en los cuales no deben salir registros
que estén justificados con estos permisos.
✔ Cada empleado con su usuario respectivo podrá acceder a consultar todos los
permisos personales que ha solicitado y también que le han sido dados sinc argo a
vacación como por ejemplo: institucinal, enfermedad, maternidad, calamidad doméstica
y otros.
➢ Módulo de vacaciones. En esta parte se debe considerar que el propio usuario o la
secretaria del departamento donde pertenece, le puede realizar la solicitud de las
vacaciones.
En este módulo hay que tener en cuenta que por Ley, un empleado que pertenece a la
LOSEP sólo puede tener acumulados 2 períodos de vacación, sino los toma, en el tercer
período ya pierde los 2 últimos y sólo se considera 1 año que en este caso es el tercer
período. En el caso que la institución mismo sea quien le indique al empleado que por
alguna razón laboral no puede tomar vacaciones, entonces en ese caso si se pueden
acumular más de 2 períodos. Para el caso de los otros empleados que no pertenecen a la
LOSEP como por ejemplo el de “CÓDIGO DE TRABAJO”, en ese caso si se pueden
acumular más de 2 períodos.
En el caso de por ejemplo el empleado que pertencece al "Código de Trabajo" el cual
puede acumular más de 2 períodos, Si por ejemplo tiene acumulados 120 días de
vacación, el empleador determina si le da o no los 120 días seguidos en 1 año o sino
puede determinar que le va a dar dividido en 2 años, es decir 6a días en 1 año y los otros
60 días en el siguiente año.
➢ Desarrollo de Unit Tests con Laravel para tener control y comprobar de que no vaya a fallar
lo que ya está desarrollado y que no falle por realizar la creación de nuevas
funcionalidades y/o módulos.
➢ Para el desarrollo del sistema, se tiene que considerar en todos los módulos lo que son las
migraciones, seeders y factories de Laravel. Con los seeders se tendrá los datos de
configuración inicial y obligatoria del sistema como por ejemplo: superusuario y clave,
roles, permisos, etc.
➢ Reporte de marcaciones (timbres) de los empleados.
➢ Reporte de atrasos: por empleado y por grupo de empleados.
➢ Reporte de faltas (inasistencias): por empleado y por grupo de empleados.
➢ Salidas anticipadas (antes de hora de jornada laboral): por empleado y por grupo de
empleados.
➢ Reporte de entradas/salidas.
➢ Reporte de vacaciones. En este se tiene que considerar reporte tipo kardex, es decir en el
que conste cuántos días de vacaciones le corresponden al empleado (por ejemplo 15, 20,
30 días), cuántos ha tomado por motivo de atrasos o solicitud de permisos y cuántos días y
horas le quedan de sus vacaciones. Para esto puedo indicar cómo se requiere mediante
unos gráficos.
➢ Exportar reportes en Excel y PDF utilizando el componente para Laravel llamado "Laravel-
Excel" y "Laravel-PDF" respectivamente.
➢ Desarrollo de envío de notificaciones al email utilizando el propio componente de Laravel:
http://bit.ly/2EMI2Pp
➢ Si quien tome el proyecto ve que falta algún otro reporte y/o funcionalidad imprensindible
para el sistema, también hay que realizarlo.
➢ Para el desarrollo de la interfaz, se debe utilizar alguna plantilla basada en bootstrap 4 y
también utilizar Vue.js. En caso que se sienta más cómodo utilizando plantilla con boostrap
y JQuery, si se aceptarían propuestas así. En caso de utilizar Bootstrap con Jquery, se
debe tener presente que la plantilla debe utilizar bootstrap 4.
➢ Para las vistas de listado en Laravel, la paginación debe realizarse utilizando paginación
“on demand”, es decir, no se debe hacer aquella en que primero se cargan en la página
todos los registros (que pueden ser miles) y luego sólo realizan presentación de grupo de
registros como que así fuera paginación.
➢ Guardar en base de datos todos los logs de errores que se puedan sucitar en el sistema
como por ejemplo: error de conexión al reloj biométrico y otros del sistema en general. Con
esto, desde el mismo sistema se puede ver los errores para así sirva de guía en cómo
solucionarlos. Como para que sirva de referencia, en el sistema "triton" indicado en el
proyecto está también la parte de captura y guardado de este tipo de logs.

NOTAS

➢ En la propuesta que entreguen para desarrollo del proyecto debe indicarse todos los
módulos, características y funcionalidades que van a realizar en el proyecto así como
también el cronograma de tiempos que van a terminar cada etapa de módulos y
funcionalidades.
Ya que ha de ser seguro que algunas funcionalidades y/o características se estén pasando
por alto en sistemas de este tipo, también deben indicar que es necesario realizar e indicar
en el mismo cronograma.
➢ Antes de comenzar el proyecto, el desarrollador tiene que presentar los diagramas
respectivos de lo que va a realizar en el sistema: diagrama entidad-relación para la base
de datos, diagrama de los módulos que va a tener el sistema y otros diagramas que el
desarrollador considere pertinentes.
➢ Para el desarrollo, quien tome el trabajo debe utilizar herramientas de seguimiento de
proyectos como por ejemplo https://trello.com (o alguna otra herramienta online con la que
se sienta cómodo) para ir viendo el avance del proyecto. Dentro de esto se debe indicar en
detalle el cronograma. Ejemplo de tareas detalladas de proyecto en trello.com son:
◦ http://bit.ly/2EyEdMw
◦ http://bit.ly/2A4F6sq
➢ Proyecto debe ser realizado siguiendo la metodología ágil Scrum.
➢ Debe utilizarse manejo de versiones con repositorio GIT utilizando la plataforma
https://bitbucket.org . Se pide utilizar esta plataforma ya que en su versión gratuita permite
tener repositorios privados que es lo que se requiere.
➢ Debe ser subido mediante commits separado cada cambio en el código durante el
desarrollo. Ejemplos de commits serían:
◦ Si en el código se detectó que estuvo mal escrita la letra de una palabra, para subir el
correcto mensaje del commit sería: git commit -m “Fix typo en mensaje de alerta al
usuario”. Estos son ejemplos de commits por motivo de “typo”: http://bit.ly/2BqvWWX ,
http://bit.ly/2A6SZpV
◦ Si se arregla un error que sale al momento de querer actualizar un empleado, el
commit sería: git commit -m “Fix error al tratar de eliminar empleado porque no se
estaba enviando el id de empleado”.
◦ Si se agrega el campo “Email alternativo” al modelo Usuarios, sería: git commit -m
“Add campo email alternativo a modelo Usuarios”.
◦ Si se hace una mejora en el código de generación del período de vacaciones del
empleado sería: git commit -m “Improve método de cálculo de período de
vacaciones por un algoritmo más óptimo que acelera en 50% el proceso de dicho
cálculo”.
◦ Commits de proyectos realizados con Laravel: http://bit.ly/2LoBgyI , http://bit.ly/2rNamI0
➢ Debe subirse frecuentemente commits con cada desarrollo, sea este de fase, módulo y/o
funcionalidad para con esto ir descargando e ir probando de forma frecuente el sistema tal
como la metodología Scrum lo exige.
➢ Quien tome el proyecto, debe comunicarse con bastante frecuencia indicando el progreso
del trabajo. La comunicación tiene que ser de por lo menos 2 veces por día.
➢ El desarrollador debe indicar continuamente todas las fases/etapas del proyecto en las que
esté trabajando y que va a realizar.
➢ El desarrollo debe realizarse en Linux ya que como está indicado en el proyecto, se debe
utilizar el componente/librería “Task Scheduling” el cual va directamente enlazado a los
crontab de Linux.
➢ Para el proyecto se debe utilizar la reciente versión de Laravel 5.7. Una vez concluido el
sistema, lo debe dejar actualizado a la última versión de Laravel.
➢ Como sistema va a ser desarrollado en Laravel, la base de datos a utilizar debe ser
independiente, es decir puede ser generada en PostgreSQL o MariaDB/MySQL o cualquier
otra. En este caso se debe tomar en cuenta que sea generada en PostgreSQL.
➢ Para realizar el trabajo pueden basarse en este sistema llamado triton (código fuente en
Laravel) que es similar a lo que se está requiriendo y ya tiene muchas funcionalidades
desarrolladas de lo que se necesita: http://bit.ly/2ECLXy9. Tener claro que “triton” sólo es
para referencia y no se aceptará un “copy & paste” del código fuente de ese sistema al que
se tiene que desarrollar en el presente proyecto.
➢ Como para que se pueda acelerar el desarrollo del proyecto, hay que utilizar lo más que se
pueda librerías/componentes propios de Laravel o de terceros que sean ampliamente
utilizados y/o actualizados por la comunidad (es decir, soporte de la comunidad) como es
el caso de “Spatie”, "Laravel-Excel", o de "Laravel-dompdf".
➢ Se entrega una base de datos de ejemplo para que puedan realizar las pruebas o si
desean también pueden generar registros de ejemplos para las pruebas mediante la
utilización de Factories de Laravel.
➢ Como para que tengan idea de la parte de reportes, puedo hacer la entrega de reportes
ejemplos de referencia.
➢ Una vez terminado el proyecto, deben entregar el código fuente del desarrollo.
➢ Todo el código fuente debe dejarlo bien documentado.
➢ Indicar y entregar guía/manual sobre como dejar en producción y listo para
instalar/configurar el sistema en Ubuntu.
➢ Para la realización del trabajo además del sistema triton, puedo indicar otro para que les
sirva de referencia para el desarrollo del proyecto.

He tratado de ser lo más detallado posible en la descripción del proyecto como para que
entiendan muy bien el trabajo que hay que realizar. Recomiendo que analicen el sistema “triton”
que he indicado.

Quien realice el trabajo demuestre que es una persona muy profesional y pueda dar las mejores
alternativas de solución al desarrollo e ideas de mejora, será considerado para futuros proyectos
ya que estoy buscando con quien tener una relación profesional a largo plazo.
La fortaleza que debe tener quien tome el trabajo es que sepa ser ágil en análisis de requisitos y
funcionalidades ya que ese es el 70% del trabajo.

También podría gustarte