Files
FarmaFinder/backend/FIX-MEDICINE-ID-ERROR.md
2026-04-01 01:18:21 +02:00

3.5 KiB

🔧 Solución Rápida - Error: no such column: medicine_id

El Error

Error: SQLITE_ERROR: no such column: medicine_id

Este error ocurre porque la base de datos tiene la estructura antigua que usa medicine_id, pero el código actualizado ahora usa medicine_nregistro.

Soluciones

Opción 1: Reset Completo (Recomendado para desarrollo)

Esto eliminará todos los datos actuales:

cd backend

# Método 1: Usando el script
npm run reset-db

# Método 2: Manual
rm database.sqlite
node seed.js
node create-admin.js

Opción 2: Migración (Mantiene farmacias, pierde vínculos medicamento-farmacia)

cd backend
node migrate.js

Nota: Esta opción mantiene las farmacias pero elimina las relaciones medicamento-farmacia porque ahora usan un esquema diferente (nregistro de CIMA en lugar de IDs locales).

Opción 3: Manual con SQLite

Si quieres más control:

cd backend
sqlite3 database.sqlite

# Dentro de SQLite:
DROP TABLE IF EXISTS pharmacy_medicines;
DROP INDEX IF EXISTS idx_pharmacy_medicine;

CREATE TABLE pharmacy_medicines (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  pharmacy_id INTEGER NOT NULL,
  medicine_nregistro TEXT NOT NULL,
  medicine_name TEXT,
  price REAL,
  stock INTEGER DEFAULT 0,
  FOREIGN KEY (pharmacy_id) REFERENCES pharmacies(id),
  UNIQUE(pharmacy_id, medicine_nregistro)
);

CREATE INDEX idx_pharmacy_medicine ON pharmacy_medicines(medicine_nregistro);

.quit

🔍 Verificar la Estructura

Para verificar que la base de datos tiene la estructura correcta:

cd backend
sqlite3 database.sqlite "PRAGMA table_info(pharmacy_medicines);"

Salida esperada:

0|id|INTEGER|0||1
1|pharmacy_id|INTEGER|1||0
2|medicine_nregistro|TEXT|1||0
3|medicine_name|TEXT|0||0
4|price|REAL|0||0
5|stock|INTEGER|0|0|0

🚀 Después de la Corrección

  1. Verifica que Redis esté corriendo:

    redis-cli ping
    # Debe responder: PONG
    
  2. Inicia el servidor:

    cd backend
    npm start
    
  3. Vincula medicamentos en el Admin Panel:

    • Ve a http://localhost:3000
    • Haz login en el Admin Panel
    • Ve a la pestaña "Link Medicine"
    • Busca medicamentos desde CIMA
    • Vincúlalos a tus farmacias

📝 ¿Por qué cambió?

La aplicación ahora usa la API oficial de CIMA (Agencia Española de Medicamentos) en lugar de almacenar medicamentos localmente.

Beneficios:

  • Datos siempre actualizados
  • Más de 30,000 medicamentos disponibles
  • Información oficial y verificada
  • Menos mantenimiento de base de datos

Estructura anterior:

pharmacy_medicines
  - medicine_id → ID local en tabla medicines

Estructura nueva:

pharmacy_medicines
  - medicine_nregistro → Número de registro de CIMA
  - medicine_name → Nombre cacheado para mostrar

💡 Preguntas Frecuentes

P: ¿Perderé mis farmacias?
R: No, las farmacias se mantienen. Solo necesitas re-vincular los medicamentos.

P: ¿Perderé los vínculos medicamento-farmacia?
R: Sí, porque ahora usan un sistema diferente (nregistros de CIMA). Tendrás que re-vincularlos usando el panel de admin.

P: ¿Y si tengo muchos vínculos?
R: La migración vale la pena por los beneficios a largo plazo. La re-vinculación es fácil con la búsqueda en tiempo real desde CIMA.

📚 Más Información