#!/usr/bin/env python """ Script de inicialización para el Sistema de Gestión de Documentos ARCH. Crea la estructura inicial de directorios y archivos necesarios. """ import os import json import bcrypt from datetime import datetime import pytz def main(): """Función principal de inicialización.""" print("Inicializando Sistema de Gestión de Documentos ARCH...") # Crear estructura de directorios print("Creando estructura de directorios...") create_directory_structure() # Inicializar archivos JSON print("Inicializando archivos de datos...") initialize_json_files() print("\nSistema inicializado correctamente!") print("\nPuede iniciar la aplicación con el comando:") print(" flask run") print("\nCredenciales de acceso por defecto:") print(" Usuario: admin") print(" Contraseña: admin123") print("\nNOTA: Cambie la contraseña después del primer inicio de sesión.") def create_directory_structure(): """Crear la estructura de directorios necesaria.""" # Directorios principales dirs = [ 'storage', 'storage/logs', 'storage/schemas', 'storage/users', 'storage/filetypes', 'storage/projects', ] for directory in dirs: os.makedirs(directory, exist_ok=True) print(f" Creado: {directory}") def initialize_json_files(): """Inicializar archivos JSON con datos por defecto.""" # Índices indices = { "max_project_id": 0, "max_document_id": 0 } save_json('storage/indices.json', indices) # Usuarios admin_password = bcrypt.hashpw("admin123".encode('utf-8'), bcrypt.gensalt()).decode('utf-8') users = { "admin": { "nombre": "Administrador", "username": "admin", "email": "admin@ejemplo.com", "password_hash": admin_password, "nivel": 9999, "idioma": "es", "fecha_caducidad": None, "empresa": "ARCH", "estado": "activo", "ultimo_acceso": datetime.now(pytz.UTC).isoformat() } } save_json('storage/users/users.json', users) # Tipos de archivo filetypes = { "pdf": { "extension": "pdf", "descripcion": "Documento PDF", "mime_type": "application/pdf", "tamano_maximo": 20971520 # 20MB }, "txt": { "extension": "txt", "descripcion": "Documento de texto", "mime_type": "text/plain", "tamano_maximo": 5242880 # 5MB }, "zip": { "extension": "zip", "descripcion": "Archivo comprimido", "mime_type": "application/zip", "tamano_maximo": 104857600 # 100MB }, "docx": { "extension": "docx", "descripcion": "Documento Word", "mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "tamano_maximo": 20971520 # 20MB }, "xlsx": { "extension": "xlsx", "descripcion": "Hoja de cálculo Excel", "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "tamano_maximo": 20971520 # 20MB }, "dwg": { "extension": "dwg", "descripcion": "Dibujo AutoCAD", "mime_type": "application/acad", "tamano_maximo": 52428800 # 50MB } } save_json('storage/filetypes/filetypes.json', filetypes) # Esquemas schemas = { "ESQ001": { "codigo": "ESQ001", "descripcion": "Proyecto estándar", "fecha_creacion": datetime.now(pytz.UTC).isoformat(), "creado_por": "admin", "documentos": [ { "tipo": "pdf", "nombre": "Manual de Usuario", "nivel_ver": 0, "nivel_editar": 5000 }, { "tipo": "dwg", "nombre": "Planos Técnicos", "nivel_ver": 0, "nivel_editar": 5000 }, { "tipo": "zip", "nombre": "Archivos Fuente", "nivel_ver": 1000, "nivel_editar": 5000 }, { "tipo": "xlsx", "nombre": "Datos y Cálculos", "nivel_ver": 0, "nivel_editar": 1000 } ] }, "ESQ002": { "codigo": "ESQ002", "descripcion": "Documentación técnica", "fecha_creacion": datetime.now(pytz.UTC).isoformat(), "creado_por": "admin", "documentos": [ { "tipo": "pdf", "nombre": "Especificaciones Técnicas", "nivel_ver": 0, "nivel_editar": 5000 }, { "tipo": "pdf", "nombre": "Manual de Mantenimiento", "nivel_ver": 0, "nivel_editar": 5000 }, { "tipo": "pdf", "nombre": "Certificaciones", "nivel_ver": 0, "nivel_editar": 9000 } ] } } save_json('storage/schemas/schema.json', schemas) def save_json(file_path, data): """Guardar datos en archivo JSON con formato.""" with open(file_path, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2) print(f" Inicializado: {file_path}") if __name__ == '__main__': main()