# Reglas del Proyecto — Hazard (Odoo 16) ## Información General - **Empresa:** Hazard (marca de ropa urbana / streetwear) - **Plataforma ERP:** Odoo 16 Community con módulos Enterprise - **Ecommerce:** Shopify (sincronizado con Odoo vía módulo custom `hazard_shopify`) - **Servidor:** VPS en Plesk bajo el dominio `tesscorp.com.mx` - **Idioma de comunicación:** Siempre responder en español ## Arquitectura Docker ### Contenedores | Contenedor | Imagen | Puerto Externo | Puerto Interno | |---|---|---|---| | `odoo-16-hazard-new` | `hazard-odoo-odoo` (custom, basada en `odoo:16`) | `16001` | `8069` | | `odoo-16-db-hazard-new` | `postgres:17` | No expuesto | `5432` | ### Volúmenes y Rutas - **Módulos Enterprise:** `./Addons/enterprise` → `/mnt/enterprise` (dentro del contenedor) - **Módulos Custom:** `./Addons/custom` → `/mnt/extra-addons` (dentro del contenedor) - **Configuración Odoo:** `./Conf/odoo.conf` → `/etc/odoo/odoo.conf` - **Docker Compose:** `/var/www/vhosts/tesscorp.com.mx/hazard.tesscorp.com.mx/docker-compose.yml` - **IP interna del contenedor DB:** `172.18.0.2` (usada por MCP Server PostgreSQL) ### Base de Datos - **Base de datos principal (producción):** `hazard_new` - **Usuario DB:** `odoo` - **Contraseña DB:** `odoo` ### Credenciales Odoo (XML-RPC) - **URL:** `http://localhost:16001` - **Base de datos:** `hazard_new` - **Usuario admin:** `admin` - **Contraseña admin:** `admin` ## Módulos Custom Instalados | Módulo | Estado | Ubicación | |---|---|---| | `hazard_shopify` | ✅ Instalado | `Addons/custom/hazard_shopify` | | `hazard_inventory_report` | ✅ Instalado | `Addons/custom/hazard_inventory_report` | | `hazard_website` | ❌ No instalado | `Addons/custom/hazard_website` | ### Otros Módulos de Terceros - `bi_sql_editor` — Editor SQL en interfaz Odoo - `query_deluxe` — Consultas avanzadas desde Odoo - `sql_request_abstract` — Abstracción para consultas SQL - `l10n_mx_sat_sync_itadmin_ee` — Sincronización SAT México ## Reglas de Desarrollo Obligatorias ### Python - **NUNCA** usar `print()`. Siempre usar `logging` con `_logger = logging.getLogger(__name__)`. - Usar prefijos descriptivos en logs: `_logger.info("[Módulo] Mensaje")`. - Siempre agregar docstrings a funciones y clases. - Preferir código legible sobre código compacto. ### Despliegue de Cambios 1. **Cambios en archivos `.py` (modelos/lógica):** Requiere restart del contenedor. ```bash docker restart odoo-16-hazard-new ``` 2. **Cambios en estructura de tablas (fields nuevos):** Requiere restart + actualización del módulo. ```bash docker restart odoo-16-hazard-new # Luego ejecutar el script de actualización: python3 update_module.py ``` 3. **Cambios solo en XML/vistas/reportes:** Solo requiere actualización del módulo (sin restart). ### Seguridad y Respaldos - **NUNCA** ejecutar `UPDATE` o `DELETE` masivos sin respaldo previo. - Script de respaldo: `backup_hazard.sh` (respalda DB + código, retención 15 días). - Los backups se suben a Google Drive automáticamente vía Plesk. ### Código de Barras - Formato EAN13 estandarizado con estructura `20000...` (ej. `2000010012749`). - NUNCA crear scripts que alteren la secuencia de códigos de barras. ### Archivos que NO se deben modificar - Módulos en `/mnt/enterprise` (módulos oficiales de Odoo Enterprise). - Solo modificar código en `/mnt/extra-addons` (módulos custom). ## Scripts Útiles del Proyecto | Script | Propósito | Comando | |---|---|---| | `backup_hazard.sh` | Respaldo completo (DB + código) | `bash backup_hazard.sh` | | `update_module.py` | Actualizar módulo hazard_shopify via XML-RPC | `python3 update_module.py` | ## Conexión MCP Server PostgreSQL El agente tiene acceso directo de solo lectura a la base de datos `hazard_new` a través del MCP Server configurado en `mcp_config.json`. Usar la herramienta `query` del servidor `odoo-postgres` para consultas SQL cuando sea necesario inspeccionar datos.