44 lines
1.4 KiB
Python
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]
|