add condition in framework

This commit is contained in:
Debby
2026-07-01 19:50:44 +07:00
parent f738eacbfb
commit 989d3445a0
+123
View File
@@ -301,6 +301,129 @@ _PILLAR_CONTEXT_FALLBACK: dict = {
}
# =============================================================================
# FRAMEWORK CONDITION CLASSIFIER
# =============================================================================
#
# Konteks kondisi per framework per tier.
# Framework mencerminkan era kebijakan global:
# MDGs : Millennium Development Goals (2000-2015)
# SDGs : Sustainable Development Goals (2016-sekarang)
# Total : Gabungan semua indikator (lintas framework)
#
# Label tier sama dengan pillar condition (GFSI 2022 + IPC 2019),
# namun deskripsi kontekstual mengacu pada capaian indikator dalam
# kerangka MDGs/SDGs/Total secara keseluruhan.
#
# =============================================================================
_FRAMEWORK_CONTEXT: dict = {
# ---- MDGs ----
"MDGs": {
"Secure" : ("MDG food security targets are consistently met",
"Target ketahanan pangan MDGs terpenuhi secara konsisten"),
"Adequate" : ("MDG food security targets are largely on track",
"Target ketahanan pangan MDGs sebagian besar berjalan sesuai rencana"),
"Moderate" : ("Progress toward MDG food security targets shows mixed results",
"Kemajuan menuju target MDGs menunjukkan hasil yang beragam"),
"At Risk" : ("MDG food security targets are at risk of not being met",
"Target ketahanan pangan MDGs berisiko tidak tercapai"),
"Critical" : ("MDG food security targets are severely off track",
"Target ketahanan pangan MDGs sangat jauh dari jalur pencapaian"),
},
# ---- SDGs ----
"SDGs": {
"Secure" : ("SDG food security commitments are well on track",
"Komitmen ketahanan pangan SDGs berjalan dengan baik"),
"Adequate" : ("SDG food security indicators show adequate progress",
"Indikator ketahanan pangan SDGs menunjukkan kemajuan yang memadai"),
"Moderate" : ("SDG food security progress is uneven and requires attention",
"Kemajuan ketahanan pangan SDGs tidak merata dan perlu perhatian"),
"At Risk" : ("SDG food security commitments face significant implementation gaps",
"Komitmen ketahanan pangan SDGs menghadapi kesenjangan implementasi yang signifikan"),
"Critical" : ("SDG food security goals are critically off track",
"Tujuan ketahanan pangan SDGs sangat jauh dari pencapaian yang diharapkan"),
},
# ---- Total ----
"Total": {
"Secure" : ("Overall food security performance is strong across all indicators",
"Kinerja ketahanan pangan secara keseluruhan kuat di semua indikator"),
"Adequate" : ("Overall food security performance is adequate with room for improvement",
"Kinerja ketahanan pangan secara keseluruhan memadai dengan ruang perbaikan"),
"Moderate" : ("Overall food security performance shows moderate challenges",
"Kinerja ketahanan pangan secara keseluruhan menunjukkan tantangan moderat"),
"At Risk" : ("Overall food security performance indicates systemic vulnerabilities",
"Kinerja ketahanan pangan secara keseluruhan mengindikasikan kerentanan sistemik"),
"Critical" : ("Overall food security performance is critically low across indicators",
"Kinerja ketahanan pangan secara keseluruhan sangat rendah di seluruh indikator"),
},
}
_FRAMEWORK_CONTEXT_FALLBACK: dict = {
"Secure" : ("Food security performance is strong under this framework",
"Kinerja ketahanan pangan kuat dalam kerangka ini"),
"Adequate" : ("Food security performance is adequate under this framework",
"Kinerja ketahanan pangan memadai dalam kerangka ini"),
"Moderate" : ("Food security performance shows moderate challenges under this framework",
"Kinerja ketahanan pangan menunjukkan tantangan moderat dalam kerangka ini"),
"At Risk" : ("Food security performance is at risk under this framework",
"Kinerja ketahanan pangan berisiko dalam kerangka ini"),
"Critical" : ("Food security performance is critically low under this framework",
"Kinerja ketahanan pangan sangat rendah dalam kerangka ini"),
}
def get_framework_condition(framework: str, score: float) -> tuple:
"""
Mengembalikan 4-tuple kondisi framework berdasarkan skor dan nama framework.
Tier mengacu GFSI 2022 (Economist Impact) + IPC Phase Classification (2019):
>= 75 -> Secure / Aman
>= 60 -> Adequate / Memadai
>= 40 -> Moderate / Sedang
>= 20 -> At Risk / Berisiko
< 20 -> Critical / Kritis
Deskripsi kontekstual mengacu capaian MDGs/SDGs per FAO SOFI 2024
dan UN SDG Progress Report 2023.
Args:
framework : Nama framework ("MDGs", "SDGs", atau "Total").
score : Skor ternormalisasi skala 1-100.
Returns:
Tuple (
condition_en : str — label tier EN, e.g. "At Risk"
condition_id : str — label tier ID, e.g. "Berisiko"
condition_desc_en : str — deskripsi kontekstual EN
condition_desc_id : str — deskripsi kontekstual ID
)
"""
if score is None or (isinstance(score, float) and np.isnan(score)):
return ("N/A", "N/A", "N/A", "N/A")
# Tentukan tier
tier_label_en = _CONDITION_TIERS[-1][1] # default: Critical
tier_label_id = _CONDITION_TIERS[-1][2]
for min_score, lbl_en, lbl_id in _CONDITION_TIERS:
if score >= min_score:
tier_label_en = lbl_en
tier_label_id = lbl_id
break
# Ambil deskripsi kontekstual per framework
ctx = _FRAMEWORK_CONTEXT.get(framework, None)
if ctx:
ctx_en, ctx_id = ctx.get(
tier_label_en,
_FRAMEWORK_CONTEXT_FALLBACK.get(tier_label_en, ("", ""))
)
else:
ctx_en, ctx_id = _FRAMEWORK_CONTEXT_FALLBACK.get(tier_label_en, ("", ""))
return tier_label_en, tier_label_id, ctx_en, ctx_id
def get_pillar_condition(pillar_name: str, score: float) -> tuple:
"""
Mengembalikan 4-tuple kondisi pilar berdasarkan skor dan nama pilar.