Files
rips_manager/app/database.py
T
Lizandro GuarnizoandClaude Sonnet 4.6 9f2bd5164e feat: opcion 'sin contrato' para enviar numeroContrato null en TNS
- Agrega columna sin_contrato en tabla contratos (migration automatica)
- Contrato 040 marcado excluir=0, sin_contrato=1 en seed
- load_sin_contrato_set() retorna contratos que deben ir con null
- generar_rda_paciente acepta sin_contrato_set y fuerza numeroContrato=null
- Automation paso 2 y 3 pasan sin_contrato_set al generador
- Pagina contratos: columna y toggle "Sin contrato", checkbox en modal editar

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

130 lines
4.7 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 "activity_log" not in tables:
conn.execute("""
CREATE TABLE activity_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
username TEXT NOT NULL DEFAULT '',
accion TEXT NOT NULL,
detalle TEXT NOT NULL DEFAULT '',
ip TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL DEFAULT (datetime('now'))
)
""")
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 '',
excluir INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
)
""")
else:
contrato_cols = {r[1] for r in conn.execute("PRAGMA table_info(contratos)")}
if "excluir" not in contrato_cols:
conn.execute("ALTER TABLE contratos ADD COLUMN excluir INTEGER NOT NULL DEFAULT 0")
if "sin_contrato" not in contrato_cols:
conn.execute("ALTER TABLE contratos ADD COLUMN sin_contrato INTEGER NOT NULL DEFAULT 0")
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()