---
# System prepended metadata

title: Arquitectura MA-ERP

---

---
title: 'Arquitectura MAERP II'
---

::::info
**Documentación oficial de arquitectura del proyecto MAERP II**


:::spoiler Accesos directos importantes :cat:
Repositorio de Github:

[ma-erp-web](https://github.com/mediaerea/ma-erp-web)

Repositorio de SharePoint:


[MAERP II](https://mediaaereanet.sharepoint.com/:f:/s/OP-DS/Eh3qCeTKhItFk-RG2zcKZ04B7Pq2IVbwUP7Fjl9xhPr6Kw?e=2xmtdX)


Validar el acceso a los repositorios de colaboración anteriormente mencionados. En caso de no contar con acceso comunicarlo en la brevedad posible via Discord.

:::
::::

<style>
.two-column-layout {
  column-count: 2; /* Set column number */
  column-gap: 20px;
  max-width: 100%;
  overflow: hidden;
}

/* Media query for mobile devices */
@media (max-width: 768px) {
  .two-column-layout {
    column-count: 1; /* Switch to single column on small screens */
    column-gap: 0;   /* Optional: Set gap to 0 for single column */
  }
}

.markdown-body, .ui-infobar {
    max-width: unset !important;
}

.two-column-layout ul, 
.two-column-layout ol {
  margin: 0;
  padding-left: 20px;
}

.two-column-layout strong {
  font-weight: bold;
}

.two-column-layout em {
  font-style: italic;
}
    
.two-column-layout h1,
.two-column-layout h2,
.two-column-layout h3,
.two-column-layout h4,
.two-column-layout h5,
.two-column-layout h6 {
    margin-top: 0;    
}
</style>

# Arquitectura del sistema

El desarrollo de este proyecto tiene como objetivo ampliar las funcionalidades actuales del sistema de gestión de proyectos MA-ERP, agregando funcionalidades como:

- Dashboards personalizados por usuario
- Revisiones por par de código digitalizadas
- Monitoreo de riesgos y oportunidades
- Monitoreo de acciones pendientes
- Notificaciones dentro del sistema y en el navegador
- Administrador de catálogos del sistema


&nbsp;

<h2> Metas de calidad </h2>

| Meta | Descripción |
| -----| ----------- |
| Dashoard personalizado    | El sistema deberá permitir personalización del dashboard por rol, mostrando la información más relevante según el tipo de usuario (Gerente, PM, Desarrollador), en un tiempo de carga menor a 3 segundos.     | 
| Revisiones por par de código    | El sistema deberá permitir la gestión de revisiones por par, incluyendo asignación, aprobación y trazabilidad de cambios, con notificaciones automáticas al usuario involucrado.   |
| Monitoreo de riesgos y oportunidades    | El sistema deberá permitir registrar, visualizar y actualizar riesgos y oportunidades dentro de un proyecto, evaluando su impacto, probabilidad y planes de mitigación, y asociándolos a tareas específicas.     |
| Monitoreo de acciones pendientes    | El sistema deberá permitir a cada usuario visualizar y dar seguimiento a sus acciones pendientes dentro de los proyectos activos, con actualizaciones en tiempo real.     |
| Notificaciones    | El sistema deberá generar notificaciones internas y notificaciones push en el navegador para los eventos relevantes, usando Firebase Cloud Messaging (FCM).    |
| Administrador de catálogos    | El sistema deberá proporcionar una interfaz segura y accesible para gestionar los catálogos principales del sistema, permitiendo altas, bajas y modificaciones sin requerir intervención del equipo técnico.     |

&nbsp;

<h2> Stakeholders </h2>

| Usuarios | Expectativa |
| -----| ----------- |
| Gerente    | Tener visibilidad de métricas organizacionales que permitan tener una visón general del avance de proyectos, rendimiento colaboradores e indicadores estrátegicos. Administrar sus acciones pendientes dentro de proyectos, así como visualizar las acciones pendientes del resto de proyectos activos en la empresa. Administrar los catálogos principales usados en determinados módulos del sistema y recibir notificaciones de los eventos importantes acorde a su rol.| 
| Project Manager    | Tener visibilidad de métricasque permitan tener una visión general del rendimiento de sus proyectos y colaboradores. Administrar sus acciones pendientes y los pendientes generales dentro de sus proyectos, así como gestionar los riesgos y oportunidades que se identifiquen. Recibir notificaciones de los eventos relevantes para su rol.   |
| Desarrollador   | Tener visibilidad de métricas que permitan tener una visión general de su rendimiento como desarrollador, realizar y solicitar revisiones por par de código dentro del mismo sistema. Gestionar sus acciones pendientes en los proyectos en los cuales participa y recibir notificaciones de los eventos relevantes para su rol.     |

&nbsp;

<h2> Restricciones arquitectónicas </h2>

**El sistema MA-ERP necesita contemplar las siguientes restricciones:**

- Los módulos de Monitoreo, Riesgos y oportunidades y Revisiones por par, deben integrarse de manera fluida y limpia al módulo ya existente de Tablero Kanban, permitiendo que los eventos generados en dichos módulos puedan reflejarse visualmente como tarjetas, etiquetas u otras representaciones dentro del tablero.
- La aplicación web debe visualizarse en los navegadores: Google Chrome, Egde, Opera, OperaGX.
- Todas las librerías, frameworks o dependencias utilizadas en el sistema deben contar con mantenimiento activo por parte de su comunidad o desarrollador. No se permite la integración de librerías obsoletas, depreciadas o que se encuentren marcadas como próximas a quedar sin soporte.
- Las notificaciones dentro del navegador deberán implementarse usando Firebase Cloud Messaging (FCM).
- El sistema contará con un estilo arquitectónico MVC (Modelo-Vista-Controller), desarrollado con el Framework de Laravel, de manera monolítica.

&nbsp;

## Vistas:


### Contexto

El sistema MA-ERP es una plataforma we que permite a los colaboradores de MediaAérea dar seguimiento a los proyectos de desarrollo y gestionar los recursos humanos disponibles en la empresa, mediante administradores de clientes, proyectos y tableros Kanban colaborativos. Es usada para organizar tareas, asignar responsables, dar seguimiento al avance de proyectos, evaluar y analizar el desempeño de los equipos, gestionar riesgos, monitorear acciones pendientes, y realizar revisiones por par de código.


<h4> Actores externos </h4>

| Actor | Relación con el sistema 
| -----| ----------- |
| Usuario - Gerente | Revisa metricas organizacionales, consulta avances de proyectos y desempeño de colaboradores.     | 
| Usuario - Project Manager     | Planifica y monitorea el desarrollo de proyectos.     | 
| Usuario - Desarrollador     | Consulta tareas y reporta actividades.     | 
| Servicio de notificaciones FCM    | Envía notificaiones push en el navegador     | 


&nbsp;

### Contenedores

| Contenedor | Tecnología| Descripción |
| -----------| ----------| ----------- |
| **Frontend Web**| Blade (Laravel) + Metronic (Bootstrap) | Interfaz generada por Laravel usando Blade. Usa componentes visuales de Metronic para mostrar módulos como Kanban, Riesgos, Revisiones, etc.|
| **Backend Web (Servidor Aplicaciones)** | PHP 8.x + Laravel | Maneja la lógica del sistema: gestión de tareas, riesgos, usuarios, revisiones por par. También gestiona sesiones y validaciones. |
| **Base de Datos**| MySQL (administrada vía phpMyAdmin) | Contiene todos los datos del sistema: usuarios, tareas, eventos, comentarios, revisiones, configuraciones. |
| **Autenticación** | Laravel Auth (nativo) | Controla el acceso al sistema usando el sistema de autenticación propio de Laravel (guard, middleware, roles/permisos).|
| **Servicio de Notificaciones** | Firebase Cloud Messaging (FCM)| Se encarga de enviar notificaciones push al navegador cuando ocurren eventos importantes dentro del sistema (como nuevas tareas o revisiones pendientes). |

&nbsp;

### Componentes

Diagrama de componentes general del sistema: 

![Component diagram MAERP](https://hackmd.io/_uploads/r1SSGdqwlg.jpg)

En este diagrama podemos visualizar la interacción entre los diferentes componentes del sistema.

Nuestra aplicación principal es un monolito que renderiza el front a través del sistema de vistas integrado de Laravel (Blade), y el backend se maneja dentro del mismo framework.

El backend de la aplicación consume el servicio externo de Firebase Cloud Messaging para enviar notificaciones push al usuario en su navegador. 

Solo se consume una base de datos en MySQL para la aplicación principal.

### Base de datos

Módulos revisiones por par, Riesgos y oportunidades.

<img src="https://hackmd.io/_uploads/rk22lgarel.png" alt="DB - MAERP II" width="500"/>

Funcionalidades contempladas: 

- RQ003 - Revisiones por par - HU010
- RQ003	- Revisiones por par - HU011
- RQ003	- Revisiones por par - HU012
- RQ004	- Riesgos y oportunidades -	HU013

En el siguiente enlace se puede consultar con mayor comodidad la documentación del diseño de la base de datos del sistema: [MAERP II - DB](https://dbdocs.io/romina.verdugo/MA-ERP-II)

&nbsp;

<h2> Decisiones arquitectónicas </h2>

Record de decisiones arquitectónicas críticas, de gran escala o riesgosas:


| ADR-001 | Uso de Firebase Cloud Messaging para notificaciones push 
| --------| -------- | 
| Fecha  | 23/06/2025 |
| Contexto  | El sistema necesita enviar notificaciones push en tiempo real para informar a los usuarios de eventos relevantes. Se consideran las opciones: Firebase Cloud Messaging y  Laravel Echo + Pusher | 
| Decisión  | Se decidió utilizar Firebase Cloud Messaging (FCM)|
| Razones  | Es gratuito, robusto y apliamente usado. Se integra bien con los navegadores modernos y ahorra tiempo a comparación de implementar WebSockets propios|
| Consecuencias | Se requiere que el usuario otorgue permisos para notificaciones, se añade una dependencia a un servicio de Google, se deben manejar adecuadamente los tokens para cada usuario|

&nbsp;

