- 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/
364 lines
13 KiB
Markdown
364 lines
13 KiB
Markdown
# 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.
|