# _MAP: MAE-016 - Gestión Documental y Planos (DMS) **Épica:** MAE-016 **Nombre:** Gestión Documental y Planos (DMS) **Fase:** 2 - Enterprise Básico **Presupuesto:** $35,000 MXN **Story Points:** 60 SP **Estado:** 📝 A crear **Sprint:** Sprint 9-10 (Semanas 17-20) **Última actualización:** 2025-11-17 **Prioridad:** P2 --- ## 📋 Propósito Sistema de gestión documental enterprise con versionado, control de acceso y flujos de aprobación, similar a Procore Docs o Autodesk Docs: - Repositorio centralizado de documentos y planos - Versionado de planos (rev. A, B, C, etc.) - Control de acceso granular por documento - Flujos de aprobación (borrador → revisado → aprobado) - Acceso desde app móvil con anotaciones - Comparación visual entre versiones de planos - Búsqueda avanzada con OCR **Integración clave:** Se vincula con Proyectos (MAI-002), Calidad (MAI-009), INFONAVIT (MAI-011) y Contratos (MAI-012). --- ## 📁 Contenido ### Requerimientos Funcionales (Estimados: 6) | ID | Título | Estado | |----|--------|--------| | RF-DMS-001 | Repositorio centralizado y clasificación de documentos | 📝 A crear | | RF-DMS-002 | Versionado y control de cambios | 📝 A crear | | RF-DMS-003 | Control de acceso granular y permisos | 📝 A crear | | RF-DMS-004 | Flujos de aprobación de documentos | 📝 A crear | | RF-DMS-005 | Visualización de planos con anotaciones | 📝 A crear | | RF-DMS-006 | Búsqueda avanzada y metadata | 📝 A crear | ### Especificaciones Técnicas (Estimadas: 6) | ID | Título | RF | Estado | |----|--------|----|--------| | ET-DMS-001 | Modelo de datos de documentos y versiones | RF-DMS-001, RF-DMS-002 | 📝 A crear | | ET-DMS-002 | Sistema de control de acceso (ACL) | RF-DMS-003 | 📝 A crear | | ET-DMS-003 | Motor de workflows de aprobación | RF-DMS-004 | 📝 A crear | | ET-DMS-004 | Visualizador de planos con canvas | RF-DMS-005 | 📝 A crear | | ET-DMS-005 | Motor de búsqueda con indexación | RF-DMS-006 | 📝 A crear | | ET-DMS-006 | Storage y CDN para archivos | RF-DMS-001 | 📝 A crear | ### Historias de Usuario (Estimadas: 12) | ID | Título | SP | Estado | |----|--------|----|--------| | US-DMS-001 | Subir documento y clasificar | 5 | 📝 A crear | | US-DMS-002 | Crear nueva versión de plano | 5 | 📝 A crear | | US-DMS-003 | Comparar versiones de plano | 5 | 📝 A crear | | US-DMS-004 | Configurar permisos por documento/carpeta | 5 | 📝 A crear | | US-DMS-005 | Iniciar workflow de aprobación | 5 | 📝 A crear | | US-DMS-006 | Aprobar/rechazar documento | 5 | 📝 A crear | | US-DMS-007 | Visualizar plano con anotaciones | 5 | 📝 A crear | | US-DMS-008 | Hacer anotaciones sobre plano desde móvil | 5 | 📝 A crear | | US-DMS-009 | Buscar documentos por metadata | 5 | 📝 A crear | | US-DMS-010 | Marcar plano como obsoleto | 5 | 📝 A crear | | US-DMS-011 | Dashboard de documentos del proyecto | 5 | 📝 A crear | | US-DMS-012 | Exportar paquete de documentos | 5 | 📝 A crear | **Total Story Points:** 60 SP ### Implementación 📊 **Inventarios de trazabilidad:** - [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) - Matriz completa de trazabilidad - [DATABASE.yml](./implementacion/DATABASE.yml) - Objetos de base de datos - [BACKEND.yml](./implementacion/BACKEND.yml) - Módulos backend - [FRONTEND.yml](./implementacion/FRONTEND.yml) - Componentes frontend ### Pruebas 📋 Documentación de testing: - [TEST-PLAN.md](./pruebas/TEST-PLAN.md) - Plan de pruebas - [TEST-CASES.md](./pruebas/TEST-CASES.md) - Casos de prueba --- ## 🔗 Referencias - **README:** [README.md](./README.md) - Descripción detallada de la épica - **Fase 2:** [../README.md](../README.md) - Información de la fase completa - **Módulo relacionado MVP:** Módulo 16 - Gestión Documental (MVP-APP.md) --- ## 📊 Métricas | Métrica | Valor | |---------|-------| | **Presupuesto estimado** | $35,000 MXN | | **Story Points estimados** | 60 SP | | **Duración estimada** | 12 días | | **Reutilización GAMILIT** | 20% (gestión de archivos básica) | | **RF a implementar** | 6/6 | | **ET a implementar** | 6/6 | | **US a completar** | 12/12 | --- ## 🎯 Módulos Afectados ### Base de Datos - **Schema:** `documents` - **Tablas principales:** * `document_categories` - Categorías de documentos * `documents` - Documentos maestros * `document_versions` - Versiones de documentos * `document_permissions` - Control de acceso * `approval_workflows` - Workflows de aprobación * `approval_steps` - Pasos del workflow * `annotations` - Anotaciones sobre planos * `document_metadata` - Metadata para búsqueda - **ENUMs:** * `document_type` (drawing, contract, specification, report, photo, rfi, submittal) * `document_status` (draft, under_review, approved, rejected, obsolete) * `permission_level` (no_access, view, comment, edit, approve, admin) * `approval_action` (pending, approved, rejected, requested_changes) ### Backend - **Módulo:** `documents` - **Path:** `apps/backend/src/modules/documents/` - **Services:** * DocumentService * VersionService * PermissionService * WorkflowService * AnnotationService * SearchService * StorageService (S3/Azure Blob) - **Controllers:** DocumentController, VersionController, WorkflowController - **Middlewares:** DocumentAccessGuard, VersionControl Middleware ### Frontend - **Features:** `documents`, `document-viewer` - **Path:** `apps/frontend/src/features/documents/` - **Componentes:** * DocumentLibrary (tree view) * DocumentUploader * DocumentDetail * VersionHistory * VersionComparator * PermissionManager * WorkflowInitiator * ApprovalDashboard * PlanViewer (canvas-based) * AnnotationTool * DocumentSearch - **Stores:** documentStore, versionStore, workflowStore ### App Móvil - **Features:** `document-viewer-mobile` - **Componentes:** * PlanViewerMobile (touch-optimized) * AnnotationToolMobile (draw on screen) * OfflineDocumentCache --- ## 📂 Estructura de Repositorio ### Taxonomía de Documentos ``` Proyecto: Fraccionamiento Los Pinos ├── 01-Planos │ ├── Arquitectónicos │ │ ├── Conjunto │ │ │ ├── PC-01-Planta de Conjunto.dwg (Rev. C) │ │ │ └── PC-02-Distribución de Prototipos.dwg (Rev. B) │ │ ├── Prototipos │ │ │ ├── PA-01-Tipo A Plantas.dwg (Rev. D) │ │ │ ├── PA-02-Tipo A Fachadas.dwg (Rev. C) │ │ │ ├── PB-01-Tipo B Plantas.dwg (Rev. B) │ │ │ └── PB-02-Tipo B Fachadas.dwg (Rev. B) │ │ └── Detalles │ ├── Estructurales │ │ ├── PE-01-Cimentación Tipo A.dwg (Rev. A) │ │ ├── PE-02-Estructura Tipo A.dwg (Rev. B) │ │ └── PE-03-Detalles Estructurales.dwg (Rev. A) │ ├── Instalaciones │ │ ├── Hidráulicas │ │ │ └── PH-01-Inst. Hidráulica Tipo A.dwg (Rev. B) │ │ ├── Sanitarias │ │ │ └── PS-01-Inst. Sanitaria Tipo A.dwg (Rev. B) │ │ ├── Eléctricas │ │ │ └── PE-01-Inst. Eléctrica Tipo A.dwg (Rev. C) │ │ └── Gas │ │ └── PG-01-Inst. Gas Tipo A.dwg (Rev. A) │ └── Urbanización │ ├── PU-01-Lotificación.dwg (Rev. B) │ ├── PU-02-Pavimentos.dwg (Rev. A) │ └── PU-03-Redes de Servicios.dwg (Rev. B) │ ├── 02-Contratos │ ├── Contrato Principal INFONAVIT.pdf │ ├── Subcontratos │ │ ├── SC-001-Instalaciones Eléctricas.pdf │ │ ├── SC-002-Plomería.pdf │ │ └── SC-003-Herrería.pdf │ └── Órdenes de Cambio │ ├── OC-001-Cambio de acabados.pdf │ └── OC-002-Ampliación caseta.pdf │ ├── 03-Especificaciones │ ├── Especificaciones Técnicas Generales.pdf │ ├── Especificaciones de Materiales.xlsx │ └── Normas Aplicables.pdf │ ├── 04-Permisos y Licencias │ ├── Licencia de Construcción.pdf │ ├── Uso de Suelo.pdf │ ├── Manifesto IMSS.pdf │ └── Impacto Ambiental.pdf │ ├── 05-RFIs (Request for Information) │ ├── RFI-001-Aclaración estructura.pdf │ ├── RFI-002-Detalle ventanería.pdf │ └── RFI-003-Ubicación registros.pdf │ ├── 06-Submittals │ ├── SUB-001-Muestras de piso.pdf │ ├── SUB-002-Ficha técnica pintura.pdf │ └── SUB-003-Certificado de cancelería.pdf │ ├── 07-Reportes │ ├── Semanales │ │ ├── Reporte Semana 01.pdf │ │ └── ... │ ├── Mensuales │ │ ├── Reporte Mes 01.pdf │ │ └── ... │ └── Fotografías │ ├── 2025-11-01-Avance Cimentación │ └── 2025-11-15-Avance Estructura │ ├── 08-Certificados │ ├── Certificado de Calidad INFONAVIT.pdf │ ├── Certificado de Sustentabilidad.pdf │ └── Garantías │ ├── Garantía Impermeabilización.pdf │ └── Garantía Cancelería.pdf │ └── 09-Manuales ├── Manual de Operación y Mantenimiento.pdf └── Manual del Propietario.pdf ``` --- ## 📄 Versionado de Planos ### Nomenclatura de Revisiones | Revisión | Descripción | Uso | |----------|-------------|-----| | **Rev. 0** | Borrador inicial | Uso interno, no para construcción | | **Rev. A** | Primera emisión formal | Para construcción | | **Rev. B** | Primera revisión | Incorpora cambios menores | | **Rev. C** | Segunda revisión | Incorpora RFIs u órdenes de cambio | | **Rev. D+** | Revisiones subsecuentes | Cambios adicionales | --- ### Ejemplo de Versión de Plano ```yaml document: id: "DOC-001" code: "PA-01" title: "Plano Arquitectónico Tipo A - Plantas" type: "drawing" category: "Planos > Arquitectónicos > Prototipos" project_id: "PROJ-001" current_version: version_number: 4 revision: "D" status: "approved" approved_date: "2025-11-15" approved_by: "Ing. María López" versions: - version: 1 revision: "0" date: "2025-01-15" description: "Borrador inicial" author: "Arq. Juan Pérez" file: "PA-01-Rev0.dwg" status: "obsolete" - version: 2 revision: "A" date: "2025-02-01" description: "Primera emisión para construcción" author: "Arq. Juan Pérez" file: "PA-01-RevA.dwg" status: "obsolete" changes: "Ajustes de dimensiones según normativa" - version: 3 revision: "B" date: "2025-05-15" description: "Revisión por cambio de ventanería" author: "Arq. Juan Pérez" file: "PA-01-RevB.dwg" status: "obsolete" changes: "Cambio de ventanas de aluminio a PVC según RFI-002" references: ["RFI-002"] - version: 4 revision: "C" date: "2025-08-20" description: "Revisión por adecuaciones INFONAVIT" author: "Arq. Juan Pérez" file: "PA-01-RevC.dwg" status: "obsolete" changes: "Incremento de superficie de recámara 2 de 7.0m² a 7.5m²" references: ["OC-001", "Observación INFONAVIT"] - version: 5 revision: "D" date: "2025-11-15" description: "Revisión por cambio de acabados" author: "Arq. Juan Pérez" file: "PA-01-RevD.dwg" status: "approved" changes: "Cambio de piso cerámico a porcelanato en sala-comedor" references: ["OC-002"] watermark: "PARA CONSTRUCCIÓN - REV D" ``` --- ## 🔒 Control de Acceso ### Niveles de Permiso | Nivel | Descripción | Acciones permitidas | |-------|-------------|---------------------| | **Sin acceso** | No puede ver el documento | - | | **Vista** | Solo lectura | Ver, descargar | | **Comentarios** | Puede agregar anotaciones | Ver, descargar, comentar | | **Edición** | Puede subir nuevas versiones | Ver, descargar, comentar, subir versión | | **Aprobación** | Puede aprobar documentos | Ver, descargar, comentar, aprobar | | **Admin** | Control total | Todas las anteriores + eliminar, cambiar permisos | --- ### Matriz de Permisos por Rol | Carpeta / Documento | Director | Ingeniero | Residente | Subcontratista | Cliente | |---------------------|----------|-----------|-----------|----------------|---------| | **Planos Arquitectónicos** | Admin | Edición | Vista | Vista | Sin acceso | | **Planos Instalaciones** | Admin | Edición | Vista | Edición* | Sin acceso | | **Contratos** | Admin | Vista | Sin acceso | Vista* | Sin acceso | | **RFIs** | Vista | Edición | Edición | Vista | Sin acceso | | **Reportes** | Admin | Vista | Edición | Sin acceso | Sin acceso | | **Planos As-Built** | Admin | Edición | Comentarios | Sin acceso | Vista | (*) Solo para su especialidad --- ## ✅ Flujos de Aprobación ### Workflow Típico: Aprobación de Plano ```mermaid graph LR A[Borrador] --> B{Revisión Técnica} B -->|Rechazado| A B -->|Aprobado| C{Revisión Cliente} C -->|Cambios requeridos| A C -->|Aprobado| D[Aprobado para Construcción] D --> E[Vigente] ``` --- ### Ejemplo de Workflow ```yaml workflow: id: "WF-2025-045" document_id: "DOC-001" document_version: 5 title: "Aprobación Plano PA-01 Rev. D" initiated_by: "Arq. Juan Pérez" initiated_date: "2025-11-10" status: "completed" steps: - step: 1 role: "Ingeniero Estructural" assignee: "Ing. Carlos Ramírez" action_required: "approval" status: "approved" completed_date: "2025-11-11" notes: "Sin conflictos estructurales" - step: 2 role: "Residente de Obra" assignee: "Ing. Pedro Martínez" action_required: "approval" status: "approved" completed_date: "2025-11-12" notes: "Verificado en sitio, viable" - step: 3 role: "Director Técnico" assignee: "Ing. María López" action_required: "approval" status: "approved" completed_date: "2025-11-15" notes: "Aprobado para construcción" final_approval: true final_status: "approved" approved_date: "2025-11-15" watermark_added: "PARA CONSTRUCCIÓN - REV D - APROBADO 2025-11-15" ``` --- ## 🖼️ Visualizador de Planos ### Funcionalidades 1. **Navegación:** - Zoom in/out - Pan (arrastrar) - Ajustar a pantalla - Rotación 2. **Anotaciones:** - Dibujo libre (lápiz) - Formas (círculo, rectángulo, flecha) - Texto - Mediciones (distancia, área) - Marcadores de ubicación 3. **Comparación:** - Vista lado a lado de 2 versiones - Overlay con opacidad ajustable - Resaltado de diferencias automático 4. **Colaboración:** - Anotaciones multi-usuario - Comentarios vinculados a punto en plano - Notificaciones en tiempo real --- ### Ejemplo de Anotación ```yaml annotation: id: "ANN-123" document_id: "DOC-001" document_version: 5 created_by: "Residente Pedro Martínez" created_date: "2025-11-16T10:30:00Z" type: "comment" position: x: 1250 # píxeles y: 800 page: 1 shape: type: "circle" radius: 20 color: "#FF0000" content: text: "Verificar medida de ventana en sitio. Parece tener 10cm menos." priority: "high" status: "open" responses: - user: "Arq. Juan Pérez" date: "2025-11-16T14:00:00Z" text: "Verificado en sitio, es correcto. Ventana instalada según especificación." resolved_by: "Arq. Juan Pérez" resolved_date: "2025-11-16T14:00:00Z" ``` --- ## 🔍 Búsqueda Avanzada ### Criterios de Búsqueda | Campo | Tipo | Ejemplo | |-------|------|---------| | **Texto completo** | Full-text | "instalación eléctrica" | | **Código** | Exacto | "PA-01" | | **Categoría** | Jerárquico | "Planos > Arquitectónicos" | | **Tipo** | Enum | "Plano", "Contrato", "RFI" | | **Estado** | Enum | "Aprobado", "Vigente" | | **Revisión** | Texto | "Rev. D" | | **Autor** | Usuario | "Arq. Juan Pérez" | | **Fecha** | Rango | "2025-01-01" a "2025-12-31" | | **Proyecto** | Relación | "Fraccionamiento Los Pinos" | | **Tags** | Múltiple | "tipo-a", "instalaciones", "aprobado-infonavit" | --- ### OCR para Búsqueda **Proceso:** 1. Al subir PDF escaneado o imagen 2. Sistema ejecuta OCR (Tesseract o Cloud Vision API) 3. Texto extraído se indexa para búsqueda 4. Usuario puede buscar contenido dentro de escaneos **Ejemplo:** - Documento: Licencia de construcción (PDF escaneado) - OCR detecta: "Licencia de construcción No. 2025-456..." - Usuario busca: "licencia 2025" - Resultado: Se encuentra el documento --- ## 📊 Dashboard de Documentos ### Indicadores | Métrica | Valor | Meta | |---------|-------|------| | **Total documentos** | 1,250 | - | | **Planos vigentes** | 85 | 100% al día | | **Planos obsoletos** | 120 | Archivados | | **Documentos en revisión** | 12 | <20 | | **RFIs pendientes** | 3 | <5 | | **Aprobaciones pendientes** | 5 | <10 | | **Espacio usado** | 45 GB | <100 GB | --- ## 🚨 Puntos Críticos 1. **Versionado estricto:** Nunca sobrescribir, siempre nueva versión 2. **Planos obsoletos:** Marcar claramente para evitar uso incorrecto 3. **Control de acceso:** Subcontratistas solo ven su especialidad 4. **Aprobaciones formales:** Workflow obligatorio para planos de construcción 5. **Backup:** Repositorio crítico, backup diario 6. **Sincronización móvil:** Cache offline para uso en obra 7. **Watermarks:** Planos para construcción deben estar marcados --- ## 🎯 Siguiente Paso Crear documentación de requerimientos y especificaciones técnicas del módulo. --- **Generado:** 2025-11-17 **Mantenedores:** @tech-lead @backend-team @frontend-team @document-team **Estado:** 📝 A crear