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. |