Proyecto

General

Perfil

Sistema CRM (Customer Relationship Management) » Historial » Versión 1

Anibal Pendas Amador, 01/08/2025 05:57

1 1 Anibal Pendas Amador
# Proyecto: Sistema CRM (Customer Relationship Management)
2
3
## 1. Introducción
4
El **Sistema CRM** (Customer Relationship Management) es una solución integral diseñada para optimizar la gestión de relaciones con clientes, automatizar procesos de marketing, gestionar tareas y oportunidades de venta, y proporcionar análisis avanzados mediante reportes y métricas. El proyecto se desarrolla utilizando **ABP.IO 9** con .NET 8, **MySQL 8.x** como base de datos, **ASP.NET Core MVC** con **Razor Pages**, **Tailwind CSS** para una interfaz moderna y responsiva, **Chart.js** para visualizaciones gráficas, **ClosedXML** para exportación a Excel, y LaTeX (procesado con `latexmk`) para exportación a PDF. El sistema utiliza el módulo **Identity** de ABP.IO para autenticación y autorización sin extender `IdentityUser`, aprovechando las capacidades de arquitectura modular, microservicios compatibles, y diseño orientado a dominio (DDD) que ofrece ABP.IO. 
5
6
El proyecto abarca cinco subdominios principales (**Gestión de Contactos**, **Gestión de Oportunidades de Venta**, **Automatización de Marketing**, **Gestión de Tareas y Actividades**, y **Reportes y Análisis**) y un subdominio de soporte (**Gestión de Usuarios y Permisos**), cumpliendo con los requerimientos funcionales (FR-001 a FR-005) y no funcionales (NFR-003 a NFR-007). Este documento define el propósito, objetivos, alcance, y limitaciones del proyecto, integrando las capacidades de ABP.IO descritas en la documentación proporcionada.
7
8
## 2. Propósito del Proyecto
9
El propósito del Sistema CRM es proporcionar una plataforma robusta, segura, escalable y multilingüe que permita a las empresas:
10
- Centralizar y gestionar información de contactos.
11
- Seguimiento eficiente de oportunidades de venta para maximizar conversiones.
12
- Automatizar campañas de marketing dirigidas y rastrear métricas.
13
- Programar y asignar tareas relacionadas con contactos y oportunidades, con notificaciones automáticas.
14
- Generar reportes tabulares y métricas visuales para análisis estratégico.
15
- Garantizar un acceso seguro mediante autenticación multifactor (MFA), autorización basada en roles, y cumplimiento de normativas como GDPR.
16
17
El sistema aprovecha la infraestructura de ABP.IO 9, incluyendo su arquitectura DDD, soporte para microservicios, módulos pre-construidos (como **Identity**, **Audit Logging**, y **Account**), y el tema **LeptonX** para una interfaz moderna y personalizable.
18
19
## 3. Objetivos del Proyecto
20
- **Funcionales**:
21
  - Implementar los requerimientos funcionales:
22
    - **FR-001**: Gestión de contactos (crear, editar, eliminar, buscar, importar).
23
    - **FR-002**: Gestión de oportunidades de venta (crear, actualizar, asociar documentos).
24
    - **FR-003**: Automatización de marketing (crear campañas, segmentar contactos, enviar correos, rastrear métricas).
25
    - **FR-004**: Programación y asignación de tareas relacionadas con contactos u oportunidades.
26
    - **FR-005**: Generación de reportes y visualización de métricas.
27
  - Cumplir las historias de usuario asociadas:
28
    - **HU-FR001-01 a HU-FR001-03**: Crear/editar contactos, buscar, importar desde CSV.
29
    - **HU-FR002-01 a HU-FR002-03**: Crear/editar oportunidades, asociar documentos, actualizar estados.
30
    - **HU-FR003-01 a HU-FR003-03**: Crear campañas, segmentar contactos, rastrear métricas.
31
    - **HU-FR004-01 a HU-FR004-03**: Programar tareas, asignarlas, recibir notificaciones.
32
    - **HU-FR005-01 a HU-FR005-03**: Generar reportes de contactos, visualizar métricas, exportar a PDF/Excel.
33
- **No Funcionales**:
34
  - **NFR-003**: Seguridad con MFA, cifrado TLS 1.3, AES-256, y cumplimiento de GDPR.
