Estructura del Proyecto¶
Visión General¶
El proyecto GestionExpedienteElectronico_Version1 sigue una estructura organizada que separa claramente las responsabilidades según el patrón MVC (Model-View-Controller) con componentes especializados.
Estructura de Directorios¶
GestionExpedienteElectronico_Version1/
├── 📁 src/ # Código fuente principal
│ ├── 📄 __main__.py # Punto de entrada de la aplicación
│ ├── 📁 model/ # Capa de Modelo - Lógica de negocio
│ │ ├── 📄 __init__.py
│ │ ├── 📄 file_processor.py # Motor principal de procesamiento
│ │ ├── 📄 metadata_extractor.py # Factory para extractores
│ │ ├── 📄 folder_analyzer.py # Análisis de estructura de carpetas
│ │ └── 📄 logger_config.py # Configuración de logging
│ ├── 📁 view/ # Capa de Vista - Interfaz gráfica
│ │ ├── 📄 __init__.py
│ │ ├── 📄 application.py # GUI principal (Tkinter)
│ │ ├── 📄 tooltip.py # Sistema de ayuda interactivo
│ │ └── 📄 tools_launcher.py # Ventana de herramientas
│ ├── 📁 controller/ # Capa de Controlador - Coordinación
│ │ ├── 📄 __init__.py
│ │ ├── 📄 processing_context.py # Coordinador del patrón Strategy
│ │ ├── 📄 process_strategy.py # Estrategias de procesamiento
│ │ └── 📄 gui_notifier.py # Patrón Observer para GUI
│ ├── 📁 utils/ # Utilidades generales
│ │ ├── 📄 __init__.py
│ │ └── 📄 resource_manager.py # Gestión de recursos multiplataforma
│ ├── 📁 assets/ # Recursos estáticos
│ │ ├── 📄 000IndiceElectronicoC0.xlsm # Template Excel
│ │ ├── 📄 JUZGADOS.csv # Datos de referencia
│ │ ├── 📄 TRD.csv # Clasificación documental
│ │ ├── 📄 last_version.json # Control de versiones
│ │ └── 🖼️ [imágenes UI] # Iconos y recursos gráficos
│ └── 📁 test/ # Suite de pruebas
│ ├── 📄 test.py # Tests principales
│ ├── 📄 test_page_counter.py # Tests conteo páginas
│ └── 📄 test_excel_manipulation.py # Tests Excel
├── 📁 config/ # Configuración de build
│ ├── 📄 main.spec # Configuración PyInstaller
│ └── 📄 README.MD # Documentación de configuración
├── 📁 docs/ # Documentación técnica (legacy)
├── 📁 logs/ # Archivos de log de la aplicación
├── 📁 build/ # Archivos temporales de build
├── 📁 dist/ # Ejecutables generados
├── 📄 requirements.txt # Dependencias Python
├── 📄 README.md # Documentación principal
├── 📄 LICENSE # Licencia del proyecto
└── 📄 CLAUDE.md # Instrucciones para Claude Code
Detalle de Componentes Principales¶
Entry Point¶
src/__main__.py¶
"""
Punto de entrada principal de la aplicación.
Responsabilidades:
- Inicialización del sistema
- Configuración de logging
- Lanzamiento de la GUI principal
"""
Características: - Configuración inicial del sistema - Manejo de argumentos de línea de comandos - Inicialización de logging - Bootstrap de la aplicación GUI
Capa Model - Lógica de Negocio¶
src/model/file_processor.py¶
class FileProcessor:
"""
Motor central de procesamiento con integración Excel/xlwings.
Responsabilidades:
- Generación de índices Excel con fórmulas automáticas
- Coordinación de extracción de metadatos
- Manejo de errores y recuperación
- Interfaz con Excel COM automation
"""
Métodos principales:
- process_files(folder_path: str) -> bool
- generate_excel_index(data: List[Dict]) -> str
- apply_excel_formulas(workbook: xlwings.Book) -> None
src/model/metadata_extractor.py¶
class MetadataExtractorFactory:
"""
Factory Pattern para creación de extractores especializados.
Soporta:
- PDF (PyPDF2 + manejo de archivos protegidos)
- Word (.docx, .doc)
- Excel (.xlsx, .xls)
"""
@staticmethod
def create_extractor(file_path: str) -> BaseExtractor
Extractores implementados:
- PDFExtractor: Extracción de páginas y metadatos PDF
- WordExtractor: Análisis de documentos Word
- ExcelExtractor: Metadatos de hojas de cálculo
src/model/folder_analyzer.py¶
class FolderAnalyzer:
"""
Análisis profundo de estructura de carpetas y validación CUI.
Capacidades:
- Validación de estructura jerárquica
- Detección de CUIs inválidos (23 dígitos)
- Identificación de subcarpetas problemáticas
- Análisis de compliance con estándares judiciales
"""
src/model/logger_config.py¶
class LoggerConfig:
"""
Configuración centralizada de logging con rotación.
Características:
- Rotación automática de logs
- Múltiples niveles (DEBUG, INFO, WARNING, ERROR)
- Formato estandarizado
- Persistencia en directorio logs/
"""
Capa View - Interfaz Gráfica¶
src/view/application.py¶
class Application:
"""
GUI principal COMPLETAMENTE UNIFICADA (~730 líneas).
Responsabilidades EXCLUSIVAMENTE de GUI:
- Creación y gestión de widgets Tkinter
- Manejo de eventos de usuario (clicks, selecciones)
- Flujo 100% unificado para las 3 estrategias
- Control de estado visual
- Gestión de versiones y actualizaciones
"""
Características destacadas:
- Flujo unificado: obtener_rutas() y procesa_expedientes() idénticos
- Eliminación de duplicación: Sin manejo diferenciado por selected_value
- Reducción del 20%: Código más limpio y mantenible
- Observer integration: Recepción de notificaciones en tiempo real
src/view/tooltip.py¶
class ToolTip:
"""
Sistema de ayuda interactivo con imágenes.
Funcionalidades:
- Tooltips contextuales
- Soporte para imágenes
- Posicionamiento dinámico
- Integración seamless con GUI principal
"""
src/view/tools_launcher.py¶
class ToolsLauncher:
"""
Ventana de herramientas adicionales.
Proporciona:
- Banco de herramientas complementarias
- Utilidades de mantenimiento
- Funciones auxiliares para usuarios
"""
Capa Controller - Coordinación¶
src/controller/processing_context.py¶
class ProcessingContext:
"""
Coordinador SIMPLIFICADO del patrón Strategy.
Responsabilidades:
- Gestión de intercambio dinámico de estrategias
- Coordinación entre GUI y estrategias
- Manejo de estado de procesamiento
"""
def set_strategy(self, strategy: ProcessStrategy) -> None
def execute_processing(self) -> bool
src/controller/process_strategy.py¶
class ProcessStrategy(ABC):
"""
Clase base para estrategias 100% AUTÓNOMAS.
Cada implementación maneja:
- Selección de carpeta propia con filedialog
- Validación de estructura específica
- Confirmaciones de usuario
- Procesamiento independiente
- Notificaciones GUI via Observer
"""
Estrategias implementadas:
SingleCuadernoStrategy¶
class SingleCuadernoStrategy(ProcessStrategy):
"""
Procesamiento de cuaderno único - Estructura plana.
Características:
- Validación CUI individual (string)
- Detección automática de anexos masivos
- Procesamiento directo de archivos
"""
SingleExpedienteStrategy¶
class SingleExpedienteStrategy(ProcessStrategy):
"""
Procesamiento de expediente único - 4 niveles jerárquicos.
Niveles: Expediente → Instancia → Cuaderno → Archivos
- Validación CUI en conjunto (set)
- Manejo complejo de subcarpetas
- Reportes detallados de estructura
"""
MultiExpedienteStrategy¶
class MultiExpedienteStrategy(ProcessStrategy):
"""
Procesamiento múltiple - 5 niveles jerárquicos.
Niveles: Año → Expediente → Instancia → Cuaderno → Archivos
- Validación masiva de CUIs
- Procesamiento batch escalable
- Reportes consolidados
"""
src/controller/gui_notifier.py¶
class GUINotifier:
"""
Patrón Observer UNIFICADO para todas las estrategias.
Tipos de mensaje:
- MessageType.PROGRESS: Actualización barras de progreso
- MessageType.STATUS: Mensajes de estado
- MessageType.TEXT: Log de actividad
- MessageType.DIALOG: Diálogos de interacción
"""
Utilidades¶
src/utils/resource_manager.py¶
class ResourceManager:
"""
Gestión multiplataforma de rutas y recursos.
Características:
- Detección automática entorno desarrollo vs producción
- Rutas absolutas multiplataforma
- Acceso a assets independiente del contexto de ejecución
"""
Recursos y Assets¶
src/assets/¶
Directorio que contiene todos los recursos estáticos necesarios:
000IndiceElectronicoC0.xlsm: Template Excel oficial para índicesJUZGADOS.csv: Base de datos de juzgados colombianosTRD.csv: Clasificación de tipos documentales (TRD)last_version.json: Control de versiones para actualizaciones automáticas- Imágenes UI: Iconos, logos y recursos gráficos
Archivos de Datos de Referencia¶
JUZGADOS.csv¶
codigo,nombre,ciudad,especialidad
001,Juzgado Primero Civil Municipal,Bogotá,Civil
002,Juzgado Segundo Penal del Circuito,Medellín,Penal
...
TRD.csv - Tabla de Retención Documental¶
codigo,tipo_documento,tiempo_retencion,disposicion
001,Demanda,Permanente,Conservar
002,Contestación,10 años,Eliminar
...
Testing¶
src/test/¶
Suite de pruebas para validación de funcionalidades:
test.py: Tests generales de funcionalidadtest_page_counter.py: Validación de conteo de páginastest_excel_manipulation.py: Tests de automatización Excel
Configuración y Build¶
config/main.spec¶
Archivo de configuración de PyInstaller para generación de ejecutables:
# -*- mode: python ; coding: utf-8 -*-
# Configuración completa para empaquetado con PyInstaller
# Incluye manejo de dependencias y recursos
requirements.txt¶
xlwings==0.28.5 # Automatización Excel (crítico)
pandas==1.5.2 # Manipulación de datos
PyPDF2==2.11.2 # Procesamiento PDF
pywin32==306 # Integración COM Windows
Pillow>=8.3.2 # Procesamiento de imágenes
send2trash>=1.8.0 # Eliminación segura de archivos
Patrones de Dependencias¶
graph TD
A[__main__.py] --> B[application.py]
B --> C[processing_context.py]
C --> D[process_strategy.py]
D --> E[file_processor.py]
E --> F[metadata_extractor.py]
E --> G[folder_analyzer.py]
H[gui_notifier.py] --> B
D --> H
I[logger_config.py] --> E
I --> G
J[resource_manager.py] --> F
J --> B
Principios de Organización¶
Separación de Responsabilidades¶
- Model: Lógica de negocio pura, sin dependencias GUI
- View: Interfaz gráfica exclusivamente, sin lógica de negocio
- Controller: Coordinación y flujo, actuando como intermediario
Inversión de Dependencias¶
- Abstracciones: Estrategias dependen de interfaces, no implementaciones
- Inyección: Notificadores y loggers inyectados, no instanciados directamente
- Configuración: Dependencias configurables via parámetros
Cohesión Alta¶
- Funcionalidades relacionadas agrupadas en módulos específicos
- Responsabilidades bien definidas para cada clase
- Interfaz mínima entre componentes
Navegación de Código
Para explorar el código en detalle, consulta el repositorio en GitHub o revisa la Guía de Desarrollo.