{
  "schema_version": 2,
  "engine_version": "0.13.0",
  "engine_sha": "81b48b7bb1e5a28e9d5dc8bd36c4c0ffe9d59813",
  "reference": {
    "tool": "pvlib",
    "version": "0.15.2",
    "radiation_db": "PVGIS-ERA5",
    "meteo_db": "ERA5",
    "year_min": 2005,
    "year_max": 2023,
    "module": "Canadian_Solar_Inc__CS6K_275M",
    "inverter": "ABB__PVI_10_0_I_OUTD_x_US_480_y_z__480V_",
    "tilt_deg": 10.0,
    "modelchain": {
      "ac_model": "sandia",
      "aoi_model": "physical",
      "dc_model": "cec",
      "faiman_parameters": "{\"u0\": 25.0, \"u1\": 6.84}",
      "losses_model": "no_loss",
      "solar_position_method": "nrel_numpy",
      "spectral_model": "no_loss"
    }
  },
  "tolerance_source": "tools/oracle/tolerances.toml",
  "tolerances": {
    "solar_position": {
      "zenith_max_abs_diff_deg": 0.01,
      "azimuth_max_abs_diff_deg": 0.01,
      "aoi_max_abs_diff_deg": 0.01,
      "elevation_threshold_deg": 0.0
    },
    "poa": {
      "hourly_max_abs_diff_w_m2": 2.0,
      "hourly_max_rel_diff_pct": 1.0,
      "annual_max_rel_diff_pct": 0.5,
      "irradiance_threshold_w_m2": 50.0
    },
    "effective_irradiance": {
      "annual_max_rel_diff_pct": 0.5
    },
    "cell_temperature": {
      "hourly_max_abs_diff_deg_c": 0.2,
      "irradiance_threshold_w_m2": 50.0
    },
    "dc_power": {
      "hourly_max_rel_diff_pct": 0.5,
      "annual_max_rel_diff_pct": 0.5,
      "power_threshold_pnom_pct": 1.0
    },
    "ac_power": {
      "annual_max_rel_diff_pct": 1.0,
      "monthly_max_rel_diff_pct": 1.5
    },
    "iav": {
      "interannual_sigma_max_diff_pp": 0.1
    }
  },
  "formulation": [
    {
      "stage": "solar_position",
      "label": "Posisi matahari (zenith, azimuth, sudut datang)",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/solar_position.md"
    },
    {
      "stage": "ghi",
      "label": "GHI tahunan (horizontal)",
      "status": "weather",
      "pending_issue": null,
      "doc": "docs/formulation/ghi.md"
    },
    {
      "stage": "adjusted_ghi",
      "label": "GHI setelah koreksi spektral",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/adjusted_ghi.md"
    },
    {
      "stage": "poa_irradiance",
      "label": "Irradiance bidang modul (POA)",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/poa_irradiance.md"
    },
    {
      "stage": "shaded_irradiance",
      "label": "Setelah bayangan",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/shaded_irradiance.md"
    },
    {
      "stage": "effective_irradiance",
      "label": "Setelah pantulan (IAM)",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/effective_irradiance.md"
    },
    {
      "stage": "soiled_irradiance",
      "label": "Setelah soiling",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/soiled_irradiance.md"
    },
    {
      "stage": "total_irradiance",
      "label": "Total irradiance kolektor",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/total_irradiance.md"
    },
    {
      "stage": "nameplate_power",
      "label": "Nameplate",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/nameplate_power.md"
    },
    {
      "stage": "module_irradiance_derated_power",
      "label": "Output pada tingkat irradiance",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/module_irradiance_derated_power.md"
    },
    {
      "stage": "module_mpp_power",
      "label": "Output pada suhu sel",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/module_mpp_power.md"
    },
    {
      "stage": "module_power",
      "label": "Output setelah mismatch",
      "status": "approximated",
      "pending_issue": "#54",
      "doc": "docs/formulation/module_power.md"
    },
    {
      "stage": "optimizer_output_power",
      "label": "Output optimizer",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/optimizer_output_power.md"
    },
    {
      "stage": "optimal_dc_power",
      "label": "DC optimal (setelah kabel DC)",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/optimal_dc_power.md"
    },
    {
      "stage": "actual_dc_power",
      "label": "DC terbatas inverter (clipping)",
      "status": "approximated",
      "pending_issue": "#15",
      "doc": "docs/formulation/actual_dc_power.md"
    },
    {
      "stage": "ac_power",
      "label": "Output inverter",
      "status": "approximated",
      "pending_issue": "#15",
      "doc": "docs/formulation/ac_power.md"
    },
    {
      "stage": "energy_to_grid_power",
      "label": "Energi ke grid (kabel AC, trafo)",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/energy_to_grid_power.md"
    },
    {
      "stage": "lid_derated_power",
      "label": "Setelah LID",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/lid_derated_power.md"
    },
    {
      "stage": "availability_derated_power",
      "label": "Setelah ketidaktersediaan sistem",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/availability_derated_power.md"
    },
    {
      "stage": "grid_power",
      "label": "Terkirim setelah batas ekspor (Permen ESDM 2/2024)",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/grid_power.md"
    }
  ],
  "cases": [
    {
      "id": "bali_equator_dcac110",
      "site_id": "bali",
      "site_name": "Bali",
      "latitude": -8.672,
      "longitude": 115.212,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/bali_equator_dcac110.csv",
      "fixture_sha256": "dd8f957e13395be15f417996038af3d69cb99e04acd98e60bc474d1e0f256add",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "68377bce732e8611a796a788f5c0fc4b8a50721065febbad58e840db766d67ef",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2090.8120783000027,
        "engine_poa_kwh_m2": 2090.812235999175,
        "oracle_ac_kwh": 20196.88045410002,
        "engine_ac_kwh": 20397.63095459644,
        "ac_bias_pct": 0.9939678602972856
      },
      "stages": [
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_solar_position_bali",
            "reason": null,
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4443,
          "annual_bias_pct": null,
          "hourly_rmse": 2.866572692871542e-7,
          "hourly_max_abs_diff": 4.998314580006991e-7,
          "hourly_max_abs_diff_azimuth": 4.999471165945124e-7,
          "hourly_max_rel_diff_pct": 0.000038165773367067846,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.998314580006991e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999471165945124e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998830007707511e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.866572692871542e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": 2.4170812221457224e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.8663811791366085e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.771355663767596e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4443.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_bali",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3990,
          "annual_bias_pct": 7.542484260354842e-6,
          "hourly_rmse": 0.0008655703582824516,
          "hourly_max_abs_diff": 0.008054777145900971,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.004250612463324974,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            4.17469268199108e-6,
            5.388009634620093e-6,
            -0.00002374583251717646,
            -0.00006791332798280946,
            -0.00009104158862426593,
            -0.000056829355504382775,
            0.000022641566161207104,
            0.00006434944592915234,
            0.000033714817384188806,
            0.000057840402129039975,
            0.00010821549565927882,
            0.000033351544669961565
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.542484260354842e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.008054777145900971,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.004250612463324974,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0001017595287165532
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0008655703582824516
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.00004382676731388261
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.382652225723515e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00016555579466793907
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3990.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_effective_irradiance_bali",
            "reason": null,
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4438,
          "annual_bias_pct": 7.815420939615132e-6,
          "hourly_rmse": 0.0010632326657885815,
          "hourly_max_abs_diff": 0.011984190537440043,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0342647288532387,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            3.569972501596841e-6,
            5.0356530006367414e-6,
            -0.00002379945073315598,
            -0.0000685067428278412,
            -0.00009357030310605714,
            -0.000057544059856371355,
            0.0000231725020643283,
            0.00006520994710070702,
            0.000035182663165267305,
            0.00005899739784475178,
            0.00011064908065567057,
            0.00003407410558701169
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.815420939615132e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00010204035857923803
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0010632326657885815
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00003620926970015912
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.815420920084373e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00022948849529226046
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4438.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_chain_bali",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3990,
          "annual_bias_pct": null,
          "hourly_rmse": 0.000035857836969123334,
          "hourly_max_abs_diff": 0.00023874522273104049,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0007308922504922423,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00023874522273104049,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.000035857836969123334
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -1.0556109599775283e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -2.695291439873259e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00009155581430994845
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3990.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4134,
          "annual_bias_pct": 1.7271423786732458,
          "hourly_rmse": 102.7485285161786,
          "hourly_max_abs_diff": 327.9855814796847,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.126302707436498,
          "hourly_pass_fraction": 0.022980164489598453,
          "monthly_bias_pct": [
            1.7467134193201495,
            1.8758566463137714,
            2.0648546180521246,
            2.072687740596608,
            1.9560099215807765,
            1.3071991415539443,
            1.3065203254736808,
            1.4709952808332256,
            1.7297003692997834,
            1.9181273817736888,
            1.9106256522034566,
            1.229479753646301
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.7271423786732458,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.126302707436498,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 30.86202522280797
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 102.7485285161786
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 86.80956557455099
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.718793247724911
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.0343780764069526
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.022980164489598453
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4134.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4167,
          "annual_bias_pct": 0.9939678602971865,
          "hourly_rmse": 66.15308299220351,
          "hourly_max_abs_diff": 241.43591822049711,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 12645.628501684221,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.1777111564179386,
            1.2349875762870326,
            1.344102414313362,
            1.2597385652433222,
            1.190387675906862,
            0.4710755413892809,
            0.4894632426761067,
            0.6539965463179798,
            0.9252860053843477,
            1.1363115586970036,
            1.2698274487473054,
            0.7358681225220283
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.9939678602971865,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.344102414313362,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 17.671078049534522
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 66.15308299220351
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 46.7778931123145
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.9651167715826359
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.3648637345504133
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4167.0
            }
          ]
        }
      ]
    },
    {
      "id": "bali_equator_dcac130",
      "site_id": "bali",
      "site_name": "Bali",
      "latitude": -8.672,
      "longitude": 115.212,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 48,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.3221,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/bali_equator_dcac130.csv",
      "fixture_sha256": "111a2ff18bc403202d52467926f39c01b8fef0714e69d4f39fdd1b451b8e709d",
      "hemisphere": "selatan",
      "pnom_kwp": 13.221119999999999,
      "weather_sha256": "68377bce732e8611a796a788f5c0fc4b8a50721065febbad58e840db766d67ef",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2090.8120783000027,
        "engine_poa_kwh_m2": 2090.812235999175,
        "oracle_ac_kwh": 24048.59449499998,
        "engine_ac_kwh": 24383.46883576652,
        "ac_bias_pct": 1.3924902797798318
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4443,
          "annual_bias_pct": null,
          "hourly_rmse": 2.866572692871542e-7,
          "hourly_max_abs_diff": 4.998314580006991e-7,
          "hourly_max_abs_diff_azimuth": 4.999471165945124e-7,
          "hourly_max_rel_diff_pct": 0.000038165773367067846,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.998314580006991e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999471165945124e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998830007707511e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.866572692871542e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": 2.4170812221457224e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.8663811791366085e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.771355663767596e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4443.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3990,
          "annual_bias_pct": 7.542484260354842e-6,
          "hourly_rmse": 0.0008655703582824516,
          "hourly_max_abs_diff": 0.008054777145900971,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.004250612463324974,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            4.17469268199108e-6,
            5.388009634620093e-6,
            -0.00002374583251717646,
            -0.00006791332798280946,
            -0.00009104158862426593,
            -0.000056829355504382775,
            0.000022641566161207104,
            0.00006434944592915234,
            0.000033714817384188806,
            0.000057840402129039975,
            0.00010821549565927882,
            0.000033351544669961565
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.542484260354842e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.008054777145900971,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.004250612463324974,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0001017595287165532
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0008655703582824516
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.00004382676731388261
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.382652225723515e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00016555579466793907
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3990.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4438,
          "annual_bias_pct": 7.815420939615132e-6,
          "hourly_rmse": 0.0010632326657885815,
          "hourly_max_abs_diff": 0.011984190537440043,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0342647288532387,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            3.569972501596841e-6,
            5.0356530006367414e-6,
            -0.00002379945073315598,
            -0.0000685067428278412,
            -0.00009357030310605714,
            -0.000057544059856371355,
            0.0000231725020643283,
            0.00006520994710070702,
            0.000035182663165267305,
            0.00005899739784475178,
            0.00011064908065567057,
            0.00003407410558701169
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.815420939615132e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00010204035857923803
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0010632326657885815
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00003620926970015912
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.815420920084373e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00022948849529226046
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4438.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3990,
          "annual_bias_pct": null,
          "hourly_rmse": 0.000035857836969123334,
          "hourly_max_abs_diff": 0.00023874522273104049,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0007308922504922423,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00023874522273104049,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.000035857836969123334
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -1.0556109599775283e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -2.695291439873259e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00009155581430994845
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3990.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4134,
          "annual_bias_pct": 1.727142356187564,
          "hourly_rmse": 123.29823322272777,
          "hourly_max_abs_diff": 393.58259777561943,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.126302707436498,
          "hourly_pass_fraction": 0.022980164489598453,
          "monthly_bias_pct": [
            1.7467134136857683,
            1.8758566097230496,
            2.064854602742484,
            2.0726877127400942,
            1.9560099185768092,
            1.3071990916864273,
            1.3065203515192763,
            1.470995272853413,
            1.7297003522427277,
            1.9181273850357574,
            1.9106255975864808,
            1.2294796527803258
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.727142356187564,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.126302707436498,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 37.03442986027742
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 123.29823322272777
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 104.17147769768533
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.718793231079691
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.0343780596290655
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.022980164489598453
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4134.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4178,
          "annual_bias_pct": 1.3924902797812226,
          "hourly_rmse": 166.07257819587485,
          "hourly_max_abs_diff": 576.8959999999988,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 14499.63991285626,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.2151823353470168,
            1.3653975457072884,
            1.8685423977423021,
            2.227504596585841,
            1.3483371832915778,
            0.3637744363938199,
            0.39535692039805587,
            1.231892333024258,
            1.5136857652823945,
            2.4134654373422904,
            1.3364728214035821,
            1.024905555133206
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.3924902797812226,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.4134654373422904,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 31.403008629244667
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 166.07257819587485
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 78.70591708439852
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.3673702288380547
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.8852049205895423
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4178.0
            }
          ]
        }
      ]
    },
    {
      "id": "bali_reverse_dcac110",
      "site_id": "bali",
      "site_name": "Bali",
      "latitude": -8.672,
      "longitude": 115.212,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/bali_reverse_dcac110.csv",
      "fixture_sha256": "a679781a5ed2606a67cafdfd8b567ce8ecb892717e939df0c5c4221c08a50309",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "68377bce732e8611a796a788f5c0fc4b8a50721065febbad58e840db766d67ef",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1972.0251715000002,
        "engine_poa_kwh_m2": 1972.0253458647107,
        "oracle_ac_kwh": 19042.620658699998,
        "engine_ac_kwh": 19232.728356082334,
        "ac_bias_pct": 0.998327387756275
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4443,
          "annual_bias_pct": null,
          "hourly_rmse": 2.866572692871542e-7,
          "hourly_max_abs_diff": 4.998314580006991e-7,
          "hourly_max_abs_diff_azimuth": 4.999471165945124e-7,
          "hourly_max_rel_diff_pct": 0.000038165773367067846,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.998314580006991e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999471165945124e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999670366601094e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.866572692871542e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": 2.4170812221457224e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.8663811791366085e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.771355663767596e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4443.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3987,
          "annual_bias_pct": 8.841910994820466e-6,
          "hourly_rmse": 0.0006493336945831247,
          "hourly_max_abs_diff": 0.005242994205559626,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005489494465016737,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000014376258808167466,
            -0.00003412855763165817,
            -0.00002820847434977861,
            0.00002469570718804178,
            0.00006365709581471982,
            0.00004776531492296448,
            -0.000015779457346850284,
            -0.000038198933543639117,
            7.78696876732668e-6,
            0.00005396743361340907,
            0.000022603389285227308,
            0.000014135468464578613
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 8.841910994820466e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.005242994205559626,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005489494465016737,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005759812715572632
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006493336945831247
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00003555650610556577
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.208799815894925e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00013164726039357626
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3987.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4438,
          "annual_bias_pct": 9.13139883289079e-6,
          "hourly_rmse": 0.0006370541476099439,
          "hourly_max_abs_diff": 0.005216023976146289,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.016363154757239273,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000013920207129839753,
            -0.000034782746686096776,
            -0.000029290483772420295,
            0.000025573080649835572,
            0.00006611375580312112,
            0.00005117089351561138,
            -0.00001620661101842012,
            -0.000039601528023624,
            7.775115597870368e-6,
            0.000054946945058107806,
            0.00002307790299566504,
            0.000013850752316531801
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 9.13139883289079e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005808700294546341
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006370541476099439
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00003979237007653616
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 9.131399036927397e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00014618871956526645
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4438.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3987,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003312130437756365,
          "hourly_max_abs_diff": 0.00015778339780325723,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0005323305141727719,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00015778339780325723,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003312130437756365
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 7.052212204631253e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.8331805751770214e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008609685875533028
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3987.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4139,
          "annual_bias_pct": 1.6992435371234966,
          "hourly_rmse": 95.27889159741,
          "hourly_max_abs_diff": 318.5661054115153,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.619833916605746,
          "hourly_pass_fraction": 0.023918820971249095,
          "monthly_bias_pct": [
            1.7740064436430982,
            1.8849814061419459,
            1.9879700326519645,
            1.9020534310465533,
            1.848003009846056,
            1.3333443142116481,
            1.300962261642027,
            1.3668440706469143,
            1.6489017177501488,
            1.905786596968943,
            1.9765893740324232,
            1.2213691647198874
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.6992435371234966,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.619833916605746,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 28.823581152651013
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 95.27889159741
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 80.45925190086744
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.6910479637383964
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.0025189374314145
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.023918820971249095
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4139.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4170,
          "annual_bias_pct": 0.9983273877561089,
          "hourly_rmse": 63.9465446952127,
          "hourly_max_abs_diff": 231.7234331950549,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 2887.1156708780472,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.127410471879822,
            1.2008335718704548,
            1.2634877155083062,
            1.117311055811009,
            1.2206788253702987,
            0.7092420483537131,
            0.654884589110656,
            0.6106010356326469,
            0.8600261281263267,
            1.1046425193319676,
            1.2894801792221566,
            0.6518635082432159
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.9983273877561089,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.2894801792221566,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 16.67479232101903
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 63.9465446952127
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 44.34283826162675
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.971030399991211
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.400317194562238
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4170.0
            }
          ]
        }
      ]
    },
    {
      "id": "balikpapan_equator_dcac110",
      "site_id": "balikpapan",
      "site_name": "Balikpapan",
      "latitude": -1.237,
      "longitude": 116.852,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/balikpapan_equator_dcac110.csv",
      "fixture_sha256": "0d99ba5432935b6e715847eef699356b528c99591cae278671d68e121dc1a830",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "0143a08ed29352d2a3d1edf8fbf845a4145cae73b39fcbf2145d59991f2ebdee",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1891.3909563999953,
        "engine_poa_kwh_m2": 1891.3914685163613,
        "oracle_ac_kwh": 18100.491962699958,
        "engine_ac_kwh": 18341.82143253925,
        "ac_bias_pct": 1.3332757492813194
      },
      "stages": [
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_solar_position_balikpapan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4396,
          "annual_bias_pct": null,
          "hourly_rmse": 2.908325719111663e-7,
          "hourly_max_abs_diff": 4.999059797228256e-7,
          "hourly_max_abs_diff_azimuth": 4.999843667974346e-7,
          "hourly_max_rel_diff_pct": 0.000032300446291655364,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.999059797228256e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999843667974346e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.996391034239878e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.908325719111663e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": 7.500508815444269e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.54086305467463e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.974703532527946e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4396.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_balikpapan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3974,
          "annual_bias_pct": 0.000027076177155926674,
          "hourly_rmse": 0.0005340299205858868,
          "hourly_max_abs_diff": 0.004705011521025426,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0028828589348333204,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.375699123580915e-6,
            -1.3816050483771767e-6,
            -0.000015190364763519432,
            -0.000027305421536906764,
            -0.000028443492156939055,
            -0.000010044052174271938,
            0.000017254409679766603,
            0.000040676853026845335,
            0.000029658951811726298,
            0.00013726403500077044,
            0.00016753679239851437,
            0.000014603356041235518
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000027076177155926674,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.004705011521025426,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.0028828589348333204,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00010294100538826719
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0005340299205858868
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.000023499332370103475
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.947535086345996e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00011243433335232266
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3974.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_effective_irradiance_balikpapan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4378,
          "annual_bias_pct": 0.000027524167212275963,
          "hourly_rmse": 0.0010470826266318338,
          "hourly_max_abs_diff": 0.016877754193927785,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.07670901513645026,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -2.835570761142148e-6,
            -1.1755136352964292e-6,
            -0.000014872113948551759,
            -0.000027285162435671285,
            -0.000028453263039981737,
            -9.839370231467007e-6,
            0.00001752900765325683,
            0.0000409798591671083,
            0.000029460364198610264,
            0.0001394264399339177,
            0.00016924322894617841,
            0.000014441980484406283
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000027524167212275963,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0001026916835973235
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0010470826266318338
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00011720575870335303
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.00002752416740631642
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00024589301603007
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4378.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_chain_balikpapan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3974,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003239167857536427,
          "hourly_max_abs_diff": 0.00016442476447053878,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00048470055958638766,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00016442476447053878,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003239167857536427
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 1.1248235831881446e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.7248012368794993e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007846642546077619
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3974.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4072,
          "annual_bias_pct": 2.037672369053772,
          "hourly_rmse": 104.73221899584014,
          "hourly_max_abs_diff": 298.4891831084078,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 16.924336326971307,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.041221939747388,
            2.133707125540346,
            2.2307985285215626,
            2.0944413542659923,
            2.0575271778488604,
            1.9241152158460912,
            1.865346932191033,
            1.8968402097100818,
            2.0160611669658826,
            2.1111282412672754,
            2.010722323090336,
            2.0589191380017224
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.037672369053772,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 16.924336326971307,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 32.03638450362506
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 104.73221899584014
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 93.24736506323589
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.0286057811462688
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.2784599305638067
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4072.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4082,
          "annual_bias_pct": 1.333275749281323,
          "hourly_rmse": 67.14906250610517,
          "hourly_max_abs_diff": 211.5865037840722,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 22654.900057013787,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4481092179991015,
            1.4740803298350025,
            1.5072479446622953,
            1.3427890829341644,
            1.3093045219328499,
            1.2170830864019926,
            1.1543404730357603,
            1.0961899750670439,
            1.1732496625753446,
            1.3907341795716728,
            1.5054524285297348,
            1.4686896736379598
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.333275749281323,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.5072479446622953,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 20.241591532964577
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 67.14906250610517
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 57.24236042943987
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.2909224553370604
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.514337144618885
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4082.0
            }
          ]
        }
      ]
    },
    {
      "id": "balikpapan_equator_dcac130",
      "site_id": "balikpapan",
      "site_name": "Balikpapan",
      "latitude": -1.237,
      "longitude": 116.852,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 48,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.3221,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/balikpapan_equator_dcac130.csv",
      "fixture_sha256": "5bb34dd143712d56efdfd05466abe52e9b7d255fc7212daaeb6a92e8b282e4c8",
      "hemisphere": "selatan",
      "pnom_kwp": 13.221119999999999,
      "weather_sha256": "0143a08ed29352d2a3d1edf8fbf845a4145cae73b39fcbf2145d59991f2ebdee",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1891.3909563999953,
        "engine_poa_kwh_m2": 1891.3914685163613,
        "oracle_ac_kwh": 21728.151330000048,
        "engine_ac_kwh": 21997.389991727192,
        "ac_bias_pct": 1.2391236494906328
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4396,
          "annual_bias_pct": null,
          "hourly_rmse": 2.908325719111663e-7,
          "hourly_max_abs_diff": 4.999059797228256e-7,
          "hourly_max_abs_diff_azimuth": 4.999843667974346e-7,
          "hourly_max_rel_diff_pct": 0.000032300446291655364,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.999059797228256e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999843667974346e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.996391034239878e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.908325719111663e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": 7.500508815444269e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.54086305467463e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.974703532527946e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4396.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3974,
          "annual_bias_pct": 0.000027076177155926674,
          "hourly_rmse": 0.0005340299205858868,
          "hourly_max_abs_diff": 0.004705011521025426,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0028828589348333204,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.375699123580915e-6,
            -1.3816050483771767e-6,
            -0.000015190364763519432,
            -0.000027305421536906764,
            -0.000028443492156939055,
            -0.000010044052174271938,
            0.000017254409679766603,
            0.000040676853026845335,
            0.000029658951811726298,
            0.00013726403500077044,
            0.00016753679239851437,
            0.000014603356041235518
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000027076177155926674,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.004705011521025426,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.0028828589348333204,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00010294100538826719
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0005340299205858868
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.000023499332370103475
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.947535086345996e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00011243433335232266
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3974.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4378,
          "annual_bias_pct": 0.000027524167212275963,
          "hourly_rmse": 0.0010470826266318338,
          "hourly_max_abs_diff": 0.016877754193927785,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.07670901513645026,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -2.835570761142148e-6,
            -1.1755136352964292e-6,
            -0.000014872113948551759,
            -0.000027285162435671285,
            -0.000028453263039981737,
            -9.839370231467007e-6,
            0.00001752900765325683,
            0.0000409798591671083,
            0.000029460364198610264,
            0.0001394264399339177,
            0.00016924322894617841,
            0.000014441980484406283
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000027524167212275963,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0001026916835973235
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0010470826266318338
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00011720575870335303
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.00002752416740631642
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00024589301603007
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4378.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3974,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003239167857536427,
          "hourly_max_abs_diff": 0.00016442476447053878,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00048470055958638766,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00016442476447053878,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003239167857536427
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 1.1248235831881446e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.7248012368794993e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007846642546077619
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3974.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4072,
          "annual_bias_pct": 2.037672370870819,
          "hourly_rmse": 125.67866327964506,
          "hourly_max_abs_diff": 358.18707973008895,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 16.924320937117635,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.0412219635010853,
            2.1337070616368377,
            2.230798514536243,
            2.0944414273201963,
            2.057527192992042,
            1.924115217023848,
            1.8653469640539666,
            1.8968401626906315,
            2.0160611838938047,
            2.11112821297795,
            2.0107223576580124,
            2.058919128941148
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.037672370870819,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 16.924320937117635,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 38.44366141339443
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 125.67866327964506
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 111.89683796782793
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.0286057791475844
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.278459939305291
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4072.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4103,
          "annual_bias_pct": 1.2391236494907243,
          "hourly_rmse": 100.45260978707203,
          "hourly_max_abs_diff": 576.8959999999988,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 65758.56266366123,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.1780366552971078,
            1.424345429214584,
            1.4987405975158705,
            1.161738671108536,
            1.1400635873981744,
            0.9647167032959502,
            0.9337903083889524,
            1.1495023713379295,
            1.3600113388962327,
            1.5764777518661497,
            1.1954202454923948,
            1.1715553609805458
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.2391236494907243,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.5764777518661497,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 23.02774577621345
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 100.45260978707203
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 63.830936434503535
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.2053410721102864
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.8968804648708957
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4103.0
            }
          ]
        }
      ]
    },
    {
      "id": "balikpapan_reverse_dcac110",
      "site_id": "balikpapan",
      "site_name": "Balikpapan",
      "latitude": -1.237,
      "longitude": 116.852,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/balikpapan_reverse_dcac110.csv",
      "fixture_sha256": "a590c8184f4ccd6284668d191b9f5242b92fca7a2cd68fcba859cee983127163",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "0143a08ed29352d2a3d1edf8fbf845a4145cae73b39fcbf2145d59991f2ebdee",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1870.4996863999977,
        "engine_poa_kwh_m2": 1870.4997476147175,
        "oracle_ac_kwh": 17883.336502099977,
        "engine_ac_kwh": 18126.832028456745,
        "ac_bias_pct": 1.361577725320861
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4396,
          "annual_bias_pct": null,
          "hourly_rmse": 2.908325719111663e-7,
          "hourly_max_abs_diff": 4.999059797228256e-7,
          "hourly_max_abs_diff_azimuth": 4.999843667974346e-7,
          "hourly_max_rel_diff_pct": 0.000032300446291655364,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.999059797228256e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999843667974346e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999865765853428e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.908325719111663e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": 7.500508815444269e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.54086305467463e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.974703532527946e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4396.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3978,
          "annual_bias_pct": 3.272639944506692e-6,
          "hourly_rmse": 0.000498430717033465,
          "hourly_max_abs_diff": 0.005805402956781336,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.002968372262131944,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.3238178941646185e-6,
            -0.0000277299326026887,
            -0.00003217254298732966,
            -0.000010021132307543472,
            1.6275488410843718e-6,
            -3.0088390320268376e-7,
            -9.510740044594028e-6,
            -0.000010605483631690428,
            0.000015237955628256486,
            0.00008721936877428276,
            9.774691803804626e-6,
            -3.338905940763728e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 3.272639944506692e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.005805402956781336,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.002968372262131944,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0000544287883604431
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.000498430717033465
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000017229522797401267
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.6725014481790803e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00010624133655044877
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3978.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4378,
          "annual_bias_pct": 3.2827312544560904e-6,
          "hourly_rmse": 0.0006206098898047633,
          "hourly_max_abs_diff": 0.011659938814780446,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.04115901180548949,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.5989017684892433e-6,
            -0.00002773336303219816,
            -0.00003288288626060389,
            -9.736479863890326e-6,
            1.0040050510344745e-6,
            -2.7777438413724877e-7,
            -9.799825790436571e-6,
            -0.00001069902332009405,
            0.000015377419096560223,
            0.00008845342707446305,
            0.000010024904759273595,
            -8.970759099942427e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 3.2827312544560904e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005447223669946068
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006206098898047633
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00001381413832346917
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 3.2827313331207767e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00014747901629488672
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4378.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3978,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003195262873993817,
          "hourly_max_abs_diff": 0.0001895668409659379,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0005371611084171034,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0001895668409659379,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003195262873993817
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -5.318179128168566e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.29233100221605e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007764569738579295
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3978.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4078,
          "annual_bias_pct": 2.0541569611626618,
          "hourly_rmse": 105.053508348192,
          "hourly_max_abs_diff": 317.955469686407,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.959364756909082,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.1043830485581903,
            2.189550445767795,
            2.2354708694374725,
            2.0563304961429285,
            2.0213476025515162,
            1.9407133002915085,
            1.886140860895114,
            1.8507849636989002,
            1.9859012521560173,
            2.168093613222962,
            2.037389379427351,
            2.08025936327823
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.0541569611626618,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.959364756909082,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 32.079982268765114
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 105.053508348192
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 92.76685471232432
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.0454259976078117
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.3163356975037543
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4078.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4102,
          "annual_bias_pct": 1.361577725320964,
          "hourly_rmse": 68.6831152592469,
          "hourly_max_abs_diff": 231.14202289895184,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 3198029.768728471,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4182828980955564,
            1.4831247372699576,
            1.511087228603851,
            1.3542271731685767,
            1.3934001500317912,
            1.4056658036952827,
            1.3106774928216574,
            1.1082739614295323,
            1.152106758745996,
            1.4175332815149015,
            1.4291653666015887,
            1.362148414087446
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.361577725320964,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.511087228603851,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 20.525682569576002
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 68.6831152592469
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 57.91708376517562
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.3284762470182938
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.575422677755615
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4102.0
            }
          ]
        }
      ]
    },
    {
      "id": "cikarang_equator_dcac110",
      "site_id": "cikarang",
      "site_name": "Cikarang",
      "latitude": -6.3106,
      "longitude": 107.1353,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/cikarang_equator_dcac110.csv",
      "fixture_sha256": "643a36cc366e034e7ca0c81eafa2e62e143912d303365965f485bb0909ef38d6",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "e233b66b92c558082b810e16762588a61a6a49301eb4591eb42cd685d19665f3",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1950.6083177000025,
        "engine_poa_kwh_m2": 1950.6080619800075,
        "oracle_ac_kwh": 18435.19099410004,
        "engine_ac_kwh": 18743.79295472506,
        "ac_bias_pct": 1.6739829857134843
      },
      "stages": [
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_solar_position_cikarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4367,
          "annual_bias_pct": null,
          "hourly_rmse": 2.907169575217903e-7,
          "hourly_max_abs_diff": 4.997610432155852e-7,
          "hourly_max_abs_diff_azimuth": 4.998187250748742e-7,
          "hourly_max_rel_diff_pct": 0.000042608984146910087,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997610432155852e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.998187250748742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999744476208434e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.907169575217903e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.076513222930552e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.362506491906948e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.963730059572102e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4367.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_cikarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": -0.000013109756213264396,
          "hourly_rmse": 0.00043597976968199855,
          "hourly_max_abs_diff": 0.0051565267517190705,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005321992830822162,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000038331238454754365,
            -0.00004460883619021539,
            -0.00006266531971322868,
            -0.000058865266456006795,
            -0.000011042274182463057,
            -9.784021764213763e-7,
            2.659914728939598e-7,
            0.000013810742834992614,
            0.000040064424347267396,
            0.00002071742244147392,
            -0.00003413230902475338,
            -0.000014481747773257656
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013109756213264396,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0051565267517190705,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005321992830822162,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000055477486674167516
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00043597976968199855
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 4.571910725286436e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 9.00622094332386e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008588378838761175
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_effective_irradiance_cikarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4347,
          "annual_bias_pct": -0.000013287789591014964,
          "hourly_rmse": 0.0007515897301663786,
          "hourly_max_abs_diff": 0.009847723901106775,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.03839074004478048,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.00003967577480254845,
            -0.00004483262014586125,
            -0.00006327335405976504,
            -0.000059377523993026206,
            -0.000011562749251372613,
            -8.656720909607419e-7,
            4.01175471326961e-8,
            0.000013917706144033354,
            0.00004081258040917631,
            0.00002176085250035985,
            -0.00003467649120967421,
            -0.000014561180939791558
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013287789591014964,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005550897725258587
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0007515897301663786
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.00005876260951423802
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -0.000013287789567261102
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00016995443629755035
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4347.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_chain_cikarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003173027945035524,
          "hourly_max_abs_diff": 0.0001749027964308425,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0006699511101737574,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0001749027964308425,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003173027945035524
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -9.456251050816962e-8
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -2.2085313142041887e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007410686898853534
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4249,
          "annual_bias_pct": 2.3125708769647733,
          "hourly_rmse": 125.10435596589812,
          "hourly_max_abs_diff": 416.5231902308042,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.626366391707318,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.0414448206411913,
            1.9907373165555124,
            2.2145542105921425,
            2.2099702412512214,
            2.2675177810365934,
            2.1926863313672267,
            2.2810813864481077,
            2.5513349289561846,
            2.8719046891088866,
            2.284907592509778,
            2.376104229391004,
            2.187985026430003
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.3125708769647733,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.626366391707318,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 37.626785432771435
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 125.10435596589812
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 103.74474189157083
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.310185399926809
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.7858207688417447
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4249.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4268,
          "annual_bias_pct": 1.673982985713806,
          "hourly_rmse": 86.38454423664615,
          "hourly_max_abs_diff": 329.86982662157243,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 2030.7932044050247,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.5654397824592845,
            1.5769951696391407,
            1.5541399617440246,
            1.5961497824724864,
            1.644997115123624,
            1.4678944028445304,
            1.4890321413842749,
            1.7770650365059844,
            2.1638273933035785,
            1.709998916185212,
            1.7793722985593345,
            1.6292381111593166
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.673982985713806,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.1638273933035785,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 26.29123068014436
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 86.38454423664615
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 72.14989549120018
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.6703692088408169
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.999920884573424
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4268.0
            }
          ]
        }
      ]
    },
    {
      "id": "cikarang_equator_dcac130",
      "site_id": "cikarang",
      "site_name": "Cikarang",
      "latitude": -6.3106,
      "longitude": 107.1353,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 48,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.3221,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/cikarang_equator_dcac130.csv",
      "fixture_sha256": "7cef47673e11903ed1a1d7caa2824dfe1939c158583c1fc43e658c1685b045bc",
      "hemisphere": "selatan",
      "pnom_kwp": 13.221119999999999,
      "weather_sha256": "e233b66b92c558082b810e16762588a61a6a49301eb4591eb42cd685d19665f3",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1950.6083177000025,
        "engine_poa_kwh_m2": 1950.6080619800075,
        "oracle_ac_kwh": 22092.138274800043,
        "engine_ac_kwh": 22453.681332821085,
        "ac_bias_pct": 1.6365236063792186
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4367,
          "annual_bias_pct": null,
          "hourly_rmse": 2.907169575217903e-7,
          "hourly_max_abs_diff": 4.997610432155852e-7,
          "hourly_max_abs_diff_azimuth": 4.998187250748742e-7,
          "hourly_max_rel_diff_pct": 0.000042608984146910087,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997610432155852e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.998187250748742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999744476208434e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.907169575217903e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.076513222930552e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.362506491906948e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.963730059572102e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4367.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": -0.000013109756213264396,
          "hourly_rmse": 0.00043597976968199855,
          "hourly_max_abs_diff": 0.0051565267517190705,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005321992830822162,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000038331238454754365,
            -0.00004460883619021539,
            -0.00006266531971322868,
            -0.000058865266456006795,
            -0.000011042274182463057,
            -9.784021764213763e-7,
            2.659914728939598e-7,
            0.000013810742834992614,
            0.000040064424347267396,
            0.00002071742244147392,
            -0.00003413230902475338,
            -0.000014481747773257656
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013109756213264396,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0051565267517190705,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005321992830822162,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000055477486674167516
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00043597976968199855
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 4.571910725286436e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 9.00622094332386e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008588378838761175
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4347,
          "annual_bias_pct": -0.000013287789591014964,
          "hourly_rmse": 0.0007515897301663786,
          "hourly_max_abs_diff": 0.009847723901106775,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.03839074004478048,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.00003967577480254845,
            -0.00004483262014586125,
            -0.00006327335405976504,
            -0.000059377523993026206,
            -0.000011562749251372613,
            -8.656720909607419e-7,
            4.01175471326961e-8,
            0.000013917706144033354,
            0.00004081258040917631,
            0.00002176085250035985,
            -0.00003467649120967421,
            -0.000014561180939791558
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013287789591014964,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005550897725258587
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0007515897301663786
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.00005876260951423802
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -0.000013287789567261102
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00016995443629755035
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4347.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003173027945035524,
          "hourly_max_abs_diff": 0.0001749027964308425,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0006699511101737574,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0001749027964308425,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003173027945035524
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -9.456251050816962e-8
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -2.2085313142041887e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007410686898853534
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4249,
          "annual_bias_pct": 2.312570887865649,
          "hourly_rmse": 150.12522745217632,
          "hourly_max_abs_diff": 499.8278082769648,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.626330886416298,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.0414448366545397,
            1.9907374165766423,
            2.2145542401458234,
            2.2099701876480387,
            2.267517748295545,
            2.1926863809183255,
            2.281081474095277,
            2.55133501239031,
            2.8719047214021387,
            2.2849074985223123,
            2.3761041935014338,
            2.1879849691825717
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.312570887865649,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.626330886416298,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 45.152142769369384
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 150.12522745217632
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 124.49369080177506
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.3101854100249173
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.7858207745556283
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4249.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4269,
          "annual_bias_pct": 1.6365236063793758,
          "hourly_rmse": 130.10061211017356,
          "hourly_max_abs_diff": 576.8959999999988,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 757.8321790834855,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.2730710035232609,
            1.3017960332199054,
            1.5684144841420364,
            1.4735946278857317,
            1.4435349695516846,
            1.366044236323851,
            1.585011039922177,
            1.9046008468655211,
            2.6880653705481405,
            1.62841629122464,
            1.6283612834522485,
            1.3937315958175285
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.6365236063793758,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.6880653705481405,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 31.855799572187596
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 130.10061211017356
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 84.52494359185421
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.6333275652417198
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.5140142895622803
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4269.0
            }
          ]
        }
      ]
    },
    {
      "id": "cikarang_reverse_dcac110",
      "site_id": "cikarang",
      "site_name": "Cikarang",
      "latitude": -6.3106,
      "longitude": 107.1353,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/cikarang_reverse_dcac110.csv",
      "fixture_sha256": "0e3f97d4eb10737546b1cda0df6c7c46dc5cbac529325ff4e38ccc2c669bbdc6",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "e233b66b92c558082b810e16762588a61a6a49301eb4591eb42cd685d19665f3",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1863.4455491000028,
        "engine_poa_kwh_m2": 1863.445368756023,
        "oracle_ac_kwh": 17608.170525499943,
        "engine_ac_kwh": 17896.00727629887,
        "ac_bias_pct": 1.6346772106851537
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4367,
          "annual_bias_pct": null,
          "hourly_rmse": 2.907169575217903e-7,
          "hourly_max_abs_diff": 4.997610432155852e-7,
          "hourly_max_abs_diff_azimuth": 4.998187250748742e-7,
          "hourly_max_rel_diff_pct": 0.000042608984146910087,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997610432155852e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.998187250748742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998183555926516e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.907169575217903e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.076513222930552e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.362506491906948e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.963730059572102e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4367.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3822,
          "annual_bias_pct": -9.677984946965134e-6,
          "hourly_rmse": 0.0006456290450481936,
          "hourly_max_abs_diff": 0.008524135647206776,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005200563605614553,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -1.464262047435987e-6,
            -0.000013026939416107868,
            -0.00007332863853156546,
            -0.00016145229452508574,
            -0.00013108184803616835,
            -9.340394070264666e-6,
            -2.933930681711994e-7,
            0.000034823115626069356,
            0.00005948877252697883,
            0.000025261561616710925,
            0.00006885926302447201,
            0.00003224525810482696
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -9.677984946965134e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.008524135647206776,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005200563605614553,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00010745575082837
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006456290450481936
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00007062144786547629
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000014580666257354326
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001332980548605268
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3822.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4347,
          "annual_bias_pct": -0.000010007847950901655,
          "hourly_rmse": 0.0012339801047968194,
          "hourly_max_abs_diff": 0.012879384432498142,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.047167211480704255,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -1.9942915184782632e-6,
            -0.000013997477447238788,
            -0.00007412219520528979,
            -0.00016521679768588958,
            -0.0001347174398585026,
            -9.314566271699746e-6,
            4.2496978241097205e-7,
            0.00003646940049403298,
            0.000060054229493002514,
            0.00002577067718485182,
            0.00006964724106045948,
            0.000032252753605575007
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000010007847950901655,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00010761494700553951
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0012339801047968194
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000042112240179582975
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -0.000010007847966988631
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00029325168241898933
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4347.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3822,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003513870088812122,
          "hourly_max_abs_diff": 0.0002958570290658713,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0010810563994602018,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0002958570290658713,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003513870088812122
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 2.298383061327558e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 5.457936608511134e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008344335858532806
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3822.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4238,
          "annual_bias_pct": 2.251089495595133,
          "hourly_rmse": 114.80173249115798,
          "hourly_max_abs_diff": 389.3715085742733,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.922757681299167,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.0660552879788363,
            1.9757585958536197,
            2.1733774176850305,
            2.1079577800984897,
            2.1463413061651635,
            2.0781160466699276,
            2.121276346867758,
            2.372701506149074,
            2.7477537120777114,
            2.280075508001371,
            2.442005902995299,
            2.268920935560348
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.251089495595133,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.922757681299167,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 34.87339382496911
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 114.80173249115798
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 96.67182101151626
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.247619825909364
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.6691402654464462
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4238.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4267,
          "annual_bias_pct": 1.6346772106848668,
          "hourly_rmse": 79.60058724236131,
          "hourly_max_abs_diff": 302.5937042313017,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 5770.442583533123,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.477989588490331,
            1.5049413823954594,
            1.516267733124514,
            1.5715574139000075,
            1.672967914936661,
            1.5252258588986563,
            1.4576399959475153,
            1.6641373049796004,
            2.050175105538657,
            1.6748294035463862,
            1.7645329844131585,
            1.5942581807225271
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.6346772106848668,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.050175105538657,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 24.457640169420124
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 79.60058724236131
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 67.28292453123952
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.6304717094773113
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.9289664719640827
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4267.0
            }
          ]
        }
      ]
    },
    {
      "id": "cikarang_temperature_faiman",
      "site_id": "cikarang",
      "site_name": "Cikarang",
      "latitude": -6.3106,
      "longitude": 107.1353,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "faiman",
      "fixture": "tools/oracle/fixtures/stages/cikarang_temperature_faiman.csv",
      "fixture_sha256": "93530ccc09542d01d3aa2e063deb9f606dbaabc5ce8be4fae63503d1c9d4c23a",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "e233b66b92c558082b810e16762588a61a6a49301eb4591eb42cd685d19665f3",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "faiman",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1950.6083177000025,
        "engine_poa_kwh_m2": 1950.6080619800075,
        "oracle_ac_kwh": 18401.21296879999,
        "engine_ac_kwh": 18717.486254876552,
        "ac_bias_pct": 1.718763250079303
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4367,
          "annual_bias_pct": null,
          "hourly_rmse": 2.907169575217903e-7,
          "hourly_max_abs_diff": 4.997610432155852e-7,
          "hourly_max_abs_diff_azimuth": 4.998187250748742e-7,
          "hourly_max_rel_diff_pct": 0.000042608984146910087,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997610432155852e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.998187250748742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999744476208434e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.907169575217903e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.076513222930552e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.362506491906948e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.963730059572102e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4367.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": -0.000013109756213264396,
          "hourly_rmse": 0.00043597976968199855,
          "hourly_max_abs_diff": 0.0051565267517190705,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005321992830822162,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000038331238454754365,
            -0.00004460883619021539,
            -0.00006266531971322868,
            -0.000058865266456006795,
            -0.000011042274182463057,
            -9.784021764213763e-7,
            2.659914728939598e-7,
            0.000013810742834992614,
            0.000040064424347267396,
            0.00002071742244147392,
            -0.00003413230902475338,
            -0.000014481747773257656
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013109756213264396,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0051565267517190705,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005321992830822162,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000055477486674167516
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00043597976968199855
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 4.571910725286436e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 9.00622094332386e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008588378838761175
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4347,
          "annual_bias_pct": -0.000013287789591014964,
          "hourly_rmse": 0.0007515897301663786,
          "hourly_max_abs_diff": 0.009847723901106775,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.03839074004478048,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.00003967577480254845,
            -0.00004483262014586125,
            -0.00006327335405976504,
            -0.000059377523993026206,
            -0.000011562749251372613,
            -8.656720909607419e-7,
            4.01175471326961e-8,
            0.000013917706144033354,
            0.00004081258040917631,
            0.00002176085250035985,
            -0.00003467649120967421,
            -0.000014561180939791558
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013287789591014964,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005550897725258587
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0007515897301663786
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.00005876260951423802
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -0.000013287789567261102
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00016995443629755035
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4347.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003126095928371048,
          "hourly_max_abs_diff": 0.0001622132584202518,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0006329507783263364,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0001622132584202518,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003126095928371048
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -5.933857918467496e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.3770299156949284e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007254517502520181
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4249,
          "annual_bias_pct": 2.356131376761173,
          "hourly_rmse": 128.72869865498262,
          "hourly_max_abs_diff": 461.48743145337176,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.64889885115247,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            1.958826610298033,
            1.890045623524245,
            2.1972198054946674,
            2.234945362510473,
            2.3499524513197922,
            2.2303797556523652,
            2.3602822756045216,
            2.643402716540638,
            2.9438662822468196,
            2.434309353964722,
            2.4645400135634583,
            2.218113354091731
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.356131376761173,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.64889885115247,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 38.38314778314495
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 128.72869865498262
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 105.50765037050199
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.3537460171172393
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.8717790670520174
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4249.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4268,
          "annual_bias_pct": 1.718763250079342,
          "hourly_rmse": 90.18344335405921,
          "hourly_max_abs_diff": 374.4975781952362,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 2041.875655937207,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4774013505490644,
            1.4691181144493985,
            1.5362935047525446,
            1.6220004922635982,
            1.7305386400215923,
            1.507269232545737,
            1.5698969083736352,
            1.8713571274449863,
            2.237512834050597,
            1.8646061987867106,
            1.8717995580497402,
            1.6608609287541511
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.718763250079342,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.237512834050597,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 27.060683565691335
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 90.18344335405921
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 73.94730281900624
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.7151428493689158
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.091725892677528
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4268.0
            }
          ]
        }
      ]
    },
    {
      "id": "cikarang_transposition_haydavies",
      "site_id": "cikarang",
      "site_name": "Cikarang",
      "latitude": -6.3106,
      "longitude": 107.1353,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "haydavies",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/cikarang_transposition_haydavies.csv",
      "fixture_sha256": "616d01cab859d54167a0943ef6572015b82eb6dbac7a3ccfacf014d1c57b8f4e",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "e233b66b92c558082b810e16762588a61a6a49301eb4591eb42cd685d19665f3",
      "models": {
        "transposition_reference": "haydavies",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1938.8809661000012,
        "engine_poa_kwh_m2": 1938.8812152446135,
        "oracle_ac_kwh": 18331.4787522,
        "engine_ac_kwh": 18637.360622129352,
        "ac_bias_pct": 1.6686153586635337
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4367,
          "annual_bias_pct": null,
          "hourly_rmse": 2.907169575217903e-7,
          "hourly_max_abs_diff": 4.997610432155852e-7,
          "hourly_max_abs_diff_azimuth": 4.998187250748742e-7,
          "hourly_max_rel_diff_pct": 0.000042608984146910087,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997610432155852e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.998187250748742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999744476208434e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.907169575217903e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.076513222930552e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.362506491906948e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.963730059572102e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4367.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_cikarang_haydavies",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3805,
          "annual_bias_pct": 0.000012849917901200047,
          "hourly_rmse": 0.000679547119775308,
          "hourly_max_abs_diff": 0.008949852673822534,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.009268150940201614,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000013711653904015057,
            3.161003334988134e-7,
            -3.834520919822842e-7,
            -2.6147401646642296e-7,
            1.6476533468110915e-7,
            1.7798688929831848e-7,
            -2.6763649965124963e-7,
            3.5623388605029154e-7,
            -0.000021690594146747064,
            0.000043288827162673665,
            0.00008957462466123399,
            0.00006902405867472341
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000012849917901200047,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.008949852673822534,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.009268150940201614,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0000556150069625617
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.000679547119775308
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00006852653719826016
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000013551714552122165
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00013438631176223445
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3805.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4347,
          "annual_bias_pct": 0.000012860750298115125,
          "hourly_rmse": 0.0006504161105605906,
          "hourly_max_abs_diff": 0.008896917949755334,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.09261509091418155,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000013752282056425633,
            3.0136585688627536e-7,
            1.9740978186933816e-8,
            -5.732334984072013e-7,
            -7.692610425191917e-7,
            -5.814547437404402e-7,
            5.942716286823648e-8,
            2.127412089979168e-7,
            -0.00002237514592500648,
            0.000043941032457159205,
            0.00009066477920910208,
            0.00007032495261139229
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000012860750298115125,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005547395242406973
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006504161105605906
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.000056527154614116265
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000012860750089909461
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001479791280752307
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4347.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3805,
          "annual_bias_pct": null,
          "hourly_rmse": 0.000035158434484782446,
          "hourly_max_abs_diff": 0.0002618923176882504,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0010273348828994148,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0002618923176882504,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.000035158434484782446
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 2.2025851706598498e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 5.150304520480071e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008221096122504565
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3805.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4248,
          "annual_bias_pct": 2.3048757746846347,
          "hourly_rmse": 123.82803778873014,
          "hourly_max_abs_diff": 414.9145554440456,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.34003032424235,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.03636038097343,
            1.9908621362818373,
            2.2094421338738064,
            2.202631871637235,
            2.2563284403653605,
            2.1850752256907704,
            2.2698776520197477,
            2.5387375324165804,
            2.8615902299235243,
            2.278105659503694,
            2.373233684408641,
            2.181691824862147
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.3048757746846347,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.34003032424235,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 37.27952478118271
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 123.82803778873014
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 102.8423817177292
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.3024567701611987
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.7722880312610267
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4248.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4266,
          "annual_bias_pct": 1.6686153586637338,
          "hourly_rmse": 85.54331289665464,
          "hourly_max_abs_diff": 328.24686522628144,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 1927.8647878530094,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.5572129473419136,
            1.5738095444534659,
            1.5497153610892478,
            1.5914135605372415,
            1.638442294041282,
            1.4654652780239492,
            1.480186881252408,
            1.765702206482338,
            2.1533978391536586,
            1.7057545438884207,
            1.7810226987533377,
            1.6304306723116926
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.6686153586637338,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.1533978391536586,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 26.051247277412003
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 85.54331289665464
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 71.51637070303316
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.6642892891689118
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.9907165032899101
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4266.0
            }
          ]
        }
      ]
    },
    {
      "id": "cikarang_transposition_isotropic",
      "site_id": "cikarang",
      "site_name": "Cikarang",
      "latitude": -6.3106,
      "longitude": 107.1353,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "isotropic",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/cikarang_transposition_isotropic.csv",
      "fixture_sha256": "d31fdf7847e045b48a0d31382da73ec979a77d88be8ecc41bb8130bf6672972a",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "e233b66b92c558082b810e16762588a61a6a49301eb4591eb42cd685d19665f3",
      "models": {
        "transposition_reference": "isotropic",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1935.9730565999964,
        "engine_poa_kwh_m2": 1935.9730548934285,
        "oracle_ac_kwh": 18308.295825299992,
        "engine_ac_kwh": 18612.97886370678,
        "ac_bias_pct": 1.6641802236216308
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4367,
          "annual_bias_pct": null,
          "hourly_rmse": 2.907169575217903e-7,
          "hourly_max_abs_diff": 4.997610432155852e-7,
          "hourly_max_abs_diff_azimuth": 4.998187250748742e-7,
          "hourly_max_rel_diff_pct": 0.000042608984146910087,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997610432155852e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.998187250748742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999744476208434e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.907169575217903e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.076513222930552e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.362506491906948e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.963730059572102e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4367.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_cikarang_isotropic",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": -8.815040337272446e-8,
          "hourly_rmse": 0.000028927601239598272,
          "hourly_max_abs_diff": 0.00004992231936284952,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00008727258637948453,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -2.562942227688783e-7,
            -2.0868875316847477e-7,
            -2.829185660561663e-7,
            -6.652060704672678e-7,
            3.462731924615041e-7,
            -1.7455336209971301e-7,
            -5.85623918559828e-8,
            2.847383306766015e-7,
            -3.6240673927900816e-7,
            -1.7416442433374705e-7,
            9.828032402555309e-8,
            3.365212834769954e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -8.815040337272446e-8,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.00004992231936284952,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.00008727258637948453,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 5.098445263117898e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.000028927601239598272
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -5.063450622223527e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.0053626619879685e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.74365829885348e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4347,
          "annual_bias_pct": 3.792729368916306e-9,
          "hourly_rmse": 0.00002905552112889387,
          "hourly_max_abs_diff": 0.00004999607165245834,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.03047357943441472,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            6.917239786005862e-7,
            3.0653043598027475e-7,
            5.56908635378093e-7,
            -3.474907000696109e-7,
            1.2488915109021364e-8,
            -6.268487250902944e-7,
            5.604547313479403e-7,
            -4.993932955019113e-7,
            -3.335814281788127e-7,
            7.381195052465298e-8,
            3.718797528328608e-8,
            -1.2134104738338624e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 3.792729368916306e-9,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 6.711498954627254e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00002905552112889387
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 1.6645466167364222e-8
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 3.7928582798898546e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.620630073209314e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4347.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_cikarang_isotropic_chain",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3815,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00002879025375927609,
          "hourly_max_abs_diff": 0.0000499983063591003,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00019675492333418024,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0000499983063591003,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00002879025375927609
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 1.2123786888401138e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.8401860835164817e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00006744565771461499
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3815.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4250,
          "annual_bias_pct": 2.3013686461847715,
          "hourly_rmse": 123.20478007877105,
          "hourly_max_abs_diff": 414.08238895153045,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.296112302068,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.0411843521270003,
            1.98894308771487,
            2.208113619271112,
            2.1977502791688233,
            2.2490159526122357,
            2.177677579455831,
            2.2613485535124553,
            2.529819273257227,
            2.85767807270453,
            2.2780044941202697,
            2.3751760735998677,
            2.1862037934404905
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.3013686461847715,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.296112302068,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 37.14415430521489
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 123.20478007877105
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 102.51153656845403
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.2990473356765184
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.763138968203466
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4250.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4268,
          "annual_bias_pct": 1.664180223621602,
          "hourly_rmse": 85.05621512448153,
          "hourly_max_abs_diff": 327.4073293934707,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 1906.987785616143,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.5481253381171705,
            1.566882846845148,
            1.5482467808564973,
            1.590030019376467,
            1.637817570153403,
            1.4654276669460498,
            1.4775088378003114,
            1.759825077812309,
            2.151127481852065,
            1.7015045377245754,
            1.7720956629737605,
            1.6161598703951743
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.664180223621602,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.151127481852065,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 25.941588391619252
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 85.05621512448153
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 71.2295944093121
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.660492663215762
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.9828165855264077
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4268.0
            }
          ]
        }
      ]
    },
    {
      "id": "makassar_equator_dcac110",
      "site_id": "makassar",
      "site_name": "Makassar",
      "latitude": -5.092,
      "longitude": 119.495,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/makassar_equator_dcac110.csv",
      "fixture_sha256": "83899f15618478723a9107964086d7dd57c684d952d15f7c9eebe6369006b30b",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "5797023f63b1dae91cf7d0dd3515185264c7e0fb6411402c94b1e592051a0af9",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1890.9277849999976,
        "engine_poa_kwh_m2": 1890.9279791129904,
        "oracle_ac_kwh": 18029.168781700006,
        "engine_ac_kwh": 18279.909500106078,
        "ac_bias_pct": 1.3907502971550154
      },
      "stages": [
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_solar_position_makassar",
            "reason": null,
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4304,
          "annual_bias_pct": null,
          "hourly_rmse": 2.9014025990833496e-7,
          "hourly_max_abs_diff": 4.997419580377027e-7,
          "hourly_max_abs_diff_azimuth": 4.9954400083152e-7,
          "hourly_max_rel_diff_pct": 0.000018324812670833534,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997419580377027e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.9954400083152e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998895661856295e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.9014025990833496e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.183349808239194e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.7060208605885e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.038144719056459e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4304.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_makassar",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3922,
          "annual_bias_pct": 0.000010265489480100685,
          "hourly_rmse": 0.0006540164843049784,
          "hourly_max_abs_diff": 0.006836905352969325,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0064892441002959685,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -5.595432877604643e-6,
            -9.645656555335953e-6,
            -0.000020975862257458554,
            -0.000034674076517035126,
            -0.000057592913248451424,
            -0.00003076158472163189,
            0.00001834829599270008,
            0.000044899591697148544,
            0.00007654823893231519,
            0.000057986100798805565,
            6.212728223703872e-6,
            0.00002851931745763948
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000010265489480100685,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.006836905352969325,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.0064892441002959685,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000070044444667771
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006540164843049784
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.0000222094967942191
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.6251057282430455e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00013619828562309806
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3922.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_effective_irradiance_makassar",
            "reason": null,
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4253,
          "annual_bias_pct": 0.00001064161396582944,
          "hourly_rmse": 0.0007172928144307263,
          "hourly_max_abs_diff": 0.0077096443953976745,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0249757662192775,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -6.082678710322845e-6,
            -8.816698780931041e-6,
            -0.000021865294101557586,
            -0.00003404449046623336,
            -0.00005760726666592328,
            -0.00003148653621395316,
            0.000019295890236298023,
            0.00004532392138676305,
            0.00007804780961196253,
            0.00005937669221961127,
            6.027803974836908e-6,
            0.000029791710977853526
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.00001064161396582944,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0000699316229167451
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0007172928144307263
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00004650472450685105
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000010641614065982958
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001641371577709273
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4253.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_chain_makassar",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3922,
          "annual_bias_pct": null,
          "hourly_rmse": 0.000034624962722742915,
          "hourly_max_abs_diff": 0.00019362583289961321,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0007417278608818075,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00019362583289961321,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.000034624962722742915
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 1.0743742511066437e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.639567315521805e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008506804757278301
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3922.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4131,
          "annual_bias_pct": 2.0675921175394576,
          "hourly_rmse": 109.62336205712928,
          "hourly_max_abs_diff": 358.9226521347755,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.23400098065852,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.01961263051189,
            1.9308547014362183,
            1.900080241669341,
            1.9910051520739116,
            2.0624366151415523,
            2.0320130254225477,
            2.0931133984736863,
            2.2812864228981264,
            2.2829588502402545,
            2.0783004785715495,
            2.033009543157682,
            1.9121660253354025
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.0675921175394576,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.23400098065852,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 32.951800126340615
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 109.62336205712928
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 93.23026999884748
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.064655323027755
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.427692829831435
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4131.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4133,
          "annual_bias_pct": 1.3907502971547148,
          "hourly_rmse": 73.47380702673384,
          "hourly_max_abs_diff": 272.0926860493837,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 305.6610789693935,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.842274841781437,
            1.422913930555561,
            1.1919090345068941,
            1.3358167382902357,
            1.3210495069096393,
            1.3340187816870928,
            1.233816865479046,
            1.4256697314673719,
            1.5103776271023854,
            1.3512436069295113,
            1.319638019999863,
            1.5671872255330357
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.3907502971547148,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.842274841781437,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 21.17782426635494
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 73.47380702673384
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 60.08242771175196
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.3773273562379742
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.6843108416052979
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4133.0
            }
          ]
        }
      ]
    },
    {
      "id": "makassar_equator_dcac130",
      "site_id": "makassar",
      "site_name": "Makassar",
      "latitude": -5.092,
      "longitude": 119.495,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 48,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.3221,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/makassar_equator_dcac130.csv",
      "fixture_sha256": "a1e01d7e5a6c97475d3f5c6d5ce1aa57419923ef03777c5c79830e9ceeab0ebf",
      "hemisphere": "selatan",
      "pnom_kwp": 13.221119999999999,
      "weather_sha256": "5797023f63b1dae91cf7d0dd3515185264c7e0fb6411402c94b1e592051a0af9",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1890.9277849999976,
        "engine_poa_kwh_m2": 1890.9279791129904,
        "oracle_ac_kwh": 21593.902874400083,
        "engine_ac_kwh": 21895.164298022664,
        "ac_bias_pct": 1.3951226203750877
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4304,
          "annual_bias_pct": null,
          "hourly_rmse": 2.9014025990833496e-7,
          "hourly_max_abs_diff": 4.997419580377027e-7,
          "hourly_max_abs_diff_azimuth": 4.9954400083152e-7,
          "hourly_max_rel_diff_pct": 0.000018324812670833534,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997419580377027e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.9954400083152e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998895661856295e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.9014025990833496e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.183349808239194e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.7060208605885e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.038144719056459e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4304.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3922,
          "annual_bias_pct": 0.000010265489480100685,
          "hourly_rmse": 0.0006540164843049784,
          "hourly_max_abs_diff": 0.006836905352969325,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0064892441002959685,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -5.595432877604643e-6,
            -9.645656555335953e-6,
            -0.000020975862257458554,
            -0.000034674076517035126,
            -0.000057592913248451424,
            -0.00003076158472163189,
            0.00001834829599270008,
            0.000044899591697148544,
            0.00007654823893231519,
            0.000057986100798805565,
            6.212728223703872e-6,
            0.00002851931745763948
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000010265489480100685,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.006836905352969325,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.0064892441002959685,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000070044444667771
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006540164843049784
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.0000222094967942191
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.6251057282430455e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00013619828562309806
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3922.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4253,
          "annual_bias_pct": 0.00001064161396582944,
          "hourly_rmse": 0.0007172928144307263,
          "hourly_max_abs_diff": 0.0077096443953976745,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0249757662192775,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -6.082678710322845e-6,
            -8.816698780931041e-6,
            -0.000021865294101557586,
            -0.00003404449046623336,
            -0.00005760726666592328,
            -0.00003148653621395316,
            0.000019295890236298023,
            0.00004532392138676305,
            0.00007804780961196253,
            0.00005937669221961127,
            6.027803974836908e-6,
            0.000029791710977853526
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.00001064161396582944,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0000699316229167451
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0007172928144307263
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00004650472450685105
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000010641614065982958
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001641371577709273
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4253.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3922,
          "annual_bias_pct": null,
          "hourly_rmse": 0.000034624962722742915,
          "hourly_max_abs_diff": 0.00019362583289961321,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0007417278608818075,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00019362583289961321,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.000034624962722742915
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 1.0743742511066437e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.639567315521805e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008506804757278301
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3922.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4131,
          "annual_bias_pct": 2.0675921200924936,
          "hourly_rmse": 131.54803455592332,
          "hourly_max_abs_diff": 430.7071825617313,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.234036282056472,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.01961265366685,
            1.9308546819211712,
            1.9000803944255813,
            1.9910052136058083,
            2.062436647980986,
            2.0320129222200483,
            2.0931133456767874,
            2.2812864679537443,
            2.282958833448891,
            2.0783004493120107,
            2.0330095237579204,
            1.912165984286206
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.0675921200924936,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.234036282056472,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 39.54216018119198
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 131.54803455592332
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 111.87632410028658
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.0646553249427817
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.427692831489343
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4131.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4134,
          "annual_bias_pct": 1.3951226203753133,
          "hourly_rmse": 124.07347582122514,
          "hourly_max_abs_diff": 576.8959999999988,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 1078.1020639228411,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4605578505628156,
            1.2805912818836747,
            1.047082140529988,
            1.2133373135885048,
            1.0905473278313884,
            1.0815539540706065,
            1.2495626610674906,
            1.7297139989049137,
            2.2992904041308524,
            1.5025167202068141,
            1.232407200072059,
            1.2125955337766
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.3951226203753133,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.2992904041308524,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 26.97374098524164
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 124.07347582122514
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 72.19315958157785
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.3820869874526294
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.3752989537292923
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4134.0
            }
          ]
        }
      ]
    },
    {
      "id": "makassar_reverse_dcac110",
      "site_id": "makassar",
      "site_name": "Makassar",
      "latitude": -5.092,
      "longitude": 119.495,
      "timezone": "Asia/Makassar",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/makassar_reverse_dcac110.csv",
      "fixture_sha256": "f271c4d761ec8bed5461c5bf84e7464bd01b61bdb5ec28778cc64f5831391e4f",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "5797023f63b1dae91cf7d0dd3515185264c7e0fb6411402c94b1e592051a0af9",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1818.4399421999974,
        "engine_poa_kwh_m2": 1818.440346003095,
        "oracle_ac_kwh": 17314.121354099978,
        "engine_ac_kwh": 17553.41131120909,
        "ac_bias_pct": 1.3820508255387003
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4304,
          "annual_bias_pct": null,
          "hourly_rmse": 2.9014025990833496e-7,
          "hourly_max_abs_diff": 4.997419580377027e-7,
          "hourly_max_abs_diff_azimuth": 4.9954400083152e-7,
          "hourly_max_rel_diff_pct": 0.000018324812670833534,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.997419580377027e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.9954400083152e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999450808895745e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.9014025990833496e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -4.183349808239194e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.7060208605885e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.038144719056459e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4304.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3925,
          "annual_bias_pct": 0.000022206017829443668,
          "hourly_rmse": 0.0006156503792118672,
          "hourly_max_abs_diff": 0.0068316853835881375,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005420832430947568,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -2.0133806709314034e-6,
            -0.000017805625785741358,
            -0.000019813101967328242,
            -6.1003125935809055e-6,
            0.000021945999606722257,
            0.000018092914078239535,
            -0.000011443903493523862,
            -0.0000153911999752556,
            0.00006426938250674055,
            0.00008802468496890433,
            0.00008062121690932447,
            8.864125658721642e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000022206017829443668,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0068316853835881375,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005420832430947568,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00007760649874559105
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006156503792118672
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00007932699032373275
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000017191492615468357
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001334217887851046
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3925.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4253,
          "annual_bias_pct": 0.00002263605348807877,
          "hourly_rmse": 0.0006914710969842387,
          "hourly_max_abs_diff": 0.009365983207828776,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.03631832090888242,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -2.8686763686497916e-6,
            -0.00001790272260312781,
            -0.000019134497447773217,
            -7.134906687454373e-6,
            0.00002327573521456016,
            0.000018117159210184474,
            -0.000011763431676377257,
            -0.000015950396335797496,
            0.00006599219245416354,
            0.00008970403188121644,
            0.00008264931358512143,
            8.58675241637171e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.00002263605348807877,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00007755598544512677
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006914710969842387
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00009472718804444223
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000022636052715841103
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00016523425350145856
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4253.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3925,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003363178319654973,
          "hourly_max_abs_diff": 0.0001984101146952355,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0006861792921896979,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0001984101146952355,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003363178319654973
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 1.9985733025934784e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.978117800351183e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008377124740485482
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3925.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4129,
          "annual_bias_pct": 2.03259961970243,
          "hourly_rmse": 101.6773948844695,
          "hourly_max_abs_diff": 344.6085575803354,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 17.075412233020653,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            1.9970331716894558,
            1.9493508003346678,
            1.8750069073922035,
            1.956979519006742,
            2.0267677514041593,
            2.0421006269932285,
            1.9727706529322444,
            2.1375278087467593,
            2.201847163308995,
            2.097518765456324,
            2.115967226515063,
            1.893631474950417
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.03259961970243,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 17.075412233020653,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 31.01215699143779
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 101.6773948844695
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 88.05449059473095
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.0291255385735285
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.343051413530614
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4129.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4133,
          "annual_bias_pct": 1.3820508255389652,
          "hourly_rmse": 68.9653135787063,
          "hourly_max_abs_diff": 257.8499432771223,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 477.2919386405246,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.7049774185953461,
            1.4002215979375867,
            1.1691574576502117,
            1.3742253975935077,
            1.4440753965752178,
            1.5718998640217714,
            1.2495345096768558,
            1.3413797502011886,
            1.439461687962938,
            1.3310501619272457,
            1.3075397515888803,
            1.3956474255324247
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.3820508255389652,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.7049774185953461,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 20.16238977687381
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 68.9653135787063
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 57.2349848149022
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.3662385020997634
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.6462495277203153
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4133.0
            }
          ]
        }
      ]
    },
    {
      "id": "medan_equator_dcac110",
      "site_id": "medan",
      "site_name": "Medan",
      "latitude": 3.652,
      "longitude": 98.685,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/medan_equator_dcac110.csv",
      "fixture_sha256": "917efc6288bf487d61d963ab20209fce2e0bc518ff019a5747f4a8330ec927cc",
      "hemisphere": "utara",
      "pnom_kwp": 11.0176,
      "weather_sha256": "1c2d4d6c657a58dff0f747ae30d36e04ff91895459a1967f95bddb0c7e1d99d3",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1740.0032769999943,
        "engine_poa_kwh_m2": 1740.0032754099739,
        "oracle_ac_kwh": 16659.231385700055,
        "engine_ac_kwh": 16912.040037268132,
        "ac_bias_pct": 1.5175289046353173
      },
      "stages": [
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_solar_position_medan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": null,
          "hourly_rmse": 2.839258545625466e-7,
          "hourly_max_abs_diff": 4.995748206226835e-7,
          "hourly_max_abs_diff_azimuth": 4.999547513762082e-7,
          "hourly_max_rel_diff_pct": 8.793050402711913e-6,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.995748206226835e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999547513762082e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.997559557295972e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.839258545625466e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -7.435242530642529e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.5332441714076994e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.85492214713748e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_medan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3956,
          "annual_bias_pct": -9.138031577095903e-8,
          "hourly_rmse": 0.00002857261324899563,
          "hourly_max_abs_diff": 0.0000499994488336597,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00009106279128772,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            2.867687992750343e-8,
            3.6268175247311276e-7,
            1.7437070523306864e-7,
            -2.5837190060645326e-7,
            -5.199676204095656e-7,
            1.1310086085846201e-7,
            -7.504299247545022e-7,
            -2.7286241690584954e-7,
            -5.450634539052956e-8,
            -1.8448237604301968e-7,
            -1.4487546827450777e-7,
            3.9401309247705606e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -9.138031577095903e-8,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0000499994488336597,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.00009106279128772,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 4.834410986488366e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00002857261324899563
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -3.9385120485438696e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.97980836808886e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.514556471811683e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3956.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_effective_irradiance_medan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": -3.346782735873919e-8,
          "hourly_rmse": 0.00002886308095839502,
          "hourly_max_abs_diff": 0.000049996816869679606,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.010940815147602041,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.647056100460029e-7,
            -1.077290917122657e-7,
            3.8214465192101025e-7,
            -5.615931491207196e-7,
            -2.906339184144615e-7,
            -7.72310676019654e-8,
            -5.43914247031433e-7,
            6.397944513313859e-8,
            1.5463725288406523e-7,
            3.603867727436845e-7,
            1.296875636313538e-7,
            5.855744179364796e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -3.346782735873919e-8,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 5.069952858686779e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00002886308095839502
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -1.3110690236092563e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.346792747155593e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 7.3679377876073524e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_chain_medan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3956,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00002851514454272978,
          "hourly_max_abs_diff": 0.000049996756558812194,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00019868518006835222,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.000049996756558812194,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00002851514454272978
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -5.237960805055255e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.3133513196878612e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007149805832861555
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3956.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4073,
          "annual_bias_pct": 2.102359978031884,
          "hourly_rmse": 100.67282193033861,
          "hourly_max_abs_diff": 339.36572953112955,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.248174873033875,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.1130083786936313,
            2.081224524550813,
            2.1127018718324697,
            2.1370750467374853,
            2.1518295861986716,
            2.1504095850355593,
            2.1657524657565594,
            2.1259722869744717,
            2.1818820202350264,
            2.017595250247563,
            1.9871379209422377,
            1.9803485033636314
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.102359978031884,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.248174873033875,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 30.37304209549967
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 100.67282193033861
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 88.28359936327304
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.0858512633561865
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.378567869043939
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4073.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4166,
          "annual_bias_pct": 1.5175289046355547,
          "hourly_rmse": 68.07890195361254,
          "hourly_max_abs_diff": 252.6805083498839,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 20665.45312753891,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4263438517247218,
            1.4127228070824096,
            1.5003312057827565,
            1.5401134152344527,
            1.606545693016316,
            1.6315227850969845,
            1.639855995116333,
            1.5615101958982036,
            1.6209018606155305,
            1.3737848285510548,
            1.4251887654074957,
            1.4955247747132538
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.5175289046355547,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.639855995116333,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 21.14731441418787
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 68.07890195361254
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 58.825977592239994
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.4710704052026917
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.7024597292177635
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4166.0
            }
          ]
        }
      ]
    },
    {
      "id": "medan_equator_dcac130",
      "site_id": "medan",
      "site_name": "Medan",
      "latitude": 3.652,
      "longitude": 98.685,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 48,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.3221,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/medan_equator_dcac130.csv",
      "fixture_sha256": "23ac33047e179e6b9bfa247664375872105337424ac320edeefa717133472cb6",
      "hemisphere": "utara",
      "pnom_kwp": 13.221119999999999,
      "weather_sha256": "1c2d4d6c657a58dff0f747ae30d36e04ff91895459a1967f95bddb0c7e1d99d3",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1740.0032769999943,
        "engine_poa_kwh_m2": 1740.0032754099739,
        "oracle_ac_kwh": 20024.775278100024,
        "engine_ac_kwh": 20288.75964580941,
        "ac_bias_pct": 1.318288789977533
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": null,
          "hourly_rmse": 2.839258545625466e-7,
          "hourly_max_abs_diff": 4.995748206226835e-7,
          "hourly_max_abs_diff_azimuth": 4.999547513762082e-7,
          "hourly_max_rel_diff_pct": 8.793050402711913e-6,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.995748206226835e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999547513762082e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.997559557295972e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.839258545625466e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -7.435242530642529e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.5332441714076994e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.85492214713748e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3956,
          "annual_bias_pct": -9.138031577095903e-8,
          "hourly_rmse": 0.00002857261324899563,
          "hourly_max_abs_diff": 0.0000499994488336597,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00009106279128772,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            2.867687992750343e-8,
            3.6268175247311276e-7,
            1.7437070523306864e-7,
            -2.5837190060645326e-7,
            -5.199676204095656e-7,
            1.1310086085846201e-7,
            -7.504299247545022e-7,
            -2.7286241690584954e-7,
            -5.450634539052956e-8,
            -1.8448237604301968e-7,
            -1.4487546827450777e-7,
            3.9401309247705606e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -9.138031577095903e-8,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0000499994488336597,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.00009106279128772,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 4.834410986488366e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00002857261324899563
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -3.9385120485438696e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -8.97980836808886e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.514556471811683e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3956.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": -3.346782735873919e-8,
          "hourly_rmse": 0.00002886308095839502,
          "hourly_max_abs_diff": 0.000049996816869679606,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.010940815147602041,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.647056100460029e-7,
            -1.077290917122657e-7,
            3.8214465192101025e-7,
            -5.615931491207196e-7,
            -2.906339184144615e-7,
            -7.72310676019654e-8,
            -5.43914247031433e-7,
            6.397944513313859e-8,
            1.5463725288406523e-7,
            3.603867727436845e-7,
            1.296875636313538e-7,
            5.855744179364796e-7
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -3.346782735873919e-8,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 5.069952858686779e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.00002886308095839502
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -1.3110690236092563e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.346792747155593e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 7.3679377876073524e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3956,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00002851514454272978,
          "hourly_max_abs_diff": 0.000049996756558812194,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00019868518006835222,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.000049996756558812194,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00002851514454272978
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -5.237960805055255e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.3133513196878612e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007149805832861555
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3956.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4073,
          "annual_bias_pct": 2.1023599970669005,
          "hourly_rmse": 120.807387234331,
          "hourly_max_abs_diff": 407.2389354373554,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.24821038726227,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.113008414058271,
            2.081224449095206,
            2.112701903865561,
            2.137075066428743,
            2.151829685066922,
            2.150409559673559,
            2.165752408420781,
            2.1259724164343434,
            2.1818820289961747,
            2.017595313724521,
            1.9871380294377208,
            1.9803483834757334
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.1023599970669005,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.24821038726227,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 36.44765085310813
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 120.807387234331
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 105.94032010997586
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.085851280924209
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.3785678875262146
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4073.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4201,
          "annual_bias_pct": 1.3182887899778224,
          "hourly_rmse": 86.30082089396731,
          "hourly_max_abs_diff": 576.8959999999988,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 26759.01306172766,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.2610508457999259,
            1.3530016179912563,
            1.37586933141322,
            1.3476637768825248,
            1.3294945898282209,
            1.3381912963673792,
            1.3472884868664465,
            1.4187202052659822,
            1.4834671623155462,
            1.1605159844516644,
            1.1463333716055668,
            1.23299703203248
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.3182887899778224,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.4834671623155462,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 22.158203464732097
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 86.30082089396731
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 61.38769973650212
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.287853286798604
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.8105059534528563
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4201.0
            }
          ]
        }
      ]
    },
    {
      "id": "medan_reverse_dcac110",
      "site_id": "medan",
      "site_name": "Medan",
      "latitude": 3.652,
      "longitude": 98.685,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/medan_reverse_dcac110.csv",
      "fixture_sha256": "364e6081a6b8306167f7781fb5e947b33bab6d327d38991fe0912420c07e4063",
      "hemisphere": "utara",
      "pnom_kwp": 11.0176,
      "weather_sha256": "1c2d4d6c657a58dff0f747ae30d36e04ff91895459a1967f95bddb0c7e1d99d3",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1721.496508700002,
        "engine_poa_kwh_m2": 1721.4965095236773,
        "oracle_ac_kwh": 16483.80353040001,
        "engine_ac_kwh": 16737.654608047054,
        "ac_bias_pct": 1.5400030531720539
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": null,
          "hourly_rmse": 2.839258545625466e-7,
          "hourly_max_abs_diff": 4.995748206226835e-7,
          "hourly_max_abs_diff_azimuth": 4.999547513762082e-7,
          "hourly_max_rel_diff_pct": 8.793050402711913e-6,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.995748206226835e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999547513762082e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998514242515739e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.839258545625466e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -7.435242530642529e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.5332441714076994e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.85492214713748e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3936,
          "annual_bias_pct": 4.784647647179418e-8,
          "hourly_rmse": 0.000028790348108942077,
          "hourly_max_abs_diff": 0.000049993811614967854,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00009156589572474666,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -5.886361290034722e-7,
            4.015356912689501e-8,
            1.415739753937217e-7,
            5.4606542574650604e-8,
            1.6805072437164233e-7,
            5.084530919973584e-7,
            -3.1801269260951633e-7,
            2.5708271238304187e-7,
            3.737169012861253e-7,
            1.225891035563649e-7,
            1.0050739609605941e-6,
            -1.3507313931118722e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 4.784647647179418e-8,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.000049993811614967854,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.00009156589572474666,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 6.787226984537639e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.000028790348108942077
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 2.699362116000103e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 6.193245258906934e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.605474896128346e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3936.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": -2.1594746778965884e-9,
          "hourly_rmse": 0.000028837585799948268,
          "hourly_max_abs_diff": 0.00004998146891921351,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.010940815147602041,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -6.383552827450996e-7,
            -1.3962555283051472e-7,
            -1.1276133007636933e-7,
            -8.923665804338346e-8,
            -5.720392798363356e-8,
            1.7251187023956583e-8,
            -3.5026172610511105e-7,
            4.0087335280393284e-7,
            4.6194675350366517e-7,
            3.000907289407867e-7,
            3.5911154990487376e-7,
            -6.947153718713094e-8
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -2.1594746778965884e-9,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 4.406694333930886e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.000028837585799948268
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -8.372328343061665e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -2.159939287924918e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 7.4396789024445e-6
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3936,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00002917843066356831,
          "hourly_max_abs_diff": 0.0000499838179379708,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.000203340709967422,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0000499838179379708,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00002917843066356831
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 3.5809989879631305e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 8.993917384313781e-7
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007328357133698338
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3936.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4094,
          "annual_bias_pct": 2.113162297010383,
          "hourly_rmse": 100.81480626012804,
          "hourly_max_abs_diff": 338.654951297347,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.02426141989052,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.027843151579269,
            1.9869149839566427,
            2.0858728675261626,
            2.159768659538006,
            2.196051905940792,
            2.2040002659627818,
            2.2246806923586573,
            2.1715319729372915,
            2.175808373223218,
            1.9934565815349519,
            2.00029166149396,
            2.0389889438513493
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.113162297010383,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.02426141989052,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 30.41944064276173
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 100.81480626012804
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 87.4352970395445
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.0981483646142918
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.4192108684428426
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4094.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4188,
          "annual_bias_pct": 1.5400030531722035,
          "hourly_rmse": 69.2835564100565,
          "hourly_max_abs_diff": 251.82568924545194,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 98968.80441687134,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4738320563237552,
            1.3980078590890563,
            1.492179041460564,
            1.527201641734519,
            1.5736598923526868,
            1.565210831994497,
            1.5850871239515218,
            1.5457627625850905,
            1.6116841703971756,
            1.4057996524940033,
            1.5848902449563675,
            1.7630457634456715
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.5400030531722035,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.7630457634456715,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 21.309694608973096
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 69.2835564100565
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 59.16612597742554
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.5032194186037178
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.760270520758114
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4188.0
            }
          ]
        }
      ]
    },
    {
      "id": "semarang_equator_dcac110",
      "site_id": "semarang",
      "site_name": "Semarang",
      "latitude": -6.966,
      "longitude": 110.419,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/semarang_equator_dcac110.csv",
      "fixture_sha256": "4211c118f24150bfc62c4362ff3df0dbd0ede1ee8ba1b3fad3b87163091e482d",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "4e2973ebab63ae299de8ef3ed15f7cf5807daf5af3b6218f4900a41fb2acfd61",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1958.3484921000006,
        "engine_poa_kwh_m2": 1958.348408268899,
        "oracle_ac_kwh": 18529.31030050002,
        "engine_ac_kwh": 18835.288532785376,
        "ac_bias_pct": 1.6513201372481745
      },
      "stages": [
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_solar_position_semarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4397,
          "annual_bias_pct": null,
          "hourly_rmse": 2.910059608818927e-7,
          "hourly_max_abs_diff": 4.99914193596851e-7,
          "hourly_max_abs_diff_azimuth": 4.996243490040797e-7,
          "hourly_max_rel_diff_pct": 0.000019075039333156154,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.99914193596851e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.996243490040797e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998566964786733e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.910059608818927e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -5.747583959726315e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.1721129568907369e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.934525875083472e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4397.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_semarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3905,
          "annual_bias_pct": -4.280703970418732e-6,
          "hourly_rmse": 0.0005073934584371075,
          "hourly_max_abs_diff": 0.0051686618664490425,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005577949488086906,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -4.085600046639098e-6,
            -0.000012390307058865247,
            -0.000037488007227953077,
            -0.00004067828012633898,
            -0.00003330170452659205,
            -6.003354494642797e-6,
            -8.942167971972887e-7,
            0.000021262058691449196,
            0.000035194712779187414,
            8.97615795669682e-6,
            -9.343006171561846e-7,
            3.993170535346529e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.280703970418732e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0051686618664490425,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005577949488086906,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00003988896030268028
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0005073934584371075
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000018342699610295333
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.67736095591433e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00010172269802072595
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3905.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_effective_irradiance_semarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": -4.475223572902505e-6,
          "hourly_rmse": 0.0004980874327590166,
          "hourly_max_abs_diff": 0.005203997225279977,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.008235951017509848,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -4.285771726156322e-6,
            -0.000013673199650342431,
            -0.00003776907097626571,
            -0.00004126338516178186,
            -0.00003438269427948344,
            -5.496064396014603e-6,
            -7.964320675137838e-7,
            0.00002166907160939308,
            0.000035524048122645694,
            8.91285520401759e-6,
            -1.5879704666450938e-6,
            3.777427470949001e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.475223572902505e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000039821821525101063
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0004980874327590166
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000019691698724311606
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.475223498766932e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00011319757704659732
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_chain_semarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3905,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003270254952033015,
          "hourly_max_abs_diff": 0.0001488781661365124,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.000562193817569228,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0001488781661365124,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003270254952033015
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -9.650964195691605e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -2.3008229040367842e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007796399761835479
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3905.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4226,
          "annual_bias_pct": 2.25598954415386,
          "hourly_rmse": 122.01434075555795,
          "hourly_max_abs_diff": 382.71310465069473,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.640132649827144,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.025809357078625,
            1.9071079612786337,
            2.0889568475166453,
            2.1857256715702054,
            2.1778728601242827,
            2.138511480941455,
            2.148310978507637,
            2.467140146436575,
            2.6991910832623147,
            2.604596503910483,
            2.1172175889696216,
            2.1854052518586653
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.25598954415386,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.640132649827144,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 37.167797598818204
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 122.01434075555795
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 101.85444580373606
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.244773251139591
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.689077793533693
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4226.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4329,
          "annual_bias_pct": 1.6513201372479784,
          "hourly_rmse": 83.48637245387324,
          "hourly_max_abs_diff": 295.8751484646673,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 404333.9032880636,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.5299801605089687,
            1.6561896934313198,
            1.4902180124519833,
            1.5759925733740996,
            1.4712031997934578,
            1.4666915468651556,
            1.4751384708262685,
            1.750412319988945,
            1.9877144943140963,
            1.9270346756157328,
            1.5308667946384624,
            1.9288965537765417
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.6513201372479784,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.9877144943140963,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 26.114219918488462
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 83.48637245387324
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 69.88862237854988
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.6328068415400119
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.9504908736029125
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4329.0
            }
          ]
        }
      ]
    },
    {
      "id": "semarang_equator_dcac130",
      "site_id": "semarang",
      "site_name": "Semarang",
      "latitude": -6.966,
      "longitude": 110.419,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 48,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.3221,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/semarang_equator_dcac130.csv",
      "fixture_sha256": "e803608f58106f5a596fdb8103f94e6b689b3f7bcf8e6aa427bee8e6dc693974",
      "hemisphere": "selatan",
      "pnom_kwp": 13.221119999999999,
      "weather_sha256": "4e2973ebab63ae299de8ef3ed15f7cf5807daf5af3b6218f4900a41fb2acfd61",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1958.3484921000006,
        "engine_poa_kwh_m2": 1958.348408268899,
        "oracle_ac_kwh": 22186.490392100037,
        "engine_ac_kwh": 22560.137656532173,
        "ac_bias_pct": 1.6841206420154737
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4397,
          "annual_bias_pct": null,
          "hourly_rmse": 2.910059608818927e-7,
          "hourly_max_abs_diff": 4.99914193596851e-7,
          "hourly_max_abs_diff_azimuth": 4.996243490040797e-7,
          "hourly_max_rel_diff_pct": 0.000019075039333156154,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.99914193596851e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.996243490040797e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.998566964786733e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.910059608818927e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -5.747583959726315e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.1721129568907369e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.934525875083472e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4397.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3905,
          "annual_bias_pct": -4.280703970418732e-6,
          "hourly_rmse": 0.0005073934584371075,
          "hourly_max_abs_diff": 0.0051686618664490425,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005577949488086906,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -4.085600046639098e-6,
            -0.000012390307058865247,
            -0.000037488007227953077,
            -0.00004067828012633898,
            -0.00003330170452659205,
            -6.003354494642797e-6,
            -8.942167971972887e-7,
            0.000021262058691449196,
            0.000035194712779187414,
            8.97615795669682e-6,
            -9.343006171561846e-7,
            3.993170535346529e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.280703970418732e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.0051686618664490425,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005577949488086906,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00003988896030268028
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0005073934584371075
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000018342699610295333
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.67736095591433e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00010172269802072595
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3905.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": -4.475223572902505e-6,
          "hourly_rmse": 0.0004980874327590166,
          "hourly_max_abs_diff": 0.005203997225279977,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.008235951017509848,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -4.285771726156322e-6,
            -0.000013673199650342431,
            -0.00003776907097626571,
            -0.00004126338516178186,
            -0.00003438269427948344,
            -5.496064396014603e-6,
            -7.964320675137838e-7,
            0.00002166907160939308,
            0.000035524048122645694,
            8.91285520401759e-6,
            -1.5879704666450938e-6,
            3.777427470949001e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.475223572902505e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000039821821525101063
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0004980874327590166
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000019691698724311606
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.475223498766932e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00011319757704659732
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3905,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003270254952033015,
          "hourly_max_abs_diff": 0.0001488781661365124,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.000562193817569228,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0001488781661365124,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003270254952033015
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -9.650964195691605e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -2.3008229040367842e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00007796399761835479
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3905.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4226,
          "annual_bias_pct": 2.2559895392686267,
          "hourly_rmse": 146.41720856089412,
          "hourly_max_abs_diff": 459.25578558083544,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.640081339884265,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.025809331634758,
            1.9071080500608437,
            2.0889568432422996,
            2.18572575318794,
            2.1778728303793824,
            2.138511537390362,
            2.1483109124436695,
            2.4671401682527168,
            2.699191044734232,
            2.604596476148686,
            2.117217542307368,
            2.185405212426624
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.2559895392686267,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.640081339884265,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 44.601356971577665
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 146.41720856089412
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 122.22533466632889
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.2447732455408036
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.689077787035974
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4226.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4361,
          "annual_bias_pct": 1.68412064201527,
          "hourly_rmse": 136.44834372085637,
          "hourly_max_abs_diff": 576.8959999999988,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 79548.34098785026,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.2684543693077892,
            1.3172086851329508,
            1.391009393983422,
            1.4193719199883108,
            1.6367717174702174,
            1.287890480468604,
            1.4558546686521778,
            2.300787522442364,
            2.535432117804918,
            2.171854827656245,
            1.2811773444322512,
            1.6216229175234582
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.68412064201527,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.535432117804918,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 33.468326360408085
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 136.44834372085637
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 85.40216692088153
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.6786740190083378
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.682043065173278
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4361.0
            }
          ]
        }
      ]
    },
    {
      "id": "semarang_reverse_dcac110",
      "site_id": "semarang",
      "site_name": "Semarang",
      "latitude": -6.966,
      "longitude": 110.419,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/semarang_reverse_dcac110.csv",
      "fixture_sha256": "2365ce145d550a373143f6f8b9d5fcc7392c7ec425133d4053068a45b591a4f2",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "4e2973ebab63ae299de8ef3ed15f7cf5807daf5af3b6218f4900a41fb2acfd61",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1844.8995695000028,
        "engine_poa_kwh_m2": 1844.8997082222447,
        "oracle_ac_kwh": 17478.16182580004,
        "engine_ac_kwh": 17759.49807778367,
        "ac_bias_pct": 1.6096443938878122
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4397,
          "annual_bias_pct": null,
          "hourly_rmse": 2.910059608818927e-7,
          "hourly_max_abs_diff": 4.99914193596851e-7,
          "hourly_max_abs_diff_azimuth": 4.996243490040797e-7,
          "hourly_max_rel_diff_pct": 0.000019075039333156154,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 4.99914193596851e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.996243490040797e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.995843312372017e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.910059608818927e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -5.747583959726315e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.1721129568907369e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.934525875083472e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4397.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3904,
          "annual_bias_pct": 7.519229997639043e-6,
          "hourly_rmse": 0.0005806536992574447,
          "hourly_max_abs_diff": 0.005937465274286069,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.010343975890059854,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.8712894972002e-6,
            -0.000015120255601976124,
            -0.000032096682788105215,
            -0.000019961587524193915,
            -0.000029981088076481543,
            -0.000020713863174228095,
            0.000031232542099910875,
            0.00005128748475301732,
            0.000023608940602476968,
            0.00003705520710437163,
            0.00003400441759153173,
            7.194420499721554e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.519229997639043e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.005937465274286069,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.010343975890059854,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000047078762186865155
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0005806536992574447
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.000021533534273276613
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 4.579856981868211e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00012349625773656908
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3904.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": 7.593974480910972e-6,
          "hourly_rmse": 0.0006298631879395159,
          "hourly_max_abs_diff": 0.005927169256608522,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.018057306970088637,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.4853388585296027e-6,
            -0.000016528581404578593,
            -0.00003335627687635187,
            -0.000019554181619294253,
            -0.000029648678511246508,
            -0.00002172132093658907,
            0.000032620678119213596,
            0.00005217746340860811,
            0.00002462855934752325,
            0.0000374448578120315,
            0.00003364894866522771,
            6.304636734002334e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.593974480910972e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.0000468999644006267
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006298631879395159
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00003139005754562791
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.593974559765926e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001523783452258105
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3904,
          "annual_bias_pct": null,
          "hourly_rmse": 0.00003362406654349827,
          "hourly_max_abs_diff": 0.00020623303532119053,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0006413257186430159,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00020623303532119053,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.00003362406654349827
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 9.656415634493089e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.344727416822486e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008164444621458418
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3904.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4187,
          "annual_bias_pct": 2.1894341855126833,
          "hourly_rmse": 110.6025683343554,
          "hourly_max_abs_diff": 392.88366278151443,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.928511085436828,
          "hourly_pass_fraction": 0.0,
          "monthly_bias_pct": [
            2.072478198856598,
            1.8900767664467792,
            2.0457032264220567,
            2.1119214535424993,
            2.013452194869039,
            2.0175683222888665,
            2.039617122784736,
            2.2649369756370548,
            2.5723643566460406,
            2.5957945637831616,
            2.1663569937222817,
            2.2077489821785568
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.1894341855126833,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.928511085436828,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 33.844478791861
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 110.6025683343554
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 93.99474203459953
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.1755915237073133
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.5599943673435255
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4187.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4276,
          "annual_bias_pct": 1.6096443938877345,
          "hourly_rmse": 76.27858722422823,
          "hourly_max_abs_diff": 306.0810442702532,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 7425.798561995614,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4745710775048257,
            1.5687913930562742,
            1.4514293245377337,
            1.5879724672668696,
            1.3931440850347967,
            1.4891724541110047,
            1.52763980294643,
            1.6171578039057084,
            1.8733472540020926,
            1.8959129087101672,
            1.5077357046604074,
            1.8207460952134897
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.6096443938877345,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.8959129087101672,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 23.946100090307564
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 76.27858722422823
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 64.35337791890504
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.5743935015811772
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.8661415440686366
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4276.0
            }
          ]
        }
      ]
    },
    {
      "id": "surabaya_equator_dcac110",
      "site_id": "surabaya",
      "site_name": "Surabaya",
      "latitude": -7.1632,
      "longitude": 112.6375,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/surabaya_equator_dcac110.csv",
      "fixture_sha256": "bf2c200151bf4a7d596d88d41e71943b992eb03506fcab8c8a7438e2c7154d63",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "825d1aea192d07ea25949863bec53e51dcf85b02f620c21b9288c6ff1d8deb8d",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2054.9974431999935,
        "engine_poa_kwh_m2": 2054.99735175928,
        "oracle_ac_kwh": 19339.66179590003,
        "engine_ac_kwh": 19648.863733684833,
        "ac_bias_pct": 1.5987970267936888
      },
      "stages": [
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_solar_position_surabaya",
            "reason": null,
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": null,
          "hourly_rmse": 2.881475087711785e-7,
          "hourly_max_abs_diff": 5.000003255872798e-7,
          "hourly_max_abs_diff_azimuth": 4.999135825300982e-7,
          "hourly_max_rel_diff_pct": 0.000011377063690372827,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 5.000003255872798e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999135825300982e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.996470019946742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.881475087711785e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -1.7196212985280748e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.518100789645315e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.895088523327352e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_poa_surabaya",
            "reason": null,
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3994,
          "annual_bias_pct": -4.44967529284864e-6,
          "hourly_rmse": 0.0007257343156106706,
          "hourly_max_abs_diff": 0.00864302565898356,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005237189185793177,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            7.946370803487556e-6,
            8.213559610658927e-7,
            -0.000026365440902164705,
            -0.00004621157786640708,
            -0.00006612730825703107,
            -0.00001776631378446506,
            0.000010839241216812686,
            0.00003645465769699744,
            0.00004390654311355686,
            8.00666818864677e-6,
            -0.00001658251776470511,
            -3.611401415362606e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.44967529284864e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.00864302565898356,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005237189185793177,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005545078579733446
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0007257343156106706
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000023047239703258454
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.489754436370656e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00014137783548451386
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3994.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_effective_irradiance_surabaya",
            "reason": null,
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": -4.775800163368656e-6,
          "hourly_rmse": 0.0006945095873910926,
          "hourly_max_abs_diff": 0.008648437400253783,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.006788140663328063,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            7.795159783448682e-6,
            4.3332510219637093e-7,
            -0.00002733047538097231,
            -0.00004664392246583522,
            -0.00006798055510562791,
            -0.000018592969146345967,
            0.000010813751045694108,
            0.00003692829003417978,
            0.00004502468862825319,
            8.085332752257244e-6,
            -0.000018050257250580987,
            -3.0747176975449316e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.775800163368656e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000055762495237439374
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006945095873910926
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000021984449187892355
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.775800122231752e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00015087205251338337
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_cell_temp_chain_surabaya",
            "reason": null,
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3994,
          "annual_bias_pct": null,
          "hourly_rmse": 0.0000352833389043251,
          "hourly_max_abs_diff": 0.0002520821745903845,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0007200187789102826,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0002520821745903845,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.0000352833389043251
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -6.576198560228183e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.5223842746623e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008168062416847289
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3994.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4104,
          "annual_bias_pct": 2.2815921387229166,
          "hourly_rmse": 130.0557389313978,
          "hourly_max_abs_diff": 379.96588237373,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.301569133554292,
          "hourly_pass_fraction": 0.023635477582846003,
          "monthly_bias_pct": [
            2.0115544983841374,
            2.3254649682131343,
            2.2302391474625893,
            2.326152812245434,
            2.350732870797002,
            2.229938809976177,
            2.2820572882805013,
            2.3808203256046987,
            2.6745352314719266,
            2.409155834617008,
            2.618284999615031,
            1.3311926490675208
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.2815921387229166,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.301569133554292,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 38.936479178361864
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 130.0557389313978
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 110.43613625369012
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.2665984701851083
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.6692724763888154
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.023635477582846003
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4104.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4181,
          "annual_bias_pct": 1.5987970267937728,
          "hourly_rmse": 87.24527107927706,
          "hourly_max_abs_diff": 293.303555078779,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 8953.790188552144,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.4494335891662031,
            1.7410414152877938,
            1.5826362152088462,
            1.7336331307869435,
            1.583351960580823,
            1.466104684942027,
            1.5570643094885492,
            1.673859523900946,
            1.9360840828591974,
            1.740226784648138,
            1.8625681763737219,
            0.7302675013816865
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.5987970267937728,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.9360840828591974,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 26.507550952224065
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 87.24527107927706
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 71.64470727582402
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.5488715587762942
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.8861368013156699
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4181.0
            }
          ]
        }
      ]
    },
    {
      "id": "surabaya_equator_dcac130",
      "site_id": "surabaya",
      "site_name": "Surabaya",
      "latitude": -7.1632,
      "longitude": 112.6375,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 0.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 48,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.3221,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/surabaya_equator_dcac130.csv",
      "fixture_sha256": "74616558df72e9029dd5db497e32adf0d44aa99231fdb01b972b75941080a1ca",
      "hemisphere": "selatan",
      "pnom_kwp": 13.221119999999999,
      "weather_sha256": "825d1aea192d07ea25949863bec53e51dcf85b02f620c21b9288c6ff1d8deb8d",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2054.9974431999935,
        "engine_poa_kwh_m2": 2054.99735175928,
        "oracle_ac_kwh": 23153.921259499963,
        "engine_ac_kwh": 23530.996170378294,
        "ac_bias_pct": 1.6285574553537827
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": null,
          "hourly_rmse": 2.881475087711785e-7,
          "hourly_max_abs_diff": 5.000003255872798e-7,
          "hourly_max_abs_diff_azimuth": 4.999135825300982e-7,
          "hourly_max_rel_diff_pct": 0.000011377063690372827,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 5.000003255872798e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999135825300982e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.996470019946742e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.881475087711785e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -1.7196212985280748e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.518100789645315e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.895088523327352e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3994,
          "annual_bias_pct": -4.44967529284864e-6,
          "hourly_rmse": 0.0007257343156106706,
          "hourly_max_abs_diff": 0.00864302565898356,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.005237189185793177,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            7.946370803487556e-6,
            8.213559610658927e-7,
            -0.000026365440902164705,
            -0.00004621157786640708,
            -0.00006612730825703107,
            -0.00001776631378446506,
            0.000010839241216812686,
            0.00003645465769699744,
            0.00004390654311355686,
            8.00666818864677e-6,
            -0.00001658251776470511,
            -3.611401415362606e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.44967529284864e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.00864302565898356,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.005237189185793177,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00005545078579733446
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0007257343156106706
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000023047239703258454
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.489754436370656e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00014137783548451386
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3994.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": -4.775800163368656e-6,
          "hourly_rmse": 0.0006945095873910926,
          "hourly_max_abs_diff": 0.008648437400253783,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.006788140663328063,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            7.795159783448682e-6,
            4.3332510219637093e-7,
            -0.00002733047538097231,
            -0.00004664392246583522,
            -0.00006798055510562791,
            -0.000018592969146345967,
            0.000010813751045694108,
            0.00003692829003417978,
            0.00004502468862825319,
            8.085332752257244e-6,
            -0.000018050257250580987,
            -3.0747176975449316e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.775800163368656e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.000055762495237439374
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006945095873910926
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": -0.000021984449187892355
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.775800122231752e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00015087205251338337
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3994,
          "annual_bias_pct": null,
          "hourly_rmse": 0.0000352833389043251,
          "hourly_max_abs_diff": 0.0002520821745903845,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0007200187789102826,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.0002520821745903845,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.0000352833389043251
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": -6.576198560228183e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.5223842746623e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008168062416847289
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3994.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4104,
          "annual_bias_pct": 2.2815921341227887,
          "hourly_rmse": 156.06688600309437,
          "hourly_max_abs_diff": 455.9591188484719,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.301551896882568,
          "hourly_pass_fraction": 0.023635477582846003,
          "monthly_bias_pct": [
            2.0115544983839,
            2.3254650368226817,
            2.2302391495126463,
            2.326152804035956,
            2.350732876665003,
            2.229938771164903,
            2.282057247609819,
            2.3808203818633222,
            2.674535191466737,
            2.4091558582267956,
            2.618284955080681,
            1.3311926323538714
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.2815921341227887,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.301551896882568,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 46.72377488095729
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 156.06688600309437
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 132.52336317304355
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.2665984643888377
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.66927246401573
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.023635477582846003
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4104.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4220,
          "annual_bias_pct": 1.6285574553542947,
          "hourly_rmse": 138.22468949502294,
          "hourly_max_abs_diff": 576.8959999999988,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 7146.356125265616,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.1655341963586283,
            1.5498844717653502,
            1.4955746370621257,
            1.656538893160138,
            1.4826072203631708,
            1.3567090755306301,
            1.7206126818660268,
            1.6871666702587627,
            2.8195198777005195,
            1.732153071059051,
            1.8070495287410695,
            0.6990269204958279
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.6285574553542947,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 2.8195198777005195,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 33.664696436922185
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 138.22468949502294
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 87.461592686838
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.594062262723732
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.5192630791627475
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4220.0
            }
          ]
        }
      ]
    },
    {
      "id": "surabaya_reverse_dcac110",
      "site_id": "surabaya",
      "site_name": "Surabaya",
      "latitude": -7.1632,
      "longitude": 112.6375,
      "timezone": "Asia/Jakarta",
      "azimuth_deg": 180.0,
      "tilt_deg": 10.0,
      "module_wp": 275.44,
      "module_count": 40,
      "inverter_ac_kw": 10.0,
      "dc_ac_ratio": 1.1018,
      "reference_transposition": "perez",
      "reference_temperature_model": "sapm",
      "fixture": "tools/oracle/fixtures/stages/surabaya_reverse_dcac110.csv",
      "fixture_sha256": "95a9815a9f966f573799738979c08e15d0f2a5e7b82123c56adc1e56de3447ba",
      "hemisphere": "selatan",
      "pnom_kwp": 11.0176,
      "weather_sha256": "825d1aea192d07ea25949863bec53e51dcf85b02f620c21b9288c6ff1d8deb8d",
      "models": {
        "transposition_reference": "perez",
        "transposition_engine": "transposisi bidang modul: langsung + difus langit + pantulan tanah (default Perez 1990; Hay-Davies 1980 / Liu-Jordan 1963)",
        "temperature_reference": "sapm",
        "temperature_engine": "model suhu sel di output.thermal (bawaan Sandia/SAPM per racking) dari shaded_irradiance, temp_air, wind_speed",
        "iam_engine": "irradiance efektif setelah IAM: langsung + difus langit + pantulan tanah",
        "dc_engine": "output at cell temperature: Pmp(G_eff, T_cell) model single-diode; tanpa karakterisasi, PVWatts linear (warning)",
        "ac_engine": "actual_dc x efisiensi inverter datar; kurva efisiensi menyusul"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1949.971626999999,
        "engine_poa_kwh_m2": 1949.9717642115927,
        "oracle_ac_kwh": 18400.069566500017,
        "engine_ac_kwh": 18685.682554659037,
        "ac_bias_pct": 1.552238632178979
      },
      "stages": [
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "solar_position",
          "engine_column": "solar_zenith",
          "oracle_column": "zenith",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": null,
          "hourly_rmse": 2.881475087711785e-7,
          "hourly_max_abs_diff": 5.000003255872798e-7,
          "hourly_max_abs_diff_azimuth": 4.999135825300982e-7,
          "hourly_max_rel_diff_pct": 0.000011377063690372827,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "zenith_max_abs_diff",
              "unit": "deg",
              "value": 5.000003255872798e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.zenith_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "azimuth_max_abs_diff",
              "unit": "deg",
              "value": 4.999135825300982e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.azimuth_max_abs_diff_deg",
              "within_tolerance": true
            },
            {
              "name": "aoi_max_abs_diff",
              "unit": "deg",
              "value": 4.999718044018664e-7,
              "tolerance": 0.01,
              "tolerance_key": "solar_position.aoi_max_abs_diff_deg",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "deg",
              "value": 2.881475087711785e-7
            },
            {
              "name": "hourly_mbe",
              "unit": "deg",
              "value": -1.7196212985280748e-9
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -3.518100789645315e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.895088523327352e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "poa",
          "engine_column": "poa_irradiance",
          "oracle_column": "poa_global",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3948,
          "annual_bias_pct": 7.036594373959735e-6,
          "hourly_rmse": 0.0006758978598803829,
          "hourly_max_abs_diff": 0.006093068767739851,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.007749672418879817,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000016163681811394938,
            -0.00003968964736279265,
            -0.0000242174645709758,
            -3.7563012301833407e-6,
            0.000029317106750750523,
            -2.770937440079558e-6,
            2.3181227593743487e-6,
            5.285861708108964e-6,
            9.531133203012769e-6,
            0.00003752385726909,
            0.00005239939960643996,
            0.0000160065727088962
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.036594373959735e-6,
              "tolerance": 0.5,
              "tolerance_key": "poa.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_abs_diff",
              "unit": "W/m2",
              "value": 0.006093068767739851,
              "tolerance": 2.0,
              "tolerance_key": "poa.hourly_max_abs_diff_w_m2",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.007749672418879817,
              "tolerance": 1.0,
              "tolerance_key": "poa.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00004499720647194446
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006758978598803829
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00003469117379667997
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.048190526959402e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00013732187100734425
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3948.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "effective_irradiance",
          "engine_column": "effective_irradiance",
          "oracle_column": "effective_irradiance",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4380,
          "annual_bias_pct": 7.2223960872799e-6,
          "hourly_rmse": 0.0006439082479008667,
          "hourly_max_abs_diff": 0.006079945338100856,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.009711641248500377,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.00001672577991046725,
            -0.000040090375654661624,
            -0.000024740955068911263,
            -3.2886322687803968e-6,
            0.000029484466651034957,
            -2.9349645970805334e-6,
            3.1950483966049794e-6,
            4.975180608329214e-6,
            8.89997730274782e-6,
            0.000038162224803874766,
            0.000053839575040159265,
            0.000017005712784040247
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.2223960872799e-6,
              "tolerance": 0.5,
              "tolerance_key": "effective_irradiance.annual_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh/m2",
              "value": 0.00004523572792515836
            },
            {
              "name": "hourly_rmse",
              "unit": "W/m2",
              "value": 0.0006439082479008667
            },
            {
              "name": "hourly_mbe",
              "unit": "W/m2",
              "value": 0.00003151290916438702
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.222395849359619e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001475763545900509
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4380.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "tidak ada test CI yang membandingkan kasus ini; tahap ini dijaga pada kasus equator_dcac110",
            "pending_issue": null
          },
          "stage": "cell_temperature",
          "engine_column": "avg_cell_temp",
          "oracle_column": "cell_temperature",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 3948,
          "annual_bias_pct": null,
          "hourly_rmse": 0.0000348833793669045,
          "hourly_max_abs_diff": 0.00021732267901342084,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0006759494244883942,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": null,
          "within_tolerance": true,
          "metrics": [
            {
              "name": "hourly_max_abs_diff",
              "unit": "degC",
              "value": 0.00021732267901342084,
              "tolerance": 0.2,
              "tolerance_key": "cell_temperature.hourly_max_abs_diff_deg_c",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "hourly_rmse",
              "unit": "degC",
              "value": 0.0000348833793669045
            },
            {
              "name": "hourly_mbe",
              "unit": "degC",
              "value": 1.0674875965935048e-6
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.5065018248844374e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00008190751285569949
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 3948.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: harness oracle ujung-ke ujung belum menautkan karakterisasi modul (oracle_dc_<site> terisolasi aktif)",
            "pending_issue": "#14"
          },
          "stage": "dc",
          "engine_column": "module_mpp_power",
          "oracle_column": "p_mp",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4112,
          "annual_bias_pct": 2.214703362569447,
          "hourly_rmse": 119.3945083590936,
          "hourly_max_abs_diff": 379.8003982134742,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18.432507869920382,
          "hourly_pass_fraction": 0.024075875486381324,
          "monthly_bias_pct": [
            2.0431263170736704,
            2.333879411642777,
            2.1760517927981113,
            2.2764105176209624,
            2.242997645306641,
            2.108429330467207,
            2.0984428402230377,
            2.2389368166226133,
            2.526077981467859,
            2.4140017716766082,
            2.7239714834518716,
            1.2964845348477696
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 2.214703362569447,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 18.432507869920382,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 36.05957421076018
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 119.3945083590936
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 101.89154623993254
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 2.201274052786233
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 2.5794096075169715
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 0.024075875486381324
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4112.0
            }
          ]
        },
        {
          "verdict": "NOT_GATED",
          "gate": {
            "gated": false,
            "ci_test": null,
            "reason": "test oracle tahap ini masih #[ignore]: menunggu ENG-12",
            "pending_issue": "#15"
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "approximated",
          "pending_issue": "#15",
          "n_points": 4150,
          "annual_bias_pct": 1.5522386321786095,
          "hourly_rmse": 81.09705820241147,
          "hourly_max_abs_diff": 293.0693982849334,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 117030.99747389444,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            1.3817622311089848,
            1.6939411896762295,
            1.535169320039651,
            1.7657555628424093,
            1.6040126058347322,
            1.507459832854578,
            1.4732916159837015,
            1.600845591247089,
            1.7833776268955166,
            1.7296813956765105,
            1.948456224242119,
            0.5919953431964757
          ],
          "within_tolerance": false,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 1.5522386321786095,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": false
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 1.948456224242119,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": false
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 24.64380931119443
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 81.09705820241147
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 66.34842649753418
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.4964398312171272
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 1.8290843429893906
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4150.0
            }
          ]
        }
      ]
    }
  ],
  "hemisphere_checks": [
    {
      "site_id": "medan",
      "description": "POA tahunan engine untuk azimuth 180 dan 0 terhadap pvlib Perez; tanda POA(180) - POA(0) harus sama dengan oracle",
      "tolerance_key": "poa.annual_max_rel_diff_pct",
      "tolerance": 0.5,
      "south_facing": {
        "azimuth_deg": 180.0,
        "oracle_isotropic_poa_kwh_m2": 1740.0032769999943,
        "engine_poa_kwh_m2": 1740.0032754099739,
        "bias_pct": -9.138031577095903e-8,
        "within_tolerance": true
      },
      "north_facing": {
        "azimuth_deg": 0.0,
        "oracle_isotropic_poa_kwh_m2": 1721.496508700002,
        "engine_poa_kwh_m2": 1721.4965095236773,
        "bias_pct": 4.784647647179418e-8,
        "within_tolerance": true
      },
      "sign_matches_oracle": true,
      "south_beats_north_in_engine": true,
      "verdict": "PASS",
      "ci_test": "oracle_medan_north_of_equator"
    }
  ],
  "spectral_effects": [
    {
      "site_id": "bali",
      "technology": "MonoSi",
      "mean_pw_cm": 4.2770548078792485,
      "annual_factor": 0.9993340975573268,
      "effect_pct": -0.06659024426731719
    },
    {
      "site_id": "bali",
      "technology": "PolySi",
      "mean_pw_cm": 4.2770548078792485,
      "annual_factor": 1.0032339950003188,
      "effect_pct": 0.32339950003188456
    },
    {
      "site_id": "balikpapan",
      "technology": "MonoSi",
      "mean_pw_cm": 4.5834427586791255,
      "annual_factor": 0.9987190117768061,
      "effect_pct": -0.12809882231938907
    },
    {
      "site_id": "balikpapan",
      "technology": "PolySi",
      "mean_pw_cm": 4.5834427586791255,
      "annual_factor": 1.0028248527174615,
      "effect_pct": 0.2824852717461468
    },
    {
      "site_id": "cikarang",
      "technology": "MonoSi",
      "mean_pw_cm": 4.308143890714104,
      "annual_factor": 1.0000751517398943,
      "effect_pct": 0.00751517398942525
    },
    {
      "site_id": "cikarang",
      "technology": "PolySi",
      "mean_pw_cm": 4.308143890714104,
      "annual_factor": 1.0043925618061649,
      "effect_pct": 0.4392561806164874
    },
    {
      "site_id": "makassar",
      "technology": "MonoSi",
      "mean_pw_cm": 4.377846033731531,
      "annual_factor": 1.0004461657880095,
      "effect_pct": 0.044616578800948936
    },
    {
      "site_id": "makassar",
      "technology": "PolySi",
      "mean_pw_cm": 4.377846033731531,
      "annual_factor": 1.004820315704198,
      "effect_pct": 0.48203157041979416
    },
    {
      "site_id": "medan",
      "technology": "MonoSi",
      "mean_pw_cm": 4.5843690584358665,
      "annual_factor": 0.999852092027365,
      "effect_pct": -0.014790797263497524
    },
    {
      "site_id": "medan",
      "technology": "PolySi",
      "mean_pw_cm": 4.5843690584358665,
      "annual_factor": 1.0043539871599179,
      "effect_pct": 0.43539871599178603
    },
    {
      "site_id": "semarang",
      "technology": "MonoSi",
      "mean_pw_cm": 3.9922441602986876,
      "annual_factor": 0.9995857848450438,
      "effect_pct": -0.04142151549562101
    },
    {
      "site_id": "semarang",
      "technology": "PolySi",
      "mean_pw_cm": 3.9922441602986876,
      "annual_factor": 1.003527368856232,
      "effect_pct": 0.35273688562320604
    },
    {
      "site_id": "surabaya",
      "technology": "MonoSi",
      "mean_pw_cm": 4.230012661258472,
      "annual_factor": 0.9992344069780892,
      "effect_pct": -0.07655930219108154
    },
    {
      "site_id": "surabaya",
      "technology": "PolySi",
      "mean_pw_cm": 4.230012661258472,
      "annual_factor": 1.0029094117601896,
      "effect_pct": 0.2909411760189551
    }
  ],
  "summary": {
    "cases": 24,
    "sites": 7,
    "stage_results": {
      "FAIL": 0,
      "NOT_GATED": 113,
      "PASS": 31
    },
    "hemisphere_checks": {
      "FAIL": 0,
      "PASS": 1
    }
  },
  "telemetry": {
    "title": "Validasi terhadap data terukur",
    "status": "belum_ada_data",
    "note": "Belum ada data telemetri berizin",
    "source_issue": "#70",
    "cases": []
  }
}
