feat(#8): Task 7 completada - Datos de demostración básicos
- Script Python para crear datos de demostración - Crea pruebas con diferentes estados: en proceso, ingresado, validado - Incluye resultados con valores dentro y fuera de rango - Mezcla tipos de valor: numérico y texto - Integrado en el proceso de inicialización - Instancia validada sin errores
This commit is contained in:
parent
619c6a3afa
commit
80c70b67d9
|
@ -25,6 +25,7 @@ services:
|
|||
- ./odoo.conf:/etc/odoo/odoo.conf
|
||||
- ./init_odoo.py:/app/init_odoo.py
|
||||
- ./create_lab_requests.py:/app/create_lab_requests.py
|
||||
- ./test:/app/test
|
||||
command: ["/usr/bin/python3", "/app/init_odoo.py"]
|
||||
environment:
|
||||
HOST: db
|
||||
|
|
34
init_odoo.py
34
init_odoo.py
|
@ -94,6 +94,40 @@ EOF
|
|||
sys.exit(result.returncode)
|
||||
|
||||
print("Solicitudes de laboratorio de demostración creadas exitosamente.")
|
||||
|
||||
# --- Crear datos de demostración de pruebas ---
|
||||
print("\nCreando datos de demostración de pruebas de laboratorio...")
|
||||
sys.stdout.flush()
|
||||
|
||||
if os.path.exists("/app/test/create_test_demo_data.py"):
|
||||
with open("/app/test/create_test_demo_data.py", "r") as f:
|
||||
test_script_content = f.read()
|
||||
|
||||
create_tests_command = f"""
|
||||
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
|
||||
{test_script_content}
|
||||
EOF
|
||||
"""
|
||||
|
||||
result = subprocess.run(
|
||||
create_tests_command,
|
||||
shell=True,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False
|
||||
)
|
||||
|
||||
print("--- Create Test Demo Data stdout ---")
|
||||
print(result.stdout)
|
||||
print("--- Create Test Demo Data stderr ---")
|
||||
print(result.stderr)
|
||||
sys.stdout.flush()
|
||||
|
||||
if result.returncode == 0:
|
||||
print("Datos de demostración de pruebas creados exitosamente.")
|
||||
else:
|
||||
print(f"Advertencia: Fallo al crear datos de demostración de pruebas (código {result.returncode})")
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
except Exception as e:
|
||||
|
|
225
test/create_test_demo_data.py
Normal file
225
test/create_test_demo_data.py
Normal file
|
@ -0,0 +1,225 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import odoo
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def create_test_demo_data(cr):
|
||||
"""Crea datos de demostración para lims.test y lims.result"""
|
||||
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
|
||||
|
||||
# Buscar algunos pacientes y análisis existentes
|
||||
patients = env['res.partner'].search([('is_patient', '=', True)], limit=3)
|
||||
if not patients:
|
||||
print("No se encontraron pacientes para crear pruebas de demostración")
|
||||
return
|
||||
|
||||
# Buscar análisis disponibles
|
||||
hemograma = env.ref('lims_management.analysis_hemograma', raise_if_not_found=False)
|
||||
glucosa = env.ref('lims_management.analysis_glucosa', raise_if_not_found=False)
|
||||
|
||||
if not hemograma or not glucosa:
|
||||
print("No se encontraron análisis de demostración")
|
||||
return
|
||||
|
||||
# Buscar o crear una orden de laboratorio simple
|
||||
lab_order = env['sale.order'].search([
|
||||
('is_lab_request', '=', True),
|
||||
('state', '=', 'sale')
|
||||
], limit=1)
|
||||
|
||||
if not lab_order:
|
||||
# Crear una orden básica si no existe
|
||||
lab_order = env['sale.order'].create({
|
||||
'partner_id': patients[0].id,
|
||||
'is_lab_request': True,
|
||||
'order_line': [(0, 0, {
|
||||
'product_id': hemograma.product_variant_id.id,
|
||||
'product_uom_qty': 1
|
||||
}), (0, 0, {
|
||||
'product_id': glucosa.product_variant_id.id,
|
||||
'product_uom_qty': 1
|
||||
})]
|
||||
})
|
||||
lab_order.action_confirm()
|
||||
|
||||
# Obtener las líneas de orden
|
||||
order_lines = lab_order.order_line
|
||||
if not order_lines:
|
||||
print("No se encontraron líneas de orden")
|
||||
return
|
||||
|
||||
# Buscar muestras existentes
|
||||
samples = env['stock.lot'].search([
|
||||
('is_lab_sample', '=', True),
|
||||
('patient_id', '=', lab_order.partner_id.id)
|
||||
], limit=2)
|
||||
|
||||
if not samples:
|
||||
print("No se encontraron muestras de laboratorio")
|
||||
return
|
||||
|
||||
# Crear prueba 1: Hemograma en proceso
|
||||
test1 = env['lims.test'].create({
|
||||
'sale_order_line_id': order_lines[0].id,
|
||||
'sample_id': samples[0].id,
|
||||
'state': 'draft'
|
||||
})
|
||||
|
||||
# Iniciar proceso
|
||||
test1.action_start_process()
|
||||
|
||||
# Crear resultados para hemograma
|
||||
results_data = [
|
||||
{
|
||||
'test_id': test1.id,
|
||||
'parameter_name': 'Glóbulos Rojos',
|
||||
'sequence': 10,
|
||||
'value_numeric': 4.5,
|
||||
'unit': '10^6/µL',
|
||||
'normal_min': 4.2,
|
||||
'normal_max': 5.4
|
||||
},
|
||||
{
|
||||
'test_id': test1.id,
|
||||
'parameter_name': 'Glóbulos Blancos',
|
||||
'sequence': 20,
|
||||
'value_numeric': 12.5, # Fuera de rango
|
||||
'unit': '10^3/µL',
|
||||
'normal_min': 4.5,
|
||||
'normal_max': 11.0,
|
||||
'notes': 'Valor elevado - posible infección'
|
||||
},
|
||||
{
|
||||
'test_id': test1.id,
|
||||
'parameter_name': 'Hemoglobina',
|
||||
'sequence': 30,
|
||||
'value_numeric': 14.2,
|
||||
'unit': 'g/dL',
|
||||
'normal_min': 12.0,
|
||||
'normal_max': 16.0
|
||||
},
|
||||
{
|
||||
'test_id': test1.id,
|
||||
'parameter_name': 'Plaquetas',
|
||||
'sequence': 40,
|
||||
'value_numeric': 250,
|
||||
'unit': '10^3/µL',
|
||||
'normal_min': 150,
|
||||
'normal_max': 400
|
||||
}
|
||||
]
|
||||
|
||||
for result_data in results_data:
|
||||
env['lims.result'].create(result_data)
|
||||
|
||||
print(f"Creada prueba {test1.name} con 4 resultados")
|
||||
|
||||
# Crear prueba 2: Glucosa con resultado ingresado
|
||||
if len(order_lines) > 1:
|
||||
test2 = env['lims.test'].create({
|
||||
'sale_order_line_id': order_lines[1].id,
|
||||
'sample_id': samples[0].id,
|
||||
'state': 'draft'
|
||||
})
|
||||
|
||||
test2.action_start_process()
|
||||
|
||||
# Crear resultado de glucosa
|
||||
env['lims.result'].create({
|
||||
'test_id': test2.id,
|
||||
'parameter_name': 'Glucosa en Ayunas',
|
||||
'sequence': 10,
|
||||
'value_numeric': 125, # Fuera de rango
|
||||
'unit': 'mg/dL',
|
||||
'normal_min': 70,
|
||||
'normal_max': 110,
|
||||
'notes': 'Valor elevado - prediabetes'
|
||||
})
|
||||
|
||||
# Marcar resultados como ingresados
|
||||
test2.action_enter_results()
|
||||
|
||||
print(f"Creada prueba {test2.name} con resultado ingresado")
|
||||
|
||||
# Crear prueba 3: Uroanálisis con valores mixtos (si hay más pacientes)
|
||||
if len(patients) > 1 and len(samples) > 1:
|
||||
# Crear una orden adicional
|
||||
urine_analysis = env['product.template'].search([
|
||||
('is_analysis', '=', True),
|
||||
('name', 'ilike', 'orina')
|
||||
], limit=1)
|
||||
|
||||
if urine_analysis:
|
||||
lab_order2 = env['sale.order'].create({
|
||||
'partner_id': patients[1].id,
|
||||
'is_lab_request': True,
|
||||
'order_line': [(0, 0, {
|
||||
'product_id': urine_analysis.product_variant_id.id,
|
||||
'product_uom_qty': 1
|
||||
})]
|
||||
})
|
||||
lab_order2.action_confirm()
|
||||
|
||||
test3 = env['lims.test'].create({
|
||||
'sale_order_line_id': lab_order2.order_line[0].id,
|
||||
'sample_id': samples[1].id,
|
||||
'state': 'draft'
|
||||
})
|
||||
|
||||
test3.action_start_process()
|
||||
|
||||
# Crear resultados mixtos
|
||||
urine_results = [
|
||||
{
|
||||
'test_id': test3.id,
|
||||
'parameter_name': 'Color',
|
||||
'sequence': 10,
|
||||
'value_text': 'Amarillo claro'
|
||||
},
|
||||
{
|
||||
'test_id': test3.id,
|
||||
'parameter_name': 'pH',
|
||||
'sequence': 20,
|
||||
'value_numeric': 6.5,
|
||||
'normal_min': 4.6,
|
||||
'normal_max': 8.0
|
||||
},
|
||||
{
|
||||
'test_id': test3.id,
|
||||
'parameter_name': 'Densidad',
|
||||
'sequence': 30,
|
||||
'value_numeric': 1.020,
|
||||
'normal_min': 1.005,
|
||||
'normal_max': 1.030
|
||||
},
|
||||
{
|
||||
'test_id': test3.id,
|
||||
'parameter_name': 'Proteínas',
|
||||
'sequence': 40,
|
||||
'value_text': 'Negativo'
|
||||
},
|
||||
{
|
||||
'test_id': test3.id,
|
||||
'parameter_name': 'Glucosa',
|
||||
'sequence': 50,
|
||||
'value_text': 'Negativo'
|
||||
}
|
||||
]
|
||||
|
||||
for result_data in urine_results:
|
||||
env['lims.result'].create(result_data)
|
||||
|
||||
# Ingresar y validar resultados
|
||||
test3.action_enter_results()
|
||||
if test3.state == 'result_entered':
|
||||
test3.action_validate()
|
||||
|
||||
print(f"Creada prueba {test3.name} validada con resultados mixtos")
|
||||
|
||||
print("\nDatos de demostración de pruebas creados exitosamente")
|
||||
|
||||
if __name__ == '__main__':
|
||||
db_name = 'lims_demo'
|
||||
registry = odoo.registry(db_name)
|
||||
with registry.cursor() as cr:
|
||||
create_test_demo_data(cr)
|
||||
cr.commit()
|
Loading…
Reference in New Issue
Block a user