clinical_laboratory/GEMINI.md
Luis Ernesto Portillo Zaldivar 0eaaaef98d feat(#5): Implementar catálogo de análisis clínicos
- Se extiende el modelo product.template para incluir análisis.
- Se crea el modelo para rangos de referencia (lims.analysis.range).
- Se definen permisos de seguridad para el nuevo modelo.
- Se crean las vistas de formulario y lista necesarias.
- Se añade el menú 'Catálogo de Análisis' en Configuración.
- Se actualiza la guía de desarrollo en GEMINI.md con las nuevas convenciones de Odoo 18.
2025-07-13 23:45:32 -06:00

7.0 KiB

Instrucciones para el uso de tea CLI

Este proyecto utiliza tea para interactuar con el repositorio de Gitea.

Crear un Issue (Modo no Interactivo)

Para crear un nuevo issue de forma no interactiva, se utiliza el siguiente comando, proporcionando todos los datos necesarios mediante flags:

tea issue create --title "Título del Issue" --description "Descripción detallada del issue." --labels "etiqueta1,etiqueta2"
  • --title: Especifica el título del issue.
  • --description: Especifica la descripción o cuerpo del issue.
  • --labels: Especifica una o más etiquetas separadas por comas.

Comentar en un Issue

Para agregar un comentario a un issue existente, se utiliza el comando comment seguido del número del issue y el texto del comentario entre comillas.

Formato correcto:

tea comment <NÚMERO_ISSUE> "Tu comentario aquí"

Ejemplo:

tea comment 3 "Comentario de prueba"

Nota: No se deben utilizar flags como -i o --message. El formato es directo.


Realizar Commits

Debido a problemas de interpretación de comillas en el shell de ejecución, el uso de git commit -m "mensaje" puede fallar. Para evitar estos problemas, se debe pasar el mensaje del commit a través de la entrada estándar (stdin).

Política de Mensajes de Commit

Es mandatorio que el título de cada commit referencie el número del issue que resuelve. Esto se hace para mantener una trazabilidad clara entre el código y las tareas.

Formato del Título:

<tipo>(#<issue_id>): <descripción breve>
  • <tipo>: feat (nueva funcionalidad), fix (corrección de bug), docs (cambios en documentación), style (formato), refactor, test, chore (otras tareas).
  • (<issue_id>): El número del issue entre paréntesis y precedido de #.

Ejemplo:

feat(#4): Agregar campos de género y fecha de nacimiento al paciente

Método Recomendado

Utiliza el comando echo y una tubería (|) para enviar el mensaje a git commit -F -.

Commit de una sola línea:

echo "feat(#4): Tu mensaje de commit conciso" | git commit -F -

Commit multilínea: Para mensajes de commit multilínea, la forma más segura es usar printf que maneja mejor los saltos de línea ( ):

printf "feat(#4): Título del commit

Cuerpo del mensaje con descripción detallada." | git commit -F -

Esto asegura que el formato del mensaje del commit se preserve correctamente.


Crear un Pull Request

Para crear un pull request (PR), se utiliza el comando tea pulls create. Debes especificar la rama base (hacia donde van los cambios) y la rama head (tu rama actual), junto con un título que referencie el issue que resuelve.

Formato del comando:

tea pulls create --base "<rama_base>" --head "<tu_rama>" --title "<Tipo>(#issue): Título descriptivo"

Ejemplo:

tea pulls create --base "dev" --head "feature/3-core-setup" --title "feat(#3): Actualiza instrucciones en GEMINI.md"
  • --base: La rama de destino (ej. dev, main).
  • --head: Tu rama de trabajo actual.
  • --title: Un título claro que incluya el tipo de cambio (feat, fix, docs) y el número de issue.

Contexto del Proyecto

Al iniciar cada sesión de trabajo, es mandatorio leer los siguientes documentos para comprender el contexto completo de los requerimientos y el diseño técnico:

  • documents/requirements/RequerimientoInicial.md
  • documents/requirements/ToBeDesing.md

Levantamiento de la Instancia de Odoo 18

Para levantar la instancia efímera de Odoo 18 junto con la base de datos de PostgreSQL, se utiliza Docker Compose.

Comando de inicio:

docker-compose up -d

Este comando levantará los servicios definidos en el archivo docker-compose.yml en modo "detached" (-d).

Comando de detención y limpieza: Para detener los servicios y asegurar un estado limpio, siempre se deben eliminar los volúmenes, a menos que se indique lo contrario.

docker-compose down -v

Verificación de la Inicialización

Después de levantar la instancia, es mandatorio verificar los registros del contenedor de inicialización para confirmar que los módulos se instalaron o actualizaron correctamente.

Comando para ver los logs:

docker-compose logs odoo_init

Busca errores en la salida. Si encuentras alguno, debes presentar un resumen del problema y sus posibles causas, como:

  • Dependencias faltantes: Un módulo no se puede instalar porque requiere otro que no está presente.
  • Errores de sintaxis: Problemas en archivos Python (.py) o XML (.views, .xml).
  • Permisos incorrectos: Problemas de acceso a archivos o directorios.
  • Datos incorrectos: Errores en los archivos de datos de demostración o iniciales.

Convenciones de Desarrollo en Odoo 18

Para evitar errores recurrentes, es mandatorio seguir las siguientes convenciones específicas para Odoo 18, especialmente en lo que respecta a la definición de vistas.

Uso de Vistas de Lista (Tree Views)

En Odoo 18, la etiqueta <tree> ha sido reemplazada por <list>. El uso de <tree> provocará un error de validación (ValueError: Wrong value for ir.ui.view.type: 'tree').

Forma Incorrecta (Odoo < 18):

<record id="view_example_tree" model="ir.ui.view">
    <field name="arch" type="xml">
        <tree string="Ejemplo">
            <field name="name"/>
        </tree>
    </field>
</record>

Forma Correcta (Odoo 18):

<record id="view_example_list" model="ir.ui.view">
    <field name="arch" type="xml">
        <list string="Ejemplo">
            <field name="name"/>
        </list>
    </field>
</record>

Definición de Acciones de Ventana (view_mode)

Consecuente con el cambio anterior, al definir una acción de ventana (ir.actions.act_window) que deba mostrar una vista de lista, el view_mode debe ser 'list,form' en lugar de 'tree,form'.

Forma Incorrecta:

<record id="action_example" model="ir.actions.act_window">
    <field name="name">Ejemplo</field>
    <field name="res_model">example.model</field>
    <field name="view_mode">tree,form</field>
</record>

Forma Correcta:

<record id="action_example" model="ir.actions.act_window">
    <field name="name">Ejemplo</field>
    <field name="res_model">example.model</field>
    <field name="view_mode">list,form</field>
</record>

### Atributos de Visibilidad (`attrs`)

A partir de Odoo 17, el atributo `attrs` para controlar la visibilidad de los elementos ha sido **reemplazado por el uso directo de `invisible`**.

**Forma Incorrecta (Odoo < 17):**
```xml
<field name="special_field" attrs="{'invisible': [('is_special', '=', False)]}"/>

Forma Correcta (Odoo 18): Se utiliza el atributo invisible con una expresión de dominio simplificada. La expresión se evalúa como verdadera para ocultar el campo.

<field name="special_field" invisible="not is_special"/>

O, de forma equivalente:

<field name="special_field" invisible="is_special == False"/>