CARONTE v1.0 - Plataforma de Gestão Social
This commit is contained in:
43
backend/app/services/checklist_engine.py
Normal file
43
backend/app/services/checklist_engine.py
Normal file
@@ -0,0 +1,43 @@
|
||||
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]
|
||||
Reference in New Issue
Block a user