From 989d3445a019db7eee237dcb3b9c2e57958654cc Mon Sep 17 00:00:00 2001 From: Debby Date: Wed, 1 Jul 2026 19:50:44 +0700 Subject: [PATCH] add condition in framework --- scripts/bigquery_aggregate_layer.py | 123 ++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/scripts/bigquery_aggregate_layer.py b/scripts/bigquery_aggregate_layer.py index 66d4653..d003792 100644 --- a/scripts/bigquery_aggregate_layer.py +++ b/scripts/bigquery_aggregate_layer.py @@ -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.