#include "dod_evidence_panel_helpers.h" namespace fn_viz { namespace dod_panel { StatusCounts count_status(const DodPanelState& state) { StatusCounts c; c.total = static_cast(state.items.size()); for (const auto& it : state.items) { if (it.status == "pending") ++c.pending; else if (it.status == "done") ++c.done; else if (it.status == "validated") ++c.validated; else if (it.status == "failed") ++c.failed; else ++c.pending; // unknown treated as pending if (it.required) { const DodEvidence* ev = find_evidence(state, it.id); const bool resolved = (it.status == "done" || it.status == "validated"); if (ev == nullptr && !resolved) ++c.missing_required; } } return c; } const DodEvidence* find_evidence(const DodPanelState& state, const std::string& item_id) { for (const auto& ev : state.evidences) { if (ev.item_id == item_id) return &ev; } return nullptr; } std::string status_icon_id(const std::string& status) { if (status == "done") return "circle-dot"; if (status == "validated") return "circle-check"; if (status == "failed") return "circle-x"; return "circle-dashed"; // pending / unknown } int status_color_token(const std::string& status) { if (status == "done") return 1; if (status == "validated") return 2; if (status == "failed") return 3; return 0; } } // namespace dod_panel } // namespace fn_viz