This commit is contained in:
Miguel 2025-03-03 18:39:37 +01:00
commit 70de427e7e
3 changed files with 408 additions and 0 deletions

127
.gitignore vendored Normal file
View File

@ -0,0 +1,127 @@
### Flask specific ###
instance/
.webassets-cache
flask_session/
# SQLite database files
*.sqlite
*.sqlite3
*.db
### Project specific ###
# Storage directory - contains all user data
/storage/
# Allow keeping the directory structure with .gitkeep
!storage/.gitkeep
!storage/schemas/.gitkeep
!storage/users/.gitkeep
!storage/projects/.gitkeep
!storage/schemas/templates/.gitkeep
# Local configuration
.env
config.local.py
*.local.py
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# Environments
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Logs
logs/
*.log
# IDE specific files
.idea/
.vscode/
*.swp
*.swo
.DS_Store
# Ruff stuff:
.ruff_cache/
# Package management
.pdm.toml
.pdm-python
.pdm-build/
.pypirc
__pypackages__/
# Type checkers
.mypy_cache/
.dmypy.json
dmypy.json
.pyre/
.pytype/
# Cython debug symbols
cython_debug/

267
descripcion.md Normal file
View File

@ -0,0 +1,267 @@
# Sistema de Gestión de Documentos para Proyectos de Ingeniería - ARCH
## Descripción General
Un sistema robusto de gestión documental destinado a equipos de ingeniería, diseñado para almacenar, organizar y versionar los archivos críticos de cada proyecto. El sistema utiliza una arquitectura basada en archivos JSON y sistema de ficheros para facilitar el mantenimiento y las copias de seguridad.
## Estructura de Usuarios y Permisos
### Niveles de Usuario
- **Nivel 0**: Usuario básico (solo lectura de documentos autorizados)
- **Nivel 5000**: Gestor de proyectos (creación y gestión de proyectos)
- **Nivel 9000**: Mantenimiento (configuración técnica y tipos de archivo)
- **Nivel 9999**: Administrador (acceso total al sistema)
### Atributos de Usuario
- Nombre completo
- Nombre de usuario (username)
- Correo electrónico
- Nivel de permisos
- Idioma preferido
- Fecha de caducidad
- Empresa a la que pertenece
## Componentes del Sistema
### Gestión de Tipos de Archivo
- Extensiones aceptadas en el sistema
- Descripción de cada tipo de archivo
- Nivel mínimo requerido para administrar: 9000
### Gestión de Esquemas
- Código único del esquema
- Descripción detallada
- Lista de documentos asociados con:
- Tipo de archivo permitido
- Nivel mínimo requerido para visualización
- Nivel mínimo requerido para cargar nuevas versiones
- Nivel mínimo requerido para gestionar: 5000
### Gestión de Proyectos
- Código alfanumérico único (10 caracteres)
- Referencia a proyecto padre (estructura jerárquica)
- Esquema asociado (define qué documentos contiene)
- Descripción del proyecto
- Cliente
- Destinación/ubicación
- Año de creación
- Nivel mínimo requerido para crear/modificar: 5000
## Estructura del Frontend
```
Frontend Sistema de Gestión de Documentos - ARCH
├── Página de Inicio/Login
│ ├── Formulario de inicio de sesión
│ └── Información básica del sistema
├── Panel Principal
│ │
│ ├── Cabecera
│ │ ├── Logo del sistema - ARCH
│ │ ├── Barra de búsqueda avanzada
│ │ │ └── Filtros por: tipo de proyecto, tipo de máquina, cliente, año
│ │ └── Menú de usuario (perfil, configuración, salir)
│ │
│ ├── Menú de Navegación
│ │ ├── Administración Proyectos (nivel ≥ 5000)
│ │ ├── Administración de usuarios (nivel ≥ 9000)
│ │ ├── Administración de esquemas (nivel ≥ 5000)
│ │ ├── Diagnóstico del sistema (nivel = 9999)
│ │ └── Copia de seguridad (nivel ≥ 9000)
│ │
│ └── Área de Contenido Principal
│ ├── Listado de Proyectos (resultados de búsqueda)
│ │ └── Tabla con columnas: código, descripción, cliente, destinación, año, acciones
│ └── Botón "Nuevo Proyecto" (visible si nivel ≥ 5000)
├── Gestión de Proyectos
│ │
│ └── Vista de Proyecto
│ ├── Información del proyecto
│ │ ├── Datos básicos (código, descripción, cliente, destinación, año)
│ │ └── Árbol de navegación de proyectos padre/hijo
│ │
│ └── Listado de Documentos
│ └── Tabla de documentos
│ ├── Columnas: nombre, tipo, última versión, fecha de actualización
│ └── Acciones: ver historial, descargar, subir nueva versión, editar descripción
├── Gestión de Documentos
│ │
│ ├── Subir Documento
│ │ ├── Selector de archivo (con validación de tipo permitido)
│ │ └── Campos de metadatos (descripción, etiquetas)
│ │
│ └── Historial de Versiones
│ ├── Información del documento
│ └── Lista cronológica de versiones
│ └── Detalle por versión: fecha, usuario, descripción, acciones
└── Módulos de Administración
├── Gestión de Usuarios (nivel ≥ 9000)
│ ├── Listado de usuarios
│ ├── Formulario de creación/edición
│ └── Gestión de niveles de acceso
├── Gestión de Esquemas (nivel ≥ 5000)
│ ├── Listado de esquemas
│ ├── Editor de esquemas
│ └── Asignación de tipos de documentos y niveles
├── Gestión de Tipos de Archivo (nivel ≥ 9000)
│ ├── Listado de extensiones permitidas
│ └── Configuración de nuevos tipos
└── Diagnóstico del Sistema (nivel = 9999)
├── Estado del almacenamiento
├── Logs de actividad
└── Herramientas de mantenimiento
```
## Flujos de Trabajo Principales
### Búsqueda y Acceso a Proyectos
1. El usuario inicia sesión con sus credenciales
2. Utiliza la barra de búsqueda con filtros avanzados
3. El sistema muestra los proyectos que cumplen con los criterios
4. El usuario selecciona un proyecto para ver sus detalles y documentos
### Gestión de Documentos
1. Dentro de un proyecto, el usuario visualiza la lista de documentos según el esquema
2. Puede descargar documentos si tiene el nivel mínimo requerido
3. Si tiene permisos suficientes, puede subir nuevas versiones
4. El sistema mantiene un historial completo de todas las versiones
### Administración del Sistema
1. Usuarios con nivel ≥ 5000 pueden crear y gestionar proyectos
2. Usuarios con nivel ≥ 9000 pueden administrar usuarios y tipos de archivo
3. Administradores (nivel 9999) tienen acceso completo, incluyendo diagnóstico
## Características Técnicas
- Arquitectura basada en archivos JSON para facilitar backups
- Sistema de versionado completo para cada documento
- Control de acceso granular basado en niveles de usuario
- Estructura jerárquica de proyectos con relaciones padre-hijo
- Validación de tipos de archivo según configuración del sistema
- Interfaz intuitiva con búsqueda avanzada y filtros contextuales
El sistema ARCH proporciona una solución completa para la gestión documental de proyectos de ingeniería, con un enfoque en la facilidad de mantenimiento, control de versiones y seguridad basada en niveles de acceso definidos.
## Estructura de Archivos y Directorios
document_manager/
├── app.py # Punto de entrada de la aplicación
├── requirements.txt # Dependencias del proyecto
├── services/ # Servicios del sistema
├── routes/ # Rutas de la aplicación
├── static/ # Archivos estáticos
├── templates/ # Plantillas HTML
│ ├── projects/ # Plantillas de proyectos
│ └── documents/ # Plantillas de documentos
└── storage/ # Almacenamiento de datos
├── indices.json # Índices centralizados
├── schemas/
│ ├── schema.json # Lista de Esquemas
├── users/
│ ├── users.json # Usuarios regulares
└── projects/
├── @id_num_@project_name_dir/
│ ├── project_meta.json # Metadatos del proyecto
│ ├── schema.json # Esquema usado en particular
│ ├── permissions.json # Permisos de acceso
│ └── documents/ # Documentos del proyecto
│ ├── @id_num_@doc_name/
│ │ ├── v001_doc_name # Archivo versión 1
│ │ ├── v002_doc_name # Archivo versión 2
│ │ ├── meta.json # Lista de metadatos del documento y descripcion cada version
│ ├── id_num_doc_name/
│ │ ├── v001_doc_name # Archivo versión 1
│ │ ├── meta.json # Lista de metadatos del documento y descripcion cada version
│ └── ...
└── ...
@id_num : numero consecutivo de proyecto o documento. Cada vez que se inicia la aplicación se busca el numero mas alto para usar el numero siguiente en un proyecto nuevo.
@project_name : Codigo + "_" + Descripcion ( hasta 30 letras - filtrado de letras admitidas por el filesystem )
@doc_name : Descripcion ( hasta 30 letras - filtrado de letras admitidas por el filesystem )
# Sistema de Gestión de Documentos para Proyectos de Ingeniería
## Descripción General
El Sistema de Gestión de Documentos es una aplicación web desarrollada con Flask que permite almacenar y gestionar backups de archivos y documentos de proyectos de ingeniería. El sistema proporciona una organización jerárquica basada en proyectos, control de versiones de documentos, y esquemas dinámicos personalizables para diferentes tipos de proyectos.
## Enfoque Técnico
Hemos optado por un enfoque simple y robusto basado completamente en JSON y sistema de archivos, eliminando la necesidad de una base de datos relacional tradicional. Esto simplifica la arquitectura, facilita los backups y permite una fácil inspección de datos. Para mantener un rendimiento óptimo, implementamos un sistema de caché e índices.
### Decisiones Técnicas Clave
**Almacenamiento basado en archivos**: Toda la información se almacena en archivos JSON dentro de una estructura de directorios.
**Front-end con Bootstrap**: Interface sencilla y responsive utilizando Bootstrap para una rápida implementación.
## Estructura de Datos
### Proyectos
- Cada proyecto tiene un directorio único identificado @id_num_@project_name_dir basado es un numero unico incremental. El nombre fisico en disco se establece como un numero consecutivo rellenado con 6 ceros a la izquierda segudido de un punto y luego el nombre del proyecto definido como @project_name. El numero consecutivo es irrepetible. El sistema al iniciar debe comprobar cual es el numero maximo actual. Este numero se incrementa cada vez que se crea un nuevo proyecto.
- Los proyectos contienen metadatos, permisos, un esquema y documentos.
- Al crear un proyecto se asocia a un esquema. Este esquema se copia en el directorio del proyecto. Luego se puede modificar dentro del proyecto.
- Los proyectos pueden tener proyectos padres.
### Usuarios
- Almacenados en archivos JSON.
### Documentos
- Organizados en directorios por proyecto. El nombre del directorio sigue el mismo formato que los nombres de directorios, inicia con un numero consecutivo y luego el nombre del documento hasta 30 caracteres segun definido en @doc_name.
- Sistema de versionado que mantiene todas las versiones anteriores.
- Cada versión incluye metadatos como autor, fecha y descripcion de la version en un archivo json.
## Funcionalidades Principales
### 1. Gestión de Usuarios
- Registro y autenticación de usuarios
- Gestión de roles (administrador, usuario regular, mantenimiento)
- Perfiles de usuario con información personalizada
### 2. Gestión de Proyectos
- Creación y configuración de proyectos
- Asignación de usuarios con permisos granulares
- Búsqueda y filtrado de proyectos
- Esquemas personalizables por proyecto una vez creado el proyecto
### 3. Gestión de Documentos
- Sistema de Carga y Descarga para archivos. Cada documento es un unico archivo.
- Versionado completo de documentos
- Historial de cambios por documento
- Metadatos y comentarios por versión
### 4. Control de Acceso
- Permisos granulares por proyecto
- Registro de actividad (logs)
- Restricción de acceso a nivel de proyecto y documento
## Flujos de Trabajo Principales
### Creación de un Proyecto
1. Usuario se autentica
2. Crea nuevo proyecto y define metadatos básicos
3. Opcionalmente personaliza el esquema del proyecto o eligue un esquema ya definido
4. Completa la información requerida según el esquema
5. Sistema asigna permisos iniciales
### Gestión de Documentos
1. Usuario accede a un proyecto
2. Realiza Carga/Descarga de un documento (opcional)
3. Sistema registra nueva versión manteniendo historial
### Actualización de Datos del Proyecto
1. Usuario accede a un proyecto con permisos de escritura
2. Edita la información a través de formularios
3. Sistema valida los datos según las reglas del esquema
4. Se guardan los cambios manteniendo registro de modificaciones

14
requirements.txt Normal file
View File

@ -0,0 +1,14 @@
Flask==2.3.3
Werkzeug==2.3.7
Jinja2==3.1.2
itsdangerous==2.1.2
click==8.1.3
python-dateutil==2.8.2
python-dotenv==1.0.0
Flask-WTF==1.2.1
WTForms==3.0.1
Flask-Session==0.5.0
urllib3==2.0.4
requests==2.31.0
boto3==1.28.16
pytz==2023.3