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:
363
docs/estructura.md
Normal file
363
docs/estructura.md
Normal 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.
|
||||
Reference in New Issue
Block a user