add condition in framework
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user