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:
|
def get_pillar_condition(pillar_name: str, score: float) -> tuple:
|
||||||
"""
|
"""
|
||||||
Mengembalikan 4-tuple kondisi pilar berdasarkan skor dan nama pilar.
|
Mengembalikan 4-tuple kondisi pilar berdasarkan skor dan nama pilar.
|
||||||
|
|||||||
Reference in New Issue
Block a user