35
  - **NFR-004**: Interfaz intuitiva, multilingüe (inglés, español, francés, portugués), responsiva, y accesible (WCAG 2.1).
36
  - **NFR-005**: Disponibilidad del 99.9% con recuperación en menos de 1 hora.
37
  - **NFR-006**: Copias de seguridad diarias y documentación completa.
38
  - **NFR-007**: Compatibilidad con navegadores (Chrome, Firefox, Safari, Edge) y dispositivos móviles.
39
40
## 4. Alcance del Proyecto
41
42
### 4.1 Subdominios Incluidos
43
El Sistema CRM se estructura en cinco subdominios principales y uno de soporte, cada uno mapeado a los requerimientos funcionales y soportado por la infraestructura de ABP.IO 9:
44
45
1. **Gestión de Contactos (FR-001)**:
46
   - **Funcionalidades**: Crear, editar, eliminar, buscar, e importar contactos (CSV). Incluye datos como nombre, correo, teléfono, dirección (ciudad, país, código postal), y notas.
47
   - **Historias de Usuario**:
48
     - **HU-FR001-01**: Crear/editar contactos con información básica.
49
     - **HU-FR001-02**: Buscar contactos por nombre, correo, o teléfono.
50
     - **HU-FR001-03**: Importar contactos desde archivos CSV.
51
   - **Entidades**: `Contact` (con `Address` como Value Object).
52
   - **Integración con ABP.IO**: Usa el módulo **Identity** para permisos (`Crm.Contacts.*`) y **Audit Logging** para registrar cambios.
53
   - **Integración con Otros Subdominios**: Base para tareas, oportunidades, y campañas.
54
55
2. **Gestión de Oportunidades de Venta (FR-002)**:
56
   - **Funcionalidades**: Crear, actualizar, y eliminar oportunidades; asociar documentos; gestionar etapas (prospección, negociación, cierre).
57
   - **Historias de Usuario**:
58
     - **HU-FR002-01**: Crear/editar oportunidades con descripción y valor estimado.
59
     - **HU-FR002-02**: Asociar documentos (PDF, imágenes) a oportunidades.
60
     - **HU-FR002-03**: Actualizar el estado de una oportunidad.
61
   - **Entidades**: `Opportunity` (con `Stage` como Value Object, `Documents` como colección).
62
   - **Integración con ABP.IO**: Usa **Authorization** para permisos (`Crm.Opportunities.*`) y **Background Jobs** para actualizaciones asíncronas.
63
   - **Integración con Otros Subdominios**: Relacionada con contactos y tareas; datos para reportes.
64
65
3. **Automatización de Marketing (FR-003)**:
66
   - **Funcionalidades**: Crear campañas, segmentar contactos, enviar correos, y rastrear métricas (aperturas, clics, conversiones).
67
   - **Historias de Usuario**:
68
     - **HU-FR003-01**: Crear campañas con plantillas personalizables.
69
     - **HU-FR003-02**: Segmentar contactos por criterios (ubicación, estado).
70
     - **HU-FR003-03**: Rastrear métricas de campañas.
71
   - **Entidades**: `Campaign` (con `Metrics` como Value Object).
72
   - **Integración con ABP.IO**: Usa **Background Jobs** para envío de correos y **Distributed Event Bus** para métricas en tiempo real.
73
   - **Integración con Otros Subdominios**: Usa contactos; métricas alimentan reportes.
74
75
4. **Gestión de Tareas y Actividades (FR-004)**:
76
   - **Funcionalidades**: Programar, asignar, y gestionar tareas; enviar notificaciones para tareas próximas o vencidas.
77
   - **Historias de Usuario**:
78
     - **HU-FR004-01**: Programar tareas con fecha, hora, y descripción.
79
     - **HU-FR004-02**: Asignar tareas a usuarios autenticados.
80
     - **HU-FR004-03**: Enviar notificaciones automáticas.
81
   - **Entidades**: `Task` (relacionada con `Contact`, `Opportunity`, e `IdentityUser`).
82
   - **Integración con ABP.IO**: Usa **Background Jobs** para notificaciones y **Authorization** para permisos (`Crm.Tasks.*`).
83
   - **Integración con Otros Subdominios**: Vinculada a contactos, oportunidades, y usuarios; datos para reportes.
