Files
rips_manager/app/database.py
T
Lizandro GuarnizoandClaude Sonnet 4.6 0f3a760de4 feat(contratos): tabla de contratos con tipo_usuario por contrato
Agrega tabla `contratos` en SQLite sembrada con los 17 contratos del
laboratorio. `generar_rda_paciente` consulta el mapa contrato→tipoUsuario
como primera prioridad antes de derivar de TIPOUSU/TIPOUSUSISPRO.
Incluye CRUD en /contratos con UI en sidebar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-09 15:00:21 -05:00

111 lines
3.8 KiB
Python

import sqlite3
import os
from datetime import datetime
DB_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "rips_manager.db")
def get_connection():
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
conn.execute("PRAGMA journal_mode=WAL")
conn.execute("PRAGMA foreign_keys=ON")
return conn
def _migrate(conn):
cols = {r[1] for r in conn.execute("PRAGMA table_info(envios)")}
if "idrecepcion" not in cols:
conn.execute("ALTER TABLE envios ADD COLUMN idrecepcion INTEGER")
if "contrato" not in cols:
conn.execute("ALTER TABLE envios ADD COLUMN contrato TEXT")
if "mensaje_tns" not in cols:
conn.execute("ALTER TABLE envios ADD COLUMN mensaje_tns TEXT")
tables = {r[0] for r in conn.execute("SELECT name FROM sqlite_master WHERE type='table'")}
if "contratos" not in tables:
conn.execute("""
CREATE TABLE contratos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
numero_contrato TEXT UNIQUE NOT NULL,
nit_empresa TEXT NOT NULL DEFAULT '',
tipo_usuario TEXT NOT NULL,
descripcion TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL DEFAULT (datetime('now'))
)
""")
conn.commit()
def init_db():
conn = get_connection()
conn.executescript("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
email TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS config (
id INTEGER PRIMARY KEY AUTOINCREMENT,
key TEXT UNIQUE NOT NULL,
value TEXT
);
CREATE TABLE IF NOT EXISTS queries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
query_type TEXT NOT NULL CHECK(query_type IN ('terceros','transaccion')),
query_text TEXT NOT NULL,
description TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS rda_test_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
idrecepcion INTEGER NOT NULL,
factura TEXT,
contrato TEXT,
ok INTEGER NOT NULL DEFAULT 0,
mensaje TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS envios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
tipo TEXT NOT NULL CHECK(tipo IN ('terceros','transaccion')),
factura TEXT,
fecha_inicio TEXT,
fecha_fin TEXT,
pacientes_count INTEGER DEFAULT 0,
servicios_count INTEGER DEFAULT 0,
status TEXT NOT NULL DEFAULT 'pendiente',
json_enviado TEXT,
respuesta_api TEXT,
codigo_cuv TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS sync_wa_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
origen TEXT NOT NULL DEFAULT 'manual',
modo TEXT NOT NULL DEFAULT 'insertar',
total INTEGER NOT NULL DEFAULT 0,
created INTEGER NOT NULL DEFAULT 0,
skipped INTEGER NOT NULL DEFAULT 0,
updated INTEGER NOT NULL DEFAULT 0,
errores INTEGER NOT NULL DEFAULT 0,
errores_det TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY (user_id) REFERENCES users(id)
);
""")
conn.commit()
_migrate(conn)
conn.close()