- Nuevo servicio whatsapp_sync.py: mapeo de campos RIPS→lab_pacientes y cliente HTTP para /api/lab/ingest_paciente.php - Nueva ruta /pacientes con sync masiva por rango de fechas o todos - Hook en /terceros/send y /automation/run: sync silencioso a WhatsApp después de cada envío a TNS - Config: campos whatsapp_url y whatsapp_api_key + botón probar conexión Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
from fastapi import APIRouter, Request, Form, Depends
|
|
from fastapi.responses import JSONResponse, RedirectResponse
|
|
from app.database import get_connection
|
|
from app.auth import get_current_user
|
|
from app.services.api_client import get_tns_token
|
|
|
|
router = APIRouter(prefix="/config", tags=["config"])
|
|
|
|
DEFAULT_KEYS = [
|
|
("firebird_host", "localhost"),
|
|
("firebird_port", "3050"),
|
|
("firebird_database", "/path/to/database.fdb"),
|
|
("firebird_user", "SYSDBA"),
|
|
("firebird_password", "masterkey"),
|
|
("api_url", "http://192.168.0.125"),
|
|
("api_method", "POST"),
|
|
("api_key", ""),
|
|
("api_timeout", "30"),
|
|
("api_version", "1"),
|
|
("api_sucursal", "00"),
|
|
("tns_empresa", "9002787299"),
|
|
("tns_usuario", "DOCUXER"),
|
|
("tns_password", "Nicolas2796*+"),
|
|
("num_documento_obligado", ""),
|
|
("cod_prestador", ""),
|
|
("profesional_default", ""),
|
|
("especialidad_default", ""),
|
|
("remisionante_default", "00"),
|
|
("prefijo_tns_default", "00"),
|
|
("whatsapp_url", ""),
|
|
("whatsapp_api_key", "rips-lab-sync-2026"),
|
|
]
|
|
|
|
|
|
def ensure_defaults():
|
|
conn = get_connection()
|
|
for key, default in DEFAULT_KEYS:
|
|
exists = conn.execute("SELECT id FROM config WHERE key = ?", (key,)).fetchone()
|
|
if not exists:
|
|
conn.execute("INSERT INTO config (key, value) VALUES (?, ?)", (key, default))
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
@router.get("")
|
|
async def config_page(request: Request, user: dict = Depends(get_current_user)):
|
|
conn = get_connection()
|
|
configs = conn.execute("SELECT * FROM config ORDER BY key").fetchall()
|
|
conn.close()
|
|
return request.app.state.templates.TemplateResponse("config.html", {
|
|
"request": request, "user": user, "configs": configs
|
|
})
|
|
|
|
|
|
@router.post("/test-tns")
|
|
async def test_tns(
|
|
request: Request,
|
|
user: dict = Depends(get_current_user),
|
|
empresa: str = Form(""),
|
|
usuario: str = Form(""),
|
|
password: str = Form(""),
|
|
):
|
|
token, err = await get_tns_token(empresa, usuario, password)
|
|
if token:
|
|
return JSONResponse({"success": True, "message": "Login TNS exitoso"})
|
|
return JSONResponse({"success": False, "message": err or "Error desconocido"})
|
|
|
|
|
|
@router.post("/save")
|
|
async def config_save(request: Request, user: dict = Depends(get_current_user)):
|
|
form = await request.form()
|
|
conn = get_connection()
|
|
for key, value in form.multi_items():
|
|
if key.startswith("config_"):
|
|
real_key = key.replace("config_", "", 1)
|
|
conn.execute(
|
|
"UPDATE config SET value = ? WHERE key = ?",
|
|
(value, real_key)
|
|
)
|
|
conn.commit()
|
|
conn.close()
|
|
return RedirectResponse("/config", status_code=302)
|