84
85
5. **Reportes y Análisis (FR-005)**:
86
   - **Funcionalidades**: Generar reportes de contactos y tareas; visualizar métricas de oportunidades y campañas en gráficos; exportar a PDF (LaTeX) y Excel (ClosedXML).
87
   - **Historias de Usuario**:
88
     - **HU-FR005-01**: Generar reportes de contactos por criterios (ubicación, estado).
89
     - **HU-FR005-02**: Visualizar métricas de oportunidades en gráficos (Chart.js).
90
     - **HU-FR005-03**: Exportar reportes en PDF o Excel.
91
   - **Herramientas**: Chart.js 3.9.1, ClosedXML 0.102.1, LaTeX con `latexmk`.
92
   - **Integración con ABP.IO**: Usa **Audit Logging** para trazabilidad y **Authorization** para permisos (`Crm.Reports.*`).
93
   - **Integración con Otros Subdominios**: Agrega datos de contactos, oportunidades, campañas, y tareas.
94
95
6. **Gestión de Usuarios y Permisos (Soporte)**:
96
   - **Funcionalidades**: Gestionar usuarios (`IdentityUser`) y asignar roles/permisos para controlar el acceso a todos los subdominios.
97
   - **Módulo ABP.IO**: **Identity** para autenticación (MFA) y autorización; **Account** para login, registro, y recuperación de contraseña.
98
   - **Permisos**: Definidos en `CrmPermissionDefinitionProvider` (por ejemplo, `Crm.Contacts.Create`, `Crm.Reports.Export`).
99
   - **Integración con Otros Subdominios**: Controla acceso a todas las funcionalidades.
100
101
### 4.2 Requerimientos No Funcionales
102
- **NFR-003 (Seguridad)**:
103
  - Autenticación multifactor (MFA) mediante el módulo **Account** de ABP.IO.
104
  - Cifrado TLS 1.3 para comunicaciones, AES-256 para datos en MySQL.
105
  - Cumplimiento de GDPR con banner de consentimiento de cookies (usando `cookieconsent`).
106
- **NFR-004 (Interfaz)**:
107
  - Multilingüe: Inglés, español, francés, portugués (usando `AbpLocalizationOptions`).
108
  - Responsiva: Tema **LeptonX** con Tailwind CSS para compatibilidad móvil.
109
  - Accesible: Cumple WCAG 2.1 con atributos ARIA en tablas y gráficos.
110
- **NFR-005 (Disponibilidad)**:
111
  - 99.9% de uptime con MySQL InnoDB Cluster.
112
  - Recuperación en menos de 1 hora mediante despliegues en la nube (AWS ECS o Azure App Service).
113
- **NFR-006 (Mantenimiento)**:
114
  - Copias de seguridad diarias con `mysqldump` o servicios en la nube.
115
  - Documentación completa en Markdown (este documento y documentos de subdominios).
116
- **NFR-007 (Compatibilidad)**:
117
  - Soporte para navegadores: Chrome, Firefox, Safari, Edge.
118
  - Compatibilidad con dispositivos móviles (iOS, Android) mediante LeptonX y Tailwind CSS.
119
120
### 4.3 Tecnologías Utilizadas
121
Basado en la documentación de ABP.IO, el proyecto utiliza:
122
- **Framework**: ABP.IO 9 con .NET 8, soportando arquitectura DDD, compatibilidad con microservicios, y modularidad.
123
- **Base de Datos**: MySQL 8.x con cifrado AES-256.
124
- **Interfaz**: ASP.NET Core MVC con Razor Pages, tema **LeptonX** (con soporte RTL y personalización), Tailwind CSS 2.2.19, Chart.js 3.9.1.
125
- **Infraestructura**:
126
  - **Módulos ABP.IO**: **Identity** (gestión de usuarios), **Account** (login, registro), **Audit Logging** (trazabilidad), **Background Jobs** (tareas asíncronas), **Distributed Event Bus** (eventos en tiempo real).
127
  - **Exportación**: LaTeX (procesado con `latexmk`) para PDF, ClosedXML 0.102.1 para Excel.
128
- **Despliegue**: Contenedores Docker en AWS ECS o Azure App Service.
129
- **Dependencias**:
130
  ```xml
131
  <!-- Crm.Web/Crm.Web.csproj -->
132
  <PackageReference Include="Volo.Abp.Identity" Version="9.0.0" />
133
  <PackageReference Include="Volo.Abp.Account" Version="9.0.0" />
134
  <PackageReference Include="Volo.Abp.AuditLogging" Version="9.0.0" />
135
  <PackageReference Include="Volo.Abp.BackgroundJobs" Version="9.0.0" />
136
  <PackageReference Include="ClosedXML" Version="0.102.1" />
137
  ```
