{"id":51475996,"url":"https://github.com/alberto2005-coder/rcp-gestion-empresarial","last_synced_at":"2026-07-06T21:01:06.059Z","repository":{"id":361124621,"uuid":"1253183360","full_name":"alberto2005-coder/rcp-gestion-empresarial","owner":"alberto2005-coder","description":"Aplicación de escritorio moderna (RCP) desarrollada con JavaFX 21 y SQLite para la gestión integral de empresas (Clientes, Empleados, Pedidos, Reportes y Auditoría). Incluye interfaz premium adaptable con AtlantaFX y un prototipo web SPA sincronizable e integrado con EmailJS para la recuperación de cuentas.","archived":false,"fork":false,"pushed_at":"2026-05-29T08:36:04.000Z","size":992,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T10:15:46.505Z","etag":null,"topics":["atlantafx","crm","desktop-app","desktop-application","emailjs","enterprise-management","erp","jakarta-mail","java21","javafx","management-system","maven","spa","sqlite","theme-switcher"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alberto2005-coder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-29T08:14:17.000Z","updated_at":"2026-05-29T08:36:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alberto2005-coder/rcp-gestion-empresarial","commit_stats":null,"previous_names":["alberto2005-coder/rcp-gestion-empresarial"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/alberto2005-coder/rcp-gestion-empresarial","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto2005-coder%2Frcp-gestion-empresarial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto2005-coder%2Frcp-gestion-empresarial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto2005-coder%2Frcp-gestion-empresarial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto2005-coder%2Frcp-gestion-empresarial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alberto2005-coder","download_url":"https://codeload.github.com/alberto2005-coder/rcp-gestion-empresarial/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alberto2005-coder%2Frcp-gestion-empresarial/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35205739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atlantafx","crm","desktop-app","desktop-application","emailjs","enterprise-management","erp","jakarta-mail","java21","javafx","management-system","maven","spa","sqlite","theme-switcher"],"created_at":"2026-07-06T21:01:05.130Z","updated_at":"2026-07-06T21:01:06.035Z","avatar_url":"https://github.com/alberto2005-coder.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏢 RCP Gestión Empresarial — Enterprise Architecture\n\n[![Java Version](https://img.shields.io/badge/Java-21%2B-orange.svg?style=for-the-badge\u0026logo=openjdk)](https://adoptium.net/)\n[![JavaFX](https://img.shields.io/badge/JavaFX-21-blue.svg?style=for-the-badge\u0026logo=oracle)](https://openjfx.io/)\n[![Build](https://img.shields.io/badge/Maven-3.8%2B-red.svg?style=for-the-badge\u0026logo=apache-maven)](https://maven.apache.org/)\n[![License](https://img.shields.io/badge/License-Custom--Non--Commercial-red.svg?style=for-the-badge)](./LICENSE)\n\nUna plataforma de cliente rico (**Rich Client Platform - RCP**) premium para la administración empresarial (Dashboard, Clientes, Empleados, Pedidos, Auditoría de logs y Reportes). Diseñada siguiendo patrones arquitectónicos empresariales, concurrencia avanzada, modularidad dinámica y seguridad nativa a nivel del sistema operativo.\n\n---\n\n## 🎯 Arquitectura y Patrones de Diseño\n\nEl sistema está dividido en dos partes integradas:\n1. **Cliente Natico RCP (JavaFX 21 + SQLite)**: Una aplicación robusta de escritorio orientada a alto rendimiento.\n2. **Prototipo Web SPA (HTML5 + CSS3 + JS)**: Un gemelo digital modular diseñado con persistencia local y soporte híbrido de nube.\n\n### 🧬 Principales Patrones Implementados\n\n#### A. Modularidad Dinámica (Dynamic Plugin Framework)\nMediante la interfaz `RCPModule`, la aplicación de escritorio escanea en tiempo de ejecución las clases que implementan dicha interfaz a través de `ServiceLoader` (patrón *Service Provider Interface - SPI*).\n- Permite añadir o remover módulos (plugins) de negocio compilados de forma independiente sin modificar el núcleo de la aplicación.\n- Los botones de navegación lateral, sus iconos asociados (`Ikonli` / `FontIcon`) y los eventos de carga de vista se registran de forma dinámica.\n\n#### B. Concurrencia y UI No Bloqueante (`DbTask`)\nPara asegurar una experiencia de usuario fluida, las consultas complejas y la generación de reportes se ejecutan asíncronamente heredando de `javafx.concurrent.Task`.\n- `DbTask` encapsula la ejecución en hilos daemon controlados.\n- Previene que el hilo principal de renderizado (JavaFX Application Thread) se congele ante retrasos del disco o de red.\n\n#### C. Seguridad de Credenciales (DPAPI Nativo de Windows)\nUtiliza la interfaz JNA (Java Native Access) para invocar de forma directa la biblioteca `Crypt32.dll` del sistema operativo Windows:\n- **Cifrado en primer inicio**: Al ingresar contraseñas SMTP por primera vez en `config.properties`, el sistema detecta que están en texto plano, las encripta usando la API **DPAPI** (`CryptProtectData`) a nivel de usuario del sistema operativo y reescribe el archivo con el prefijo `{DPAPI}`.\n- **Acceso seguro**: En ejecuciones posteriores se desencripta en memoria activa únicamente para el envío asíncrono, protegiendo las credenciales contra accesos no autorizados al disco duro.\n\n#### D. Sincronización Fuera de Línea (Offline-First Core)\n- **Cola Transaccional**: Ambos clientes (Java y Web) poseen una cola persistente independiente (`sync_queue` en SQLite para Java; y `sync_queue` en `localStorage` para JS).\n- **Productor-Consumidor**: Cada operación de escritura se almacena localmente y a su vez encola un log de sincronización.\n- **Sincronizador en Segundo Plano**: Un servicio independiente monitorea el estado de la red. Al restablecerse la conexión, procesa la cola de manera secuencial (FIFO) garantizando consistencia semántica.\n\n---\n\n## 📁 Estructura Detallada del Proyecto\n\nA continuación se detalla la estructura física y lógica de los archivos de código fuente:\n\n```\nrcp-java/\n├── .gitignore                   # Exclusión de credenciales (config.properties, .env, target/)\n├── pom.xml                      # Descriptor de dependencias Maven (HikariCP, JNA, AtlantaFX, etc.)\n├── package.bat                  # Script de automatización de compilación nativa en Windows\n├── README.md                    # Documentación principal de la arquitectura\n│\n├── src/\n│   └── main/\n│       ├── java/\n│       │   ├── module-info.java # Definiciones de módulos de Java (JPMS), exportaciones y dependencias\n│       │   └── com/empresa/rcp/\n│       │       ├── App.java                 # Clase principal. Arranca y guarda estado de ventana\n│       │       ├── Main.java                # Launcher compatible con empaquetadores\n│       │       ├── MainController.java      # Controlador principal, maneja menú, inactividad y plugins\n│       │       │\n│       │       ├── chart/                   # Generación y dibujo de gráficas con Canvas de JavaFX\n│       │       │   ├── BarChartCanvas.java\n│       │       │   ├── LineChartCanvas.java\n│       │       │   └── PieChartCanvas.java\n│       │       │\n│       │       ├── db/                      # Capa de Acceso a Datos\n│       │       │   └── DatabaseManager.java # HikariCP pool, inicialización de SQLite y logs de auditoría\n│       │       │\n│       │       ├── sync/                    # Motor de sincronización\n│       │       │   ├── SyncManager.java     # Ciclo periódico asíncrono de reintentos\n│       │       │   └── SyncProvider.java    # Interfaz para conexión con APIs en la nube\n│       │       │\n│       │       ├── util/                    # Utilidades transversales\n│       │       │   ├── DbTask.java          # Wrapper para hilos esclavos de base de datos\n│       │       │   ├── PreferencesManager.java # Serializador ligero del espacio de trabajo\n│       │       │   └── SecurityUtil.java    # Enlace nativo DPAPI mediante JNA\n│       │       │\n│       │       └── module/                  # Módulos de lógica empresarial de la App\n│       │           ├── RCPModule.java       # Interfaz core para plugins\n│       │           ├── auth/\n│       │           │   ├── AuthController.java\n│       │           │   └── EmailService.java# Gestión SMTP y auto-encriptación\n│       │           ├── clientes/\n│       │           │   └── ClientesController.java\n│       │           ├── empleados/\n│       │           │   └── EmpleadosController.java\n│       │           ├── pedidos/\n│       │           │   └── PedidosController.java\n│       │           ├── configuracion/\n│       │           │   └── ConfiguracionController.java\n│       │           └── reportes/\n│       │               └── ReportesController.java\n│       │\n│       └── resources/\n│           ├── logback.xml              # Configuración rotativa y tamaños límite de logs\n│           ├── css/                     # Hojas de estilo CSS personalizadas\n│           │   ├── styles.css\n│           │   ├── dark-theme.css\n│           │   └── light-theme.css\n│           ├── fxml/                    # Vistas estructuradas FXML para JavaFX\n│           │   ├── main.fxml\n│           │   ├── login.fxml\n│           │   ├── registro.fxml\n│           │   ├── recuperar_pass.fxml\n│           │   └── ... (vistas secundarias)\n│           └── images/\n│               ├── logo.ico             # Icono de app moderna\n│               └── logo.png             # Logo squircle de bordes redondeados\n│\n└── web-app/                             # Prototipo SPA Web del cliente\n    ├── index.html                       # Estructura visual de la SPA\n    ├── styles.css                       # Estilización premium (Glassmorphism, variables CSS)\n    ├── app.js                           # Control lógico, EmailJS, syncQueue y tema persistente\n    ├── logo.png                         # Logotipo squircle adaptado\n    └── .env.example                     # Variables de entorno de EmailJS y API Cloud\n```\n\n---\n\n## 🚀 Guía de Instalación y Ejecución\n\n### Requisitos Técnicos\n- **Java Development Kit (JDK) 21** o superior.\n- **Apache Maven 3.8** o superior.\n- Sistema Operativo Windows (necesario para el cifrado DPAPI nativo; en otros sistemas operativos el módulo omite el cifrado de forma segura).\n\n### 1. Construcción de la Aplicación de Escritorio\nEn tu terminal de desarrollo ejecuta:\n```bash\n# Compilar clases y descargar dependencias\nmvn clean compile\n\n# Iniciar la aplicación JavaFX en modo de desarrollo\nmvn javafx:run\n```\n\nPara generar el empaquetado final (`.jar` unificado y ejecutable `.exe` nativo):\n```bash\n# Empaquetar todo el proyecto\nmvn clean package -DskipTests\n```\n- El ejecutable independiente con soporte de icono nativo y metadatos del sistema se creará en [target/RCPGestion.exe](./target/RCPGestion.exe).\n\n---\n\n## ⚙️ Configuración de Credenciales y Entorno\n\n### A. Correo Electrónico y SMTP (Aplicación Java)\nPara habilitar el envío real de códigos de verificación OTP durante la recuperación de contraseñas, crea el archivo `config.properties` en la raíz del proyecto:\n```properties\nsmtp.host=smtp.gmail.com\nsmtp.port=587\nsmtp.user=tu_correo_corporativo@gmail.com\n# Al arrancar, el texto plano se reemplazará automáticamente por una versión cifrada {DPAPI}xxxx\nsmtp.password=tu_contrase単a_de_aplicacion_google\n```\n\u003e [!TIP]\n\u003e **Modo Simulador de Consola**: Si no creas este archivo, la aplicación imprime directamente los códigos OTP por consola para facilitar el desarrollo local ágil.\n\n### B. Aplicación Web (EmailJS y API REST)\nPara configurar el prototipo web, renombra el archivo [web-app/.env.example](./web-app/.env.example) a `web-app/.env` y configúralo:\n```env\n# Conexión SMTP dinámica vía cliente EmailJS\nEMAILJS_PUBLIC_KEY=user_abcdefg1234567890\nEMAILJS_SERVICE_ID=service_gmail\nEMAILJS_TEMPLATE_ID=template_rcp_recovery\n\n# API REST Remota para almacenamiento centralizado en la nube (Opcional)\nDATABASE_API_URL=https://api.tuempresa.com/v1\nDATABASE_API_KEY=rcp_api_token_secure_123456789\n```\n\u003e [!IMPORTANT]\n\u003e **Autonomía Offline**: Si no configuras una base de datos REST externa, la SPA redirigirá automáticamente todas las transacciones a su motor persistente en el **LocalStorage del navegador**.\n\n---\n\n## 🛠️ Stack Tecnológico Utilizado\n\n- **JavaFX 21**: Framework base de UI de escritorio.\n- **AtlantaFX (Nord Dark / Nord Light)**: Hoja de estilos moderna y elegante inspirada en sistemas operativos modernos.\n- **SQLite JDBC**: Motor de base de datos relacional ligero, embebido y de alta velocidad.\n- **HikariCP**: Pool de conexiones de alto rendimiento para bases de datos SQLite.\n- **jBCrypt**: Algoritmo seguro de hashing para almacenamiento de contraseñas de usuario.\n- **JNA \u0026 JNA Platform**: Enlace nativo a librerías y APIs de Windows.\n- **SLF4J + Logback**: Logger e histórico de rotaciones del sistema.\n- **Ikonli (Material Design Icons)**: Paquete de iconografía vectorial premium.\n- **jsPDF**: Motor de exportación PDF en el cliente web.\n\n---\n\n## 📝 Licencia\n\nEste proyecto está bajo la **Licencia Personalizada de Alberto Ortiz**.\nConsulta el archivo [LICENSE](./LICENSE) para más detalles.\n\n**Resumen:**\n- ✅ Uso no comercial permitido\n- ❌ No se permite comercialización sin autorización\n- ⚠️ Los forks deben mantener atribución visible\n- 📌 Debe incluir marca de agua del original\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falberto2005-coder%2Frcp-gestion-empresarial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falberto2005-coder%2Frcp-gestion-empresarial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falberto2005-coder%2Frcp-gestion-empresarial/lists"}