Files
caronte/backend/app/services/checklist_engine.py

44 lines
1.4 KiB
Python

import json
import os
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.checklist import ChecklistItem
from app.models.falecido import Falecido
TEMPLATES_PATH = os.path.join(os.path.dirname(__file__), "..", "data", "checklist_templates.json")
def load_templates():
with open(TEMPLATES_PATH, "r", encoding="utf-8") as f:
return json.load(f)
async def gerar_checklist(db: AsyncSession, familia_id: int, falecido: Falecido) -> list[ChecklistItem]:
templates = load_templates()
items = []
for t in templates:
cond = t.get("condicao")
if cond:
val = getattr(falecido, cond, 0)
if not val:
continue
item = ChecklistItem(
familia_id=familia_id,
falecido_id=falecido.id,
titulo=t["titulo"],
descricao=t.get("descricao"),
fase=t["fase"],
categoria=t["categoria"],
status="pendente",
prazo_dias=t.get("prazo_dias"),
ordem=t.get("ordem", 0),
)
db.add(item)
items.append(item)
await db.commit()
return items
def get_proximo_passo(items: list[dict]) -> dict | None:
pendentes = [i for i in items if i.get("status") == "pendente"]
if not pendentes:
return None
pendentes.sort(key=lambda x: x.get("ordem", 999))
return pendentes[0]