138
139
### 4.4 Plantilla de Inicio
140
El proyecto utiliza la plantilla **Layered/Modular Monolith** de ABP.IO, que proporciona:
141
- Estructura DDD con capas separadas (`Crm.Domain`, `Crm.Application`, `Crm.EntityFrameworkCore`, `Crm.HttpApi`, `Crm.Web`).
142
- Soporte para MySQL como proveedor de base de datos.
143
- Interfaz MVC con Razor Pages, estilizada con el tema **LeptonX**.
144
145
## 5. Exclusiones del Alcance
146
- **Integraciones Externas**: No incluye integración con sistemas ERP, plataformas de mensajería (como WhatsApp), o servicios de terceros más allá de los necesarios para correos (por ejemplo, SendGrid) o notificaciones (SignalR).
147
- **Funcionalidades Avanzadas**: No cubre inteligencia artificial, análisis predictivo, o personalización avanzada de plantillas de correo.
148
- **Soporte de Idiomas Adicionales**: Limitado a inglés, español, francés, y portugués.
149
- **Módulos Adicionales de ABP.IO**: No utiliza módulos como **Payment**, **SaaS**, o **Chat** a menos que se especifique.
150
- **Aplicaciones Móviles**: No incluye desarrollo de aplicaciones móviles con React Native o .NET MAUI, aunque ABP.IO soporta plantillas para estas.
151
- **Formatos de Exportación**: Limitado a PDF (LaTeX) y Excel (ClosedXML).
152
153
## 6. Supuestos
154
- Los usuarios tienen acceso a navegadores modernos (Chrome, Firefox, Safari, Edge) y dispositivos móviles compatibles.
155
- La infraestructura en la nube (AWS, Azure) está disponible para el despliegue.
156
- Los datos iniciales (contactos, oportunidades, campañas, tareas) serán proporcionados o generados durante las pruebas.
157
- Un servicio de conversión de LaTeX a PDF (`latexmk`) está configurado en producción (por ejemplo, en un contenedor Docker con `texlive-full`).
158
- Los permisos y roles serán configurados por un administrador utilizando la interfaz de ABP.IO Identity.
159
160
## 7. Limitaciones
161
- **Rendimiento**: Depende de la optimización de consultas MySQL (índices definidos) y la capacidad del servidor.
162
- **Exportación a PDF**: Requiere un servicio externo o contenedor para procesar LaTeX en producción.
163
- **Notificaciones**: Limitadas a simulación (consola, SendGrid, o SignalR); requieren configuración adicional para entornos reales.
164
- **Escalabilidad**: Escalabilidad horizontal depende del clúster MySQL y balanceo de carga en la nube.
165
- **Multitenencia**: No implementada, aunque ABP.IO la soporta, salvo solicitud explícita.
166
167
## 8. Entregables
168
- **Código Fuente**: Solución ABP.IO con módulos para cada subdominio:
169
  - `Crm.Domain`: Entidades y servicios de dominio.
170
  - `Crm.Application`: Servicios de aplicación y DTOs.
171
  - `Crm.EntityFrameworkCore`: Configuración de MySQL con EF Core.
172
  - `Crm.HttpApi`: Endpoints REST.
173
  - `Crm.Web`: Interfaz MVC con Razor Pages, LeptonX, Tailwind CSS, y Chart.js.
