feat: excluir contratos del envío TNS
- Columna excluir en tabla contratos (migración automática) - 25 contratos nuevos sembrados con excluir=1 (laboratorios externos, clínicas, médicos particulares) - load_excluded_set() en contratos.py para consultar el set en runtime - preview: marca items excluidos y los reporta en el conteo - send/send-one/send-direct: bloquea envío si contrato está excluido - automation preview+run: filtra excluidos antes del loop, reporta count - UI /contratos: columna Envío TNS con toggle Activo/Excluido, fila en rojo si excluida Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
3baa6e5f75
commit
200a3f550b
@@ -14,7 +14,7 @@ from app.services.json_generator import (
|
||||
)
|
||||
from app.services.api_client import get_tns_token, TNS_BASE
|
||||
from app.services.whatsapp_sync import sync_paciente, sync_todos, guardar_sync_log
|
||||
from app.routes.contratos import load_contrato_map
|
||||
from app.routes.contratos import load_contrato_map, load_excluded_set
|
||||
|
||||
router = APIRouter(prefix="/automation", tags=["automation"])
|
||||
|
||||
@@ -137,7 +137,11 @@ async def preview_automation(
|
||||
if not ok2:
|
||||
return JSONResponse({"success": False, "message": f"Error BD RDA: {err2}"})
|
||||
|
||||
grupos = agrupar_por_recepcion(rows_rda)
|
||||
grupos_all = agrupar_por_recepcion(rows_rda)
|
||||
excluded = load_excluded_set()
|
||||
grupos = {k: v for k, v in grupos_all.items()
|
||||
if str(v[0].get("CODCONTRATO") or "").strip() not in excluded}
|
||||
excluidos_count = len(grupos_all) - len(grupos)
|
||||
total_examenes = sum(len(v) for v in grupos.values())
|
||||
|
||||
# Agrupar RDA por COD_PACIENTE
|
||||
@@ -172,6 +176,7 @@ async def preview_automation(
|
||||
"pacientes": len(rows_pac),
|
||||
"recepciones": len(grupos),
|
||||
"examenes": total_examenes,
|
||||
"excluidos": excluidos_count,
|
||||
"pacientes_preview": pacientes_preview,
|
||||
})
|
||||
|
||||
@@ -273,7 +278,12 @@ async def run_automation(
|
||||
pass
|
||||
|
||||
# ── PASO 2: Enviar RDA Paciente ───────────────────────────────────────────
|
||||
grupos = agrupar_por_recepcion(rows_rda)
|
||||
excluded = load_excluded_set()
|
||||
grupos_all = agrupar_por_recepcion(rows_rda)
|
||||
grupos = {k: v for k, v in grupos_all.items()
|
||||
if str(v[0].get("CODCONTRATO") or "").strip() not in excluded}
|
||||
resultado["paso2_rda"]["excluidos"] = len(grupos_all) - len(grupos)
|
||||
|
||||
endpoint = f"{TNS_BASE}/v2/rda/RdaPaciente/Insertar?codigosucursal={api_sucursal or '00'}"
|
||||
prof_def = configs.get("profesional_default", "")
|
||||
esp_def = configs.get("especialidad_default", "")
|
||||
|
||||
Reference in New Issue
Block a user