diff --git a/CLAUDE.md b/CLAUDE.md index f126516..7367ec5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -257,4 +257,48 @@ Automatically installed via `scripts/install_hooks.sh`: ### Branch Naming - Feature branches: `feature/XX-description` (where XX is issue number) -- Always create PRs to 'dev' branch, not 'main' \ No newline at end of file +- Always create PRs to 'dev' branch, not 'main' + +## Desarrollo de nuevos modelos y vistas + +### Orden de carga en __manifest__.py +Al agregar archivos al manifest, seguir SIEMPRE este orden: +1. security/*.xml (grupos y categorías) +2. security/ir.model.access.csv +3. data/*.xml (secuencias, categorías, datos base) +4. views/*_views.xml en este orden específico: + - Modelos base (sin dependencias) + - Modelos dependientes + - Vistas que referencian acciones + - menus.xml (SIEMPRE al final de views) +5. wizards/*.xml +6. reports/*.xml +7. demo/*.xml + +### Desarrollo de modelos relacionados +Cuando crees modelos que se relacionan entre sí en el mismo issue: + +#### Fase 1: Modelos base +1. Crear modelos SIN campos One2many +2. Solo incluir campos básicos y Many2one si el modelo referenciado ya existe +3. Probar que la instancia levante + +#### Fase 2: Relaciones +1. Agregar campos One2many en los modelos padre +2. Verificar que todos los inverse_name existan +3. Probar nuevamente + +#### Fase 3: Vistas complejas +1. Agregar vistas con referencias a acciones +2. Verificar que las acciones referenciadas ya estén definidas + +### Contextos en vistas XML +- En formularios: usar `id` (NO `active_id`) +- En acciones de ventana: usar `active_id` +- En campos One2many: usar `parent` para referenciar el registro padre + +### Checklist antes de reiniciar instancia +- [ ] ¿Los modelos referenciados en relaciones ya existen? +- [ ] ¿Las acciones/vistas referenciadas se cargan ANTES? +- [ ] ¿Los grupos en ir.model.access.csv coinciden con los de security.xml? +- [ ] ¿Usaste `id` en lugar de `active_id` en contextos de formulario? \ No newline at end of file