174
- **Documentación**: Documentos Markdown detallando definición, alcance, y desarrollo de subdominios.
175
- **Migraciones de Base de Datos**: Scripts EF Core para MySQL.
176
- **Interfaz de Usuario**: Páginas Razor con menús simplificados (LeptonX), gráficos (Chart.js), y exportaciones (PDF, Excel).
177
- **Configuración de Seguridad**: MFA, permisos, y banner de cookies.
178
- **Instrucciones de Despliegue**: Pasos para ejecución local y en la nube.
179
180
## 9. Criterios de Éxito
181
- **Funcional**: Implementación completa de FR-001 a FR-005, cumpliendo todas las historias de usuario (HU-FR001-01 a HU-FR005-03).
182
- **No Funcional**: Cumplimiento de NFR-003 a NFR-007, verificado mediante pruebas de seguridad, accesibilidad, compatibilidad, y disponibilidad.
183
- **Usuario Final**: Interfaz intuitiva con menús simplificados (LeptonX), reportes exportables, y métricas visuales accesibles.
184
- **Técnico**: Despliegue exitoso en AWS ECS o Azure App Service, con 99.9% de uptime y backups diarios.
185
186
## 10. Estructura del Sistema
187
El sistema sigue el patrón **Domain-Driven Design (DDD)** con la plantilla **Layered/Modular Monolith** de ABP.IO:
188
- **Capa de Dominio**: Entidades (`Contact`, `Opportunity`, `Campaign`, `Task`), servicios (`ReportService`, `TaskNotificationService`), permisos (`CrmPermissionDefinitionProvider`).
189
- **Capa de Aplicación**: Servicios (`ContactAppService`, `OpportunityAppService`, `CampaignAppService`, `TaskAppService`, `ReportAppService`), DTOs.
190
- **Capa de Infraestructura**: MySQL con EF Core, índices para rendimiento.
191
- **Capa de Presentación**: Razor Pages con tema **LeptonX**, Tailwind CSS, y Chart.js.
192
- **Capa de API**: Endpoints REST en `Crm.HttpApi`.
193
194
## 11. Integración entre Subdominios
195
- **Gestión de Contactos**: Proporciona datos base (`ContactId`) para oportunidades, campañas, y tareas.
196
- **Gestión de Oportunidades**: Relacionada con contactos y tareas; alimenta métricas para reportes.
197
- **Automatización de Marketing**: Usa contactos para segmentación; métricas para reportes.
198
- **Gestión de Tareas**: Vinculada a contactos, oportunidades, y usuarios (`IdentityUser`); datos para reportes.
199
- **Reportes y Análisis**: Agrega datos de todos los subdominios; usa Chart.js, ClosedXML, y LaTeX.
200
- **Gestión de Usuarios**: Controla acceso mediante permisos (`Crm.*`) asignados a `IdentityUser`.
201
202
## 12. Aprovechamiento de ABP.IO 9
203
Basado en la documentación proporcionada, el proyecto utiliza:
204
- **Arquitectura**: DDD, modularidad, y compatibilidad con microservicios.
205
- **Infraestructura**: Módulos **Identity**, **Account**, **Audit Logging**, **Background Jobs**, y **Distributed Event Bus**.
206
- **Tema LeptonX**: Menús simplificados, soporte RTL, personalización de colores, y diseño responsivo.
207
- **Plantilla de Inicio**: **Layered/Modular Monolith** con MySQL y MVC.
208
- **Módulos Pre-construidos**:
209
  - **Identity**: Gestión de usuarios y permisos.
210
  - **Account**: Login, registro, recuperación de contraseña.
211
  - **Audit Logging**: Registro de acciones de usuarios y cambios en entidades.
212
213
## 13. Plan de Implementación
214
- **Fase 1**: Configuración de ABP.IO 9, MySQL 8.x, y estructura DDD.
215
- **Fase 2**: Desarrollo de subdominios:
216
  - Gestión de Contactos (FR-001).
217
  - Gestión de Oportunidades de Venta (FR-002).
218
  - Automatización de Marketing (FR-003).
219
  - Gestión de Tareas y Actividades (FR-004).
220
  - Reportes y Análisis (FR-005).
221
  - Gestión de Usuarios y Permisos (soporte).
222
- **Fase 3**: Configuración de seguridad (MFA, TLS, GDPR), multilingüismo, y accesibilidad con LeptonX.
223
- **Fase 4**: Pruebas unitarias, de integración, accesibilidad, y despliegue en la nube.
224
- **Fase 5**: Entrega de documentación y capacitación.
225
226
## 14. Conclusiones
227
El Sistema CRM, desarrollado con **ABP.IO 9** y **MySQL 8.x**, proporciona una solución completa para la gestión de clientes, ventas, marketing, tareas, y análisis. La arquitectura modular y DDD, junto con el tema **LeptonX** y módulos pre-construidos de ABP.IO, asegura un sistema escalable, seguro, y fácil de mantener. Este documento establece un alcance claro, integrando todos los subdominios y cumpliendo con los requerimientos funcionales y no funcionales, listo para implementación en entornos locales o en la nube.