Initial commit: SKEEN Derma Experts - Sistema Integral de Gestión Clínica

- Frontend React (SKEEN Brand) con Vite, TypeScript, Tailwind
- Frontend Homenest (versión alternativa)
- Módulos Odoo 17 custom (citas, pacientes, monedero, pagos, ventas, inventario, whatsapp)
- WACRM fork (Next.js 16 + Supabase)
- Hermes + Bridge + Skills (Qwen3.6 via Nan Builders)
- Scripts de migración y operación
- Documentación extensiva en docs/
This commit is contained in:
2026-07-20 07:44:23 +00:00
commit a718592291
699 changed files with 324602 additions and 0 deletions

363
docs/estructura.md Normal file
View File

@@ -0,0 +1,363 @@
# Estructura del Repositorio — SKEEN Derma Experts
**Versión:** 2.0
**Fecha:** 16 de julio de 2026
---
## 1. Estructura General
```
SKEEN-Proyecto/
├── README.md # Documentación principal
├── .gitignore # Archivos excluidos de Git
├── docs/ # Documentación extensiva
│ ├── arquitectura.md # Arquitectura técnica
│ ├── instalacion.md # Guía de instalación
│ ├── configuracion.md # Variables y credenciales
│ ├── api.md # Referencia de endpoints
│ ├── skills-hermes.md # Skills de IA
│ ├── migracion.md # Guía de migración
│ ├── seguridad.md # Políticas de seguridad
│ ├── mantenimiento.md # Operación y troubleshooting
│ ├── estructura.md # Este archivo
│ ├── ANALISIS_SKEEN_SISTEMA.md # Análisis sistema legacy
│ ├── ESTADO_PROYECTO.md # Estado detallado
│ └── ROADMAP_SKEEN_MEJORA.md # Roadmap de mejoras
├── frontend/ # Frontend React (SKEEN Brand)
│ ├── src/
│ │ ├── components/ # Componentes reutilizables
│ │ ├── pages/ # Páginas/rutas
│ │ ├── services/ # Cliente API (odoo.ts)
│ │ ├── designs/ # Diseños de UI
│ │ │ └── brand/ # Diseño oficial SKEEN Brand
│ │ ├── hooks/ # Custom hooks
│ │ ├── utils/ # Utilidades
│ │ ├── App.tsx # Componente raíz
│ │ └── main.tsx # Punto de entrada
│ ├── public/ # Assets estáticos
│ ├── index.html # HTML base
│ ├── package.json # Dependencias npm
│ ├── vite.config.ts # Configuración Vite
│ ├── tailwind.config.js # Configuración Tailwind
│ └── tsconfig.json # Configuración TypeScript
├── frontend-homenest/ # Frontend alternativo (Homenest)
│ └── (misma estructura que frontend/)
├── odoo-addons/ # Módulos Odoo custom
│ ├── skeen_citas/ # Citas médicas
│ │ ├── models/
│ │ │ └── cita.py # Modelo skeen.cita, skeen.servicio
│ │ ├── views/
│ │ ├── security/
│ │ │ └── ir.model.access.csv
│ │ ├── data/
│ │ │ └── sequences.xml
│ │ └── __manifest__.py
│ ├── skeen_pacientes/ # Pacientes y expedientes
│ │ ├── models/
│ │ │ ├── res_partner.py # Extensión res.partner
│ │ │ └── hr_employee.py # Extensión hr.employee
│ │ └── __manifest__.py
│ ├── skeen_monedero/ # Sistema de puntos/fidelidad
│ │ ├── models/
│ │ │ ├── monedero.py # Modelo skeen.monedero
│ │ │ └── res_partner.py # Campos en res.partner
│ │ └── __manifest__.py
│ ├── skeen_pagos/ # Pagos y adeudos
│ │ ├── models/
│ │ │ └── pago.py # Modelo skeen.pago
│ │ └── __manifest__.py
│ ├── skeen_ventas/ # Ventas y corte de caja
│ │ ├── models/
│ │ │ ├── venta.py # Modelo skeen.venta
│ │ │ └── tipo_cambio.py # Tipo de cambio
│ │ ├── views/
│ │ └── __manifest__.py
│ ├── skeen_inventario/ # Inventario
│ │ ├── models/
│ │ │ └── inventario.py # Modelo skeen.inventario.item
│ │ └── __manifest__.py
│ └── skeen_whatsapp/ # API REST para integraciones
│ ├── controllers/
│ │ ├── frontend.py # Endpoints para Frontend React
│ │ ├── main.py # Endpoints para Hermes/WACRM
│ │ └── wacrm_proxy.py # Proxy WACRM ↔ Odoo
│ ├── models/
│ │ ├── frontend_user.py # Usuarios del frontend
│ │ └── wacrm_sync.py # Modelos cache WACRM
│ ├── data/
│ │ └── frontend_users.xml # Usuario seed admin
│ └── __manifest__.py
├── wacrm/ # WACRM (fork)
│ ├── src/ # Código fuente Next.js
│ ├── public/ # Assets
│ ├── docs/ # Documentación WACRM
│ ├── .env.local.example # Template de variables
│ └── package.json
├── hermes/ # Hermes + Bridge + Skills
│ ├── hermes/ # Configuración Hermes
│ │ ├── skills/ # Skills de Hermes
│ │ │ ├── skeen-rag/ # Catálogo servicios
│ │ │ ├── skeen-agendar/ # Agendamiento
│ │ │ ├── skeen-pagos/ # Pagos
│ │ │ ├── skeen-monedero/ # Monedero
│ │ │ └── skeen-recordatorios/ # Recordatorios
│ │ ├── workspace/ # Workspace Hermes
│ │ ├── webhook-bridge.js # Bridge WACRM → Hermes
│ │ └── config.yaml # Configuración
│ ├── skills/ # Skills adicionales
│ │ └── hermes-skeen/
│ ├── docs/
│ ├── infra/
│ └── docker-compose.dev.yml
├── migracion/ # Scripts de migración
│ ├── importar_a_odoo.py # Migración principal
│ ├── importar_servicios_inventario.py # Servicios + inventario
│ ├── extraer_skeen.py # Extracción legacy
│ ├── borrar_datos_demo.py # Limpieza demo
│ ├── datos/ # CSVs de datos (no commitear)
│ └── README.md # Documentación migración
├── scripts/ # Scripts de operación
│ ├── skeen-start-all.sh # Iniciar todo
│ ├── skeen-stop-all.sh # Detener todo
│ ├── skeen-start-odoo.sh # Iniciar solo Odoo
│ ├── odoo-test-data.py # Pruebas datos Odoo
│ └── simular_meta_webhook.py # Simulador webhook Meta
└── infra/ # Infraestructura
├── odoo.conf # Configuración Odoo
└── docker-compose.dev.yml # Desarrollo local
```
---
## 2. Archivos Clave por Componente
### 2.1 Frontend React
| Archivo | Propósito |
|---------|-----------|
| `frontend/src/App.tsx` | Rutas principales, redirige a `/designs/brand` |
| `frontend/src/designs/brand/Dashboard.tsx` | Dashboard principal |
| `frontend/src/services/odoo.ts` | Cliente API para Odoo |
| `frontend/src/pages/Agenda.tsx` | Calendario de citas |
| `frontend/src/pages/Pacientes.tsx` | Gestión de pacientes |
| `frontend/src/pages/Servicios.tsx` | Catálogo de servicios |
| `frontend/src/pages/WacrmMessages.tsx` | Mensajes de WACRM |
| `frontend/src/pages/WacrmLeads.tsx` | Leads/pipelines de WACRM |
| `frontend/vite.config.ts` | Proxy `/api/odoo` → Odoo |
### 2.2 Odoo
| Archivo | Propósito |
|---------|-----------|
| `odoo-addons/skeen_citas/models/cita.py` | Modelos citas y servicios |
| `odoo-addons/skeen_whatsapp/controllers/frontend.py` | API Frontend React |
| `odoo-addons/skeen_whatsapp/controllers/main.py` | API Hermes/WACRM |
| `odoo-addons/skeen_whatsapp/controllers/wacrm_proxy.py` | Proxy WACRM ↔ Odoo |
| `odoo-addons/skeen_whatsapp/models/wacrm_sync.py` | Modelos cache WACRM |
| `odoo-addons/skeen_monedero/models/monedero.py` | Sistema de puntos |
| `infra/odoo.conf` | Configuración Odoo |
### 2.3 WACRM
| Archivo | Propósito |
|---------|-----------|
| `wacrm/.env.local` | Variables de entorno (no commitear) |
| `wacrm/.env.local.example` | Template de variables |
| `wacrm/src/app/api/` | API routes de WACRM |
### 2.4 Hermes
| Archivo | Propósito |
|---------|-----------|
| `hermes/hermes/webhook-bridge.js` | Bridge WACRM → Hermes |
| `hermes/hermes/skills/skeen-*/SKILL.md` | Definición de skills |
| `/root/.hermes/skills/skeen-services.json` | Catálogo de servicios (generado) |
### 2.5 Migración
| Archivo | Propósito |
|---------|-----------|
| `migracion/importar_a_odoo.py` | Migración principal |
| `migracion/importar_servicios_inventario.py` | Servicios e inventario |
| `migracion/extraer_skeen.py` | Extracción legacy |
---
## 3. Flujo de Archivos
### 3.1 Agendar Cita (Frontend → Odoo)
```
frontend/src/pages/Agenda.tsx
→ frontend/src/services/odoo.ts (createAppointment)
→ POST /skeen/frontend/v1/appointments
→ odoo-addons/skeen_whatsapp/controllers/frontend.py (create_appointment)
→ odoo-addons/skeen_citas/models/cita.py (create)
→ PostgreSQL skeen_odoo
```
### 3.2 Mensaje WhatsApp (Meta → WACRM → Hermes → Odoo)
```
Meta Cloud API
→ POST /api/whatsapp/webhook (WACRM)
→ wacrm/src/app/api/whatsapp/webhook/route.ts
→ Supabase (guarda mensaje)
→ Automatización send_webhook
→ POST http://localhost:8090/webhook/wacrm (Bridge)
→ hermes/hermes/webhook-bridge.js
→ Nan Builders API (Qwen3.6)
→ Respuesta
→ POST /api/v1/messages (WACRM)
→ Meta Cloud API
→ Paciente
```
### 3.3 Consulta de Servicios (Hermes → Odoo)
```
Usuario: "¿Cuánto cuesta la depilación láser?"
→ WACRM → Bridge → Hermes
→ Skill skeen-rag activado
→ Lee /root/.hermes/skills/skeen-services.json
→ Responde con precios y paquetes
→ Si quiere agendar → Skill skeen-agendar
→ POST /skeen/api/v1/available_slots (Odoo)
→ POST /skeen/api/v1/create_appointment (Odoo)
```
---
## 4. Archivos No Incluidos en Git
Los siguientes archivos/directorios están en `.gitignore` y no se suben al repositorio:
| Archivo/Directorio | Razón |
|--------------------|-------|
| `.env`, `.env.local` | Secretos |
| `node_modules/` | Dependencias |
| `dist/`, `build/` | Builds |
| `__pycache__/`, `*.pyc` | Cache Python |
| `backups/` | Backups |
| `datos/` | Datos sensibles de migración |
| `*.key`, `*.pem` | Certificados |
| `hermes-venv/`, `odoo-venv/` | Entornos virtuales |
| `.next/` | Cache Next.js |
| `*.log` | Logs |
---
## 5. Ramas de Git
| Rama | Propósito |
|------|-----------|
| `main` | Producción estable |
| `develop` | Desarrollo integrado |
| `feature/*` | Nuevas funcionalidades |
| `fix/*` | Correcciones de bugs |
| `hotfix/*` | Correcciones urgentes para producción |
---
## 6. Convenciones de Código
### 6.1 Python (Odoo)
- PEP 8
- Docstrings en español
- Nombres de modelos: `skeen.nombre_modelo`
- Nombres de campos: snake_case
### 6.2 TypeScript (Frontend)
- ESLint + Prettier
- Nombres de componentes: PascalCase
- Nombres de archivos: kebab-case o PascalCase según tipo
- Interfaces: PascalCase con prefijo `I` o sin prefijo según contexto
### 6.3 JavaScript (Bridge)
- Node.js estándar
- async/await
- Nombres de variables: camelCase
---
## 7. Dependencias Principales
### 7.1 Frontend
```json
{
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.20.0",
"axios": "^1.6.0",
"recharts": "^2.10.0",
"tailwindcss": "^3.3.0",
"typescript": "^5.3.0",
"vite": "^5.0.0"
}
```
### 7.2 Bridge
```json
{
"node-fetch": "^3.3.0",
"crypto": "^1.0.0"
}
```
### 7.3 Odoo
```
odoo==17.0
psycopg2-binary
python-jose
```
---
## 8. Puertos Utilizados
| Puerto | Servicio | Protocolo |
|--------|----------|-----------|
| 22 | SSH | TCP |
| 80 | HTTP (nginx) | TCP |
| 443 | HTTPS (nginx) | TCP |
| 3000 | WACRM | HTTP |
| 3001 | Uptime Kuma | HTTP |
| 5173 | Frontend dev | HTTP |
| 5432 | PostgreSQL (host) | TCP |
| 5433 | PostgreSQL (Supabase) | TCP |
| 8000 | Supabase Kong | HTTP |
| 8069 | Odoo | HTTP |
| 8072 | Odoo longpolling | HTTP |
| 8080 | Hermes Gateway | HTTP |
| 8090 | Bridge SKEEN | HTTP |
| 9119 | Hermes Serve | HTTP |
---
## 9. Volúmenes Docker
| Volumen | Propósito |
|---------|-----------|
| `supabase-db-data` | Datos PostgreSQL Supabase |
| `supabase-storage` | Archivos Supabase |
| `supabase-kong` | Configuración Kong |
---
## 10. Notas de Despliegue
1. **Frontend:** Build estático desplegado en nginx.
2. **WACRM:** Build Next.js corriendo con `npm start`.
3. **Odoo:** Proceso Python corriendo con `odoo-bin`.
4. **Supabase:** Contenedores Docker.
5. **Hermes:** Procesos Python (`gateway run`, `serve`).
6. **Bridge:** Proceso Node.js.
Todos los servicios deben iniciarse automáticamente en producción usando systemd.