# 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.
