{
  "schema_version": 2,
  "engine_version": "0.17.0",
  "engine_sha": "92d499f1bf3e55af0bc399f7e0f75a28b08f65b0",
  "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": "effective_rear_irradiance",
      "label": "Irradiance sisi belakang (gain)",
      "status": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/effective_rear_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": "modeled",
      "pending_issue": null,
      "doc": "docs/formulation/actual_dc_power.md"
    },
    {
      "stage": "ac_power",
      "label": "Output inverter",
      "status": "modeled",
      "pending_issue": null,
      "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2090.8120783000027,
        "engine_poa_kwh_m2": 2090.812235999175,
        "oracle_ac_kwh": 20196.88045410002,
        "engine_ac_kwh": 20245.172357253865,
        "ac_bias_pct": 0.23910575330479142
      },
      "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": 7.729643440981814e-6,
          "hourly_rmse": 0.011516643644605773,
          "hourly_max_abs_diff": 0.12404896722188141,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.03594882485982925,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            4.327060072200284e-6,
            5.391985261256472e-6,
            -0.000025311541145641513,
            -0.00007250149649402707,
            -0.00009774974978169673,
            -0.00005934352077442218,
            0.000023653919941828978,
            0.00006829356619682772,
            0.00003668680156271112,
            0.00006021469114553488,
            0.00011248887654554155,
            0.000033009195359155084
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.729643440981814e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.03594882485982925,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0010665348935628904
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.011516643644605773
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.00039049764416785703
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.73169073714339e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00022802474821513697
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4134.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_bali",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4167,
          "annual_bias_pct": 0.23910575330499503,
          "hourly_rmse": 15.072108795660169,
          "hourly_max_abs_diff": 40.406127507580095,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 546.4975091999179,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.21366276936629702,
            0.23238033227959545,
            0.2640982165011723,
            0.2741611877802583,
            0.2416056172432378,
            0.20830216600085943,
            0.21300040994034725,
            0.23709661302227697,
            0.24503003750477848,
            0.2761386907411791,
            0.24226277247053002,
            0.19591357303747886
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.23910575330499503,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.2761386907411791,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 4.105953830379422
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 15.072108795660169
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 11.588931173471769
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.23910165884085155
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.31096622814721
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2090.8120783000027,
        "engine_poa_kwh_m2": 2090.812235999175,
        "oracle_ac_kwh": 24048.59449499998,
        "engine_ac_kwh": 24059.066587662506,
        "ac_bias_pct": 0.04354554967735904
      },
      "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": 7.707539534444698e-6,
          "hourly_rmse": 0.013821515456724118,
          "hourly_max_abs_diff": 0.14887876066626404,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.035941015960099916,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            4.3215222049612025e-6,
            5.356068365887796e-6,
            -0.000025326541089861774,
            -0.00007252878736607502,
            -0.00009775269612593547,
            -0.000059392744646699726,
            0.00002367962954447641,
            0.00006828570216540865,
            0.000036670034610027815,
            0.00006021789198375488,
            0.000112435283578388,
            0.00003290955433353006
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.707539534444698e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.035941015960099916,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.001279765067801098
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.013821515456724118
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.0004676053974847268
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.715326784031357e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00022805020851507607
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4134.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_bali",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4178,
          "annual_bias_pct": 0.04354554967759685,
          "hourly_rmse": 4.212743131748662,
          "hourly_max_abs_diff": 17.10757269064925,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 330.21910234136504,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.045248240502396786,
            0.05288025983447676,
            0.05864330061514778,
            0.04617520584048799,
            0.0611005392782014,
            0.03615001014219934,
            0.03641698288460715,
            0.03340472835660755,
            0.04098591280893075,
            0.03417659664219832,
            0.05909922302152763,
            0.017937526076128144
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.04354554967759685,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.0611005392782014,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.9085680076815876
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 4.212743131748662
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 2.506218438969478
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.043540925604577584
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.07318864646374806
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1972.0251715000002,
        "engine_poa_kwh_m2": 1972.0253458647107,
        "oracle_ac_kwh": 19042.620658699998,
        "engine_ac_kwh": 19085.971368162904,
        "ac_bias_pct": 0.2276509638031369
      },
      "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": 9.187737078311243e-6,
          "hourly_rmse": 0.006917748320849109,
          "hourly_max_abs_diff": 0.055085340998516585,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.01715928952747438,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.00001471839448921266,
            -0.000036020061033556875,
            -0.00003072651479274541,
            0.00002694476891838945,
            0.00006750861758643261,
            0.00005094045394746398,
            -0.000016508386923459254,
            -0.0000402834677873555,
            8.149917259368493e-6,
            0.00005665171191629233,
            0.000023697365175746948,
            0.00001392061792678406
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 9.187737078311243e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.01715928952747438,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0006050419499840897
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.006917748320849109
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.000437361679508498
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 9.192225382126339e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001453934002026245
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4139.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4170,
          "annual_bias_pct": 0.2276509638029093,
          "hourly_rmse": 13.691141321343787,
          "hourly_max_abs_diff": 40.56715227771929,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 124.6384876583956,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.22853113350223817,
            0.23693405212516072,
            0.2514183311838468,
            0.24216672986507576,
            0.2048403271326129,
            0.17417406185792697,
            0.17895074025267868,
            0.20585456506802915,
            0.22756285550624317,
            0.2757845786497072,
            0.25726532809144564,
            0.20508869526482462
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2276509638029093,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.2757845786497072,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.7320144314283055
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 13.691141321343787
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.395786908905354
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.22764950364292336
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.29981198666539605
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1891.3909563999953,
        "engine_poa_kwh_m2": 1891.3914685163613,
        "oracle_ac_kwh": 18100.491962699958,
        "engine_ac_kwh": 18141.364192566343,
        "ac_bias_pct": 0.2258072871754612
      },
      "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": 0.000027983334797470624,
          "hourly_rmse": 0.011129861143484998,
          "hourly_max_abs_diff": 0.17046316721584276,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.08052248023215186,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.854869433708923e-6,
            -1.2348759819654575e-6,
            -0.000016459290106369177,
            -0.000029061694589417228,
            -0.00002970209327884834,
            -0.000010431349709002786,
            0.000018476027889354682,
            0.00004320411674456438,
            0.00003105475135830554,
            0.0001419417830217962,
            0.0001721064879509493,
            0.000015161114322592215
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000027983334797470624,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.08052248023215186,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.001053946939259278
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.011129861143484998
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.0012870774358154954
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.00002800049873052813
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00024213124567881895
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4072.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_balikpapan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4082,
          "annual_bias_pct": 0.22580728717579213,
          "hourly_rmse": 12.864028976843453,
          "hourly_max_abs_diff": 37.42681145983261,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 1007.6314995414574,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.20509325513287385,
            0.2326080529543279,
            0.24351080026659683,
            0.22429143594970566,
            0.22451488626268798,
            0.2094665015868193,
            0.21005293148933638,
            0.23520396110124012,
            0.2522593403209581,
            0.2551833237033989,
            0.20129697108293024,
            0.19279899535036377
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.22580728717579213,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.2551833237033989,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.4681704925214207
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 12.864028976843453
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.010347833094215
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.2257520952408156
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.2901079506108749
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1891.3909563999953,
        "engine_poa_kwh_m2": 1891.3914685163613,
        "oracle_ac_kwh": 21728.151330000048,
        "engine_ac_kwh": 21742.67615006305,
        "ac_bias_pct": 0.06684793309105332
      },
      "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": 0.000027985115910424353,
          "hourly_rmse": 0.013356357180442008,
          "hourly_max_abs_diff": 0.20457580065897218,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.08053042443273464,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.831590670580367e-6,
            -1.297444533885097e-6,
            -0.000016472970287293017,
            -0.00002899013906824904,
            -0.00002968725510167986,
            -0.00001043019409879883,
            0.0000185073073799051,
            0.00004315797262503678,
            0.0000310713445771455,
            0.00014191407846429817,
            0.0001721403743152936,
            0.000015152236494706658
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000027985115910424353,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.08053042443273464,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0012646290092485444
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.013356357180442008
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.00154438486795981
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000027998539773502088
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0002421407419251128
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4072.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_balikpapan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4103,
          "annual_bias_pct": 0.06684793309131586,
          "hourly_rmse": 5.256003498903649,
          "hourly_max_abs_diff": 19.047275880746383,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 1544.9836700009714,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.06488843455496544,
            0.07163964170807328,
            0.07808975822676963,
            0.0727931232753909,
            0.07228960471006891,
            0.06335305693374273,
            0.06029185792624578,
            0.06301918642524394,
            0.06721075658218083,
            0.06992242602086501,
            0.057768667940234775,
            0.05679322826437381
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.06684793309131586,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.07808975822676963,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 1.227951915116147
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 5.256003498903649
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 3.5396754819183673
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.06684088435199162
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.09925088438714233
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1870.4996863999977,
        "engine_poa_kwh_m2": 1870.4997476147175,
        "oracle_ac_kwh": 17883.336502099977,
        "engine_ac_kwh": 17923.651339007338,
        "ac_bias_pct": 0.22543241247306708
      },
      "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": 3.065931145841083e-6,
          "hourly_rmse": 0.006668141821244207,
          "hourly_max_abs_diff": 0.11976682981213571,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.04334354184338186,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.311736571635486e-6,
            -0.000029224236684474937,
            -0.00003473811133782881,
            -0.000010313506932871144,
            1.34257598987254e-6,
            -7.43656709995111e-7,
            -0.000010508644747221231,
            -0.00001178893096765648,
            0.000015805247173835265,
            0.00009129694158423785,
            9.895088551969196e-6,
            -1.081462165869707e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 3.065931145841083e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.04334354184338186,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0005614137636702595
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.006668141821244207
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.00013919225984027688
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 3.069064568654174e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00014702655036871482
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4078.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4102,
          "annual_bias_pct": 0.22543241247342188,
          "hourly_rmse": 12.745616226232972,
          "hourly_max_abs_diff": 38.50766914292035,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 142516.34682727544,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.2301030200872734,
            0.25084549413057605,
            0.24530771958804512,
            0.21025437428791516,
            0.20002791856290492,
            0.18455016610750072,
            0.18736482158995552,
            0.2158565267680114,
            0.24554027811353218,
            0.26581401298802837,
            0.21813745175879337,
            0.21675305594699976
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.22543241247342188,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.26581401298802837,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.44700636090586
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 12.745616226232972
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 9.826727766680309
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.22540110059545798
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.29235326279225526
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1950.6083177000025,
        "engine_poa_kwh_m2": 1950.6080619800075,
        "oracle_ac_kwh": 18435.19099410004,
        "engine_ac_kwh": 18481.195131816577,
        "ac_bias_pct": 0.24954521887654582
      },
      "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": -0.000013887090190887264,
          "hourly_rmse": 0.007968084267334814,
          "hourly_max_abs_diff": 0.10149839079531375,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.04005284328210977,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000040669394944058475,
            -0.000045429116867650805,
            -0.00006619411341280563,
            -0.00006226304590097705,
            -0.00001223133141609161,
            -9.833112521701085e-7,
            -6.687565977876906e-8,
            0.000014634514802715486,
            0.0000452807166144623,
            0.000023517040684407664,
            -0.00003725121708850294,
            -0.000015564954622313702
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013887090190887264,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.04005284328210977,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.000582929969676107
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.007968084267334814
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.0006237228072543445
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -0.000013889044366473313
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00017743310749206276
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4249.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_cikarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4268,
          "annual_bias_pct": 0.24954521887706724,
          "hourly_rmse": 14.372190711791445,
          "hourly_max_abs_diff": 42.785237032732766,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 86.63087975967204,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.20649603294692526,
            0.19906565133413026,
            0.24728388047465905,
            0.24897473419805433,
            0.25397305950921456,
            0.2467161478242936,
            0.26022199102017146,
            0.27899747882503473,
            0.30411230269219247,
            0.2423359201474038,
            0.2419890479554455,
            0.22452883209023616
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.24954521887706724,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.30411230269219247,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.9350738556081923
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 14.372190711791445
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.778851386276706
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.24954521887704906
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.3327359612252304
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1950.6083177000025,
        "engine_poa_kwh_m2": 1950.6080619800075,
        "oracle_ac_kwh": 22092.138274800043,
        "engine_ac_kwh": 22109.235110516216,
        "ac_bias_pct": 0.07738877741714449
      },
      "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": -0.00001387643542844268,
          "hourly_rmse": 0.009561572106871486,
          "hourly_max_abs_diff": 0.12185806895439555,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.04007256615297451,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.00004065370186778001,
            -0.00004533104805442353,
            -0.00006616520018659304,
            -0.00006231549013854599,
            -0.000012263346521547682,
            -9.348232112045078e-7,
            1.8816746906111534e-8,
            0.000014715873296303425,
            0.0000453121084878277,
            0.000023425152781325684,
            -0.000037286273725521,
            -0.00001562097628689626
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.00001387643542844268,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.04007256615297451,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0006996239514824758
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.009561572106871486
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.0007479354788457957
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -0.000013879174275753104
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001774307134436789
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4249.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_cikarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4269,
          "annual_bias_pct": 0.07738877741717941,
          "hourly_rmse": 6.26651477934262,
          "hourly_max_abs_diff": 20.908871070354508,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 16.305487179124285,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.05842239385223971,
            0.04888040997561092,
            0.07352578088891058,
            0.07897571321417643,
            0.09279356601650299,
            0.07977208291918439,
            0.08132415001215382,
            0.09252515262491878,
            0.0791445088815046,
            0.07619371776564092,
            0.08033826514008922,
            0.07189400266300358
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.07738877741717941,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.09279356601650299,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 1.4680454719326979
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 6.26651477934262
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 4.004880701858767
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.07738877741742642
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.12109172620709469
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1863.4455491000028,
        "engine_poa_kwh_m2": 1863.445368756023,
        "oracle_ac_kwh": 17608.170525499943,
        "engine_ac_kwh": 17649.91644167552,
        "ac_bias_pct": 0.23708264362342496
      },
      "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": -9.858243279989247e-6,
          "hourly_rmse": 0.013074412635105621,
          "hourly_max_abs_diff": 0.132709178135201,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0494180388074956,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -1.9746374821391666e-6,
            -0.00001364099787689469,
            -0.00007759030695978944,
            -0.00017060030194316416,
            -0.00013841489638734394,
            -0.000010173362568081785,
            4.0776794276296505e-8,
            0.000038280720685841584,
            0.00006577330193681834,
            0.00002805005547257454,
            0.00007542624933275473,
            0.000034682387721259806
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -9.858243279989247e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.0494180388074956,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0011224770444497841
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.013074412635105621
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.000423988471397796
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -9.857731904700204e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0003039800920609799
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4238.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4267,
          "annual_bias_pct": 0.2370826436230967,
          "hourly_rmse": 13.008161387133436,
          "hourly_max_abs_diff": 41.80234230629685,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 247.80857840719452,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.22285146970988864,
            0.20428353460168872,
            0.24082300026609404,
            0.22519451474832308,
            0.2188986694704598,
            0.20522975660633985,
            0.21768817928086076,
            0.24467608905844487,
            0.28642692133692504,
            0.24385414512504724,
            0.2583980481005025,
            0.2471906811226685
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2370826436230967,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.28642692133692504,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.5536376133351095
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 13.008161387133436
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 9.783434772783107
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.2370826436227976
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.31522766410352226
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1950.6083177000025,
        "engine_poa_kwh_m2": 1950.6080619800075,
        "oracle_ac_kwh": 18401.21296879999,
        "engine_ac_kwh": 18447.274297049098,
        "ac_bias_pct": 0.25031680426287983
      },
      "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": -0.000013892175946040688,
          "hourly_rmse": 0.007962480355148283,
          "hourly_max_abs_diff": 0.10147721603846094,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.040062889581018224,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.00004042788780374242,
            -0.00004513875924894128,
            -0.00006614343150259876,
            -0.00006230783461180495,
            -0.000012250701661377137,
            -9.779183869831725e-7,
            2.080576337235497e-8,
            0.000014758955634281177,
            0.00004538706810592838,
            0.000023524397153362823,
            -0.00003737910461352484,
            -0.000015558052155542942
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -0.000013892175946040688,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.040062889581018224,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0005825266886499355
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.007962480355148283
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.0006228305167102516
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -0.000013894583406017062
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00017763315130695352
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4249.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4268,
          "annual_bias_pct": 0.25031680426266434,
          "hourly_rmse": 14.393083278588051,
          "hourly_max_abs_diff": 42.994044270861195,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 87.15178066046866,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.2042137524862659,
            0.1962907469571761,
            0.24662161564265309,
            0.24932311749675298,
            0.25574232240668765,
            0.2474592868067613,
            0.26188594694394285,
            0.28099304469074127,
            0.3055999794169448,
            0.24560732190837842,
            0.24394411688422687,
            0.22508167654983965
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.25031680426266434,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.3055999794169448,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.9417647893567733
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 14.393083278588051
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.792251229871077
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.2503168042627876
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.33383494630038973
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1938.8809661000012,
        "engine_poa_kwh_m2": 1938.8812152446135,
        "oracle_ac_kwh": 18331.4787522,
        "engine_ac_kwh": 18376.93779922503,
        "ac_bias_pct": 0.24798352407644111
      },
      "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": 0.00001392868376402409,
          "hourly_rmse": 0.006915794377673507,
          "hourly_max_abs_diff": 0.09621409893929922,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.033351512566790115,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000013670863885889063,
            -2.6025902524343083e-8,
            -2.256378298602745e-8,
            1.6362233834085052e-8,
            -9.985759751937536e-8,
            1.152437945854763e-8,
            -5.77966136213183e-8,
            -6.19149010126995e-8,
            -0.000024814725721923182,
            0.00004786610347174627,
            0.00009712672419751805,
            0.00007386901912025966
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.00001392868376402409,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.033351512566790115,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0005895270841992466
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.006915794377673507
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.0006433350348462797
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000014403119431143548
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.000154832252228675
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4248.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4266,
          "annual_bias_pct": 0.24798352407631397,
          "hourly_rmse": 14.207562409903925,
          "hourly_max_abs_diff": 42.64020005124621,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 82.39594281924927,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.20559300607653075,
            0.19773937353514703,
            0.245102325341084,
            0.24655326311820341,
            0.2516860706898963,
            0.2452153968644415,
            0.2585686982792286,
            0.2770314463087506,
            0.3022384837767126,
            0.2410238267211686,
            0.24151426166496046,
            0.22457740390957856
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.24798352407631397,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.3022384837767126,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.887032639713692
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 14.207562409903925
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.656024358186762
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.24798108503150157
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.3306305075545325
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1935.9730565999964,
        "engine_poa_kwh_m2": 1935.9730548934285,
        "oracle_ac_kwh": 18308.295825299992,
        "engine_ac_kwh": 18353.540117196277,
        "ac_bias_pct": 0.24712454030681422
      },
      "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": -1.6306153374543404e-8,
          "hourly_rmse": 0.000028638472478038677,
          "hourly_max_abs_diff": 0.000049987038892140845,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0000373560976929211,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -6.236457326370243e-9,
            -2.077313044509537e-8,
            -5.058820646156743e-8,
            3.194203964517837e-8,
            1.0052921272629322e-8,
            -2.807570807244876e-8,
            3.396114476940327e-8,
            -2.372315362798057e-8,
            -1.6321669245194064e-8,
            -8.123545893006283e-8,
            4.660903704330135e-9,
            -5.5716442285715816e-8
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -1.6306153374543404e-8,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.0000373560976929211,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 5.864897443943132e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.000028638472478038677
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -6.084369994776834e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.3645541852180617e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.422809183482817e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4250.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4268,
          "annual_bias_pct": 0.2471245403070549,
          "hourly_rmse": 14.127892903558315,
          "hourly_max_abs_diff": 42.56505116502922,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 81.49152408677024,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.20637467879940735,
            0.1982041592255247,
            0.24492709845403454,
            0.24532656175789688,
            0.24965773797776636,
            0.24295850893592802,
            0.25632369439211705,
            0.27527811337318836,
            0.3017191495807593,
            0.24114066378147364,
            0.24214227118099008,
            0.22489068296263431
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2471245403070549,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.3017191495807593,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.8635660905598996
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 14.127892903558315
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.60071339814683
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.24712209817348918
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.32934713032690943
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1890.9277849999976,
        "engine_poa_kwh_m2": 1890.9279791129904,
        "oracle_ac_kwh": 18029.168781700006,
        "engine_ac_kwh": 18071.33748953685,
        "ac_bias_pct": 0.23389158062376747
      },
      "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": 0.000011057042914276036,
          "hourly_rmse": 0.007618481949572804,
          "hourly_max_abs_diff": 0.08083650129225362,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.026152089618540715,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -6.419587156636051e-6,
            -9.39416406658595e-6,
            -0.000022735060664054568,
            -0.00003567586740047555,
            -0.000060167951327456374,
            -0.000032441631519860714,
            0.00002017613669412931,
            0.000048919701920308495,
            0.0000819198802860827,
            0.00006249999150360715,
            6.703989751349651e-6,
            0.00002952416012448307
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000011057042914276036,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.026152089618540715,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0007316811577276803
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.007618481949572804
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.0004993141843448682
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000011057692834994878
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00016871708416988182
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4131.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_makassar",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4133,
          "annual_bias_pct": 0.2338915806236589,
          "hourly_rmse": 13.537398896201534,
          "hourly_max_abs_diff": 40.28852494526109,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 12.129379113994199,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.190584654538593,
            0.2071980021065967,
            0.2181164204212327,
            0.2198526369660576,
            0.22488094498007172,
            0.2174301634117603,
            0.24894016037394795,
            0.26893139241102426,
            0.28200227264569827,
            0.2480695078254323,
            0.23546182440133495,
            0.18947930415011033
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2338915806236589,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.28200227264569827,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.6589823641878416
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 13.537398896201534
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.202929551622717
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.2338915806238324
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.31033083286008983
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1890.9277849999976,
        "engine_poa_kwh_m2": 1890.9279791129904,
        "oracle_ac_kwh": 21593.902874400083,
        "engine_ac_kwh": 21607.65930953689,
        "ac_bias_pct": 0.06370518204524127
      },
      "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": 0.000011059543857853335,
          "hourly_rmse": 0.009142327271573979,
          "hourly_max_abs_diff": 0.09700380155067023,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.026152089618531514,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -6.396890680849244e-6,
            -9.413309524372995e-6,
            -0.00002258515280563341,
            -0.00003561553671910031,
            -0.00006013577555952136,
            -0.0000325427788515051,
            0.000020124422357348608,
            0.000048963752605521935,
            0.00008190346377640639,
            0.00006247132758634192,
            6.684976696544118e-6,
            0.000029483881176004738
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.000011059543857853335,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.026152089618531514,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0008777632760343412
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.009142327271573979
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.0005992786915067641
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000011059569140250415
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001687198326851041
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4131.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_makassar",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4134,
          "annual_bias_pct": 0.06370518204538292,
          "hourly_rmse": 5.23457158449751,
          "hourly_max_abs_diff": 19.324251218236896,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 22.068961496526963,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.044930923876667826,
            0.047977232538806903,
            0.0598883018877929,
            0.060644699785825755,
            0.07563440814510214,
            0.0712678992372573,
            0.07971425895455135,
            0.07169888364857445,
            0.05591300258586818,
            0.06618798425375137,
            0.0701253106756607,
            0.043819460988930824
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.06370518204538292,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.07971425895455135,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 1.200021236602266
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 5.23457158449751
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 3.32763307616307
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.06370518204546806
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.10021217126046694
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1818.4399421999974,
        "engine_poa_kwh_m2": 1818.440346003095,
        "oracle_ac_kwh": 17314.121354099978,
        "engine_ac_kwh": 17353.01169588769,
        "ac_bias_pct": 0.22461631746910787
      },
      "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": 0.00002328718295879138,
          "hourly_rmse": 0.00731665958318892,
          "hourly_max_abs_diff": 0.09821162762250424,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.03825954845543964,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -2.3157353791632497e-6,
            -0.000018588290709407765,
            -0.00002017873135977746,
            -6.788154549759904e-6,
            0.00002437895086702432,
            0.000019247335188251386,
            -0.00001286032035499772,
            -0.000017050068206311212,
            0.00006876798688565135,
            0.00009363589413685537,
            0.00008563634782128075,
            8.831342415289457e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.00002328718295879138,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.03825954845543964,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0008050075509962846
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.00731665958318892
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.0010107047679719767
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.000023290656078960835
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.000168604925393615
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4129.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4133,
          "annual_bias_pct": 0.22461631746908045,
          "hourly_rmse": 12.49612302436924,
          "hourly_max_abs_diff": 40.15177876332382,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 19.464648392394242,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.20394743317682174,
            0.2174355206232711,
            0.21345483950111335,
            0.2027287912503439,
            0.19535417019141088,
            0.18620591335629294,
            0.20980989212470025,
            0.2377493980558008,
            0.26831575936494895,
            0.2522930917826156,
            0.2542551067990555,
            0.2049834492343448
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.22461631746908045,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.26831575936494895,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.371876958496249
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 12.49612302436924
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 9.409712506088422
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.22461631746882857
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.2982910619803887
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1740.0032769999943,
        "engine_poa_kwh_m2": 1740.0032754099739,
        "oracle_ac_kwh": 16659.231385700055,
        "engine_ac_kwh": 16695.88781215807,
        "ac_bias_pct": 0.22003672083863818
      },
      "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": -1.1751829490881107e-8,
          "hourly_rmse": 0.000029175708695191745,
          "hourly_max_abs_diff": 0.00004998788381271879,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.000040337460323867305,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -3.173987694809127e-8,
            2.5784814318705063e-8,
            -5.7295135268262446e-8,
            -7.156760618709119e-9,
            -3.4662133853677235e-8,
            4.5109356176005616e-8,
            3.8535706741324844e-8,
            -7.740605506609508e-8,
            7.182584106884902e-9,
            -4.195796239499368e-8,
            -6.899463604514662e-8,
            7.863333476475387e-8
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -1.1751829490881107e-8,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.000040337460323867305,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 6.862222669460806e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.000029175708695191745
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -6.777845475110292e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.6013820969077077e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.893260954479686e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4073.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_medan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4166,
          "annual_bias_pct": 0.2200367208384841,
          "hourly_rmse": 11.661381198454354,
          "hourly_max_abs_diff": 39.927403551402676,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 902.9622459421308,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.23809073322022728,
            0.24338584248857018,
            0.2365009299935832,
            0.22369528548367273,
            0.2084887060906205,
            0.20938864833145665,
            0.21669018220867123,
            0.22646815114881527,
            0.21600356824801667,
            0.21109089193746838,
            0.2017538481358207,
            0.19545407447342525
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2200367208384841,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.24338584248857018,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.087790997170992
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 11.661381198454354
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 8.794110929989303
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.21991570490931087
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.2916179801335976
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1740.0032769999943,
        "engine_poa_kwh_m2": 1740.0032754099739,
        "oracle_ac_kwh": 20024.775278100024,
        "engine_ac_kwh": 20038.345782274337,
        "ac_bias_pct": 0.06776857161116011
      },
      "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": 6.891209740464778e-9,
          "hourly_rmse": 0.000028979897238315686,
          "hourly_max_abs_diff": 0.000049994472192338435,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00003421958566497525,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            2.892995513530902e-9,
            -4.813224761617603e-8,
            -2.5924649144495055e-8,
            1.2122469819770963e-8,
            6.21233037473778e-8,
            2.028126464648523e-8,
            -1.75848123348304e-8,
            4.935894283648784e-8,
            1.57567377751889e-8,
            2.0263685079109712e-8,
            3.7387004831048255e-8,
            -3.892643879446757e-8
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 6.891209740464778e-9,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.00003421958566497525,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 5.775494165393491e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.000028979897238315686
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 6.070716097054269e-8
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 1.195258890479366e-9
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 5.70583095395996e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4073.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_medan",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4201,
          "annual_bias_pct": 0.06776857161150165,
          "hourly_rmse": 5.084057074807594,
          "hourly_max_abs_diff": 17.874542406623732,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 630.1447429056053,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.07976316258870206,
            0.07129238639511185,
            0.07331906041753058,
            0.07160750547461818,
            0.06864395773788409,
            0.06872818562735701,
            0.07258861376240308,
            0.06843527541156463,
            0.06479308276280353,
            0.06093566980469493,
            0.05632441713485151,
            0.05017316062820605
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.06776857161150165,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.07976316258870206,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 1.150934026854591
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 5.084057074807594
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 3.2295092904001668
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.06775191401927368
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.10665849416360187
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1721.496508700002,
        "engine_poa_kwh_m2": 1721.4965095236773,
        "oracle_ac_kwh": 16483.80353040001,
        "engine_ac_kwh": 16519.975398508373,
        "ac_bias_pct": 0.21943884517704104
      },
      "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": -6.805940597237408e-9,
          "hourly_rmse": 0.000029139171438582494,
          "hourly_max_abs_diff": 0.00004998703661840409,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00003938960379172488,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            5.4750553975426e-8,
            -2.4170564104965344e-8,
            1.3911410162466607e-8,
            1.4697661823749606e-8,
            4.2581618924942106e-8,
            -3.239562659991805e-8,
            3.8567704697741296e-9,
            -5.812553383947173e-8,
            -5.7846198545091565e-9,
            -1.7511177223534004e-8,
            -2.0552536821614722e-8,
            -7.329460196521954e-8
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -6.805940597237408e-9,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.00003938960379172488,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 5.085032869031865e-7
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.000029139171438582494
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -4.832003749974024e-7
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -1.1595157915724673e-8
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 6.992405466687696e-7
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4094.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4188,
          "annual_bias_pct": 0.2194388451775374,
          "hourly_rmse": 11.558826008291888,
          "hourly_max_abs_diff": 38.794064750676625,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 4290.728819744715,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.20505422694266995,
            0.22107841599122383,
            0.23013410886760535,
            0.23371195226091776,
            0.2304536112970877,
            0.23491932105280236,
            0.23808183259838356,
            0.23956742017941574,
            0.215204084312551,
            0.19857796958209878,
            0.18155037337387114,
            0.1741787405104431
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2194388451775374,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.23956742017941574,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.0792059969860874
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 11.558826008291888
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 8.635299169094088
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.21939495246634036
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.2936722900964575
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1958.3484921000006,
        "engine_poa_kwh_m2": 1958.348408268899,
        "oracle_ac_kwh": 18529.31030050002,
        "engine_ac_kwh": 18575.610223462543,
        "ac_bias_pct": 0.24987396838658604
      },
      "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": -4.720255551457931e-6,
          "hourly_rmse": 0.005409097324106252,
          "hourly_max_abs_diff": 0.05513703712847473,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.00862635213136454,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -4.7849773145061475e-6,
            -0.000012998390037782382,
            -0.00004025498196736776,
            -0.00004456520975704441,
            -0.000036789662502016994,
            -6.194709766985536e-6,
            -5.347627565120936e-7,
            0.000023558872690444842,
            0.000039287772941337784,
            9.882816155962972e-6,
            -1.3335925780560763e-6,
            3.8614738329659625e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.720255551457931e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.00862635213136454,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.00042646994424482053
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.005409097324106252
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.00021433448749016968
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.723724335428057e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00011921126162093427
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4226.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_semarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4329,
          "annual_bias_pct": 0.2498739683868683,
          "hourly_rmse": 14.305950601867217,
          "hourly_max_abs_diff": 41.34522541491424,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 18428.99756737494,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.21222465135810886,
            0.18409336044298746,
            0.23784943405829856,
            0.23881886839120575,
            0.2617925741449267,
            0.25338473814775964,
            0.25513716079640886,
            0.2871472094537173,
            0.29813072455174017,
            0.27373351765921994,
            0.22422745660554813,
            0.20872664789173698
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2498739683868683,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.29813072455174017,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 4.011313051851202
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 14.305950601867217
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.69114113955933
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.2497769708778821
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.33422971039462795
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1958.3484921000006,
        "engine_poa_kwh_m2": 1958.348408268899,
        "oracle_ac_kwh": 22186.490392100037,
        "engine_ac_kwh": 22202.726047359207,
        "ac_bias_pct": 0.07317811412367889
      },
      "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": -4.7250332251268265e-6,
          "hourly_rmse": 0.00648997432857412,
          "hourly_max_abs_diff": 0.06610444455429842,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.008633377791543578,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -4.809915967932159e-6,
            -0.000012911269254428036,
            -0.00004025916884904624,
            -0.000044485337926853504,
            -0.00003681877331536951,
            -6.1394428376126304e-6,
            -5.994374153094935e-7,
            0.000023580163546963805,
            0.0000392502574742754,
            9.855758993122273e-6,
            -1.379287462333705e-6,
            3.822885046058281e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.7250332251268265e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.008633377791543578,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0005115124920868592
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.00648997432857412
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.00025749953926779747
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.729200194586767e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00011919395252057524
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4226.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_semarang",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4361,
          "annual_bias_pct": 0.07317811412386188,
          "hourly_rmse": 5.8936342485917255,
          "hourly_max_abs_diff": 20.650084514350965,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 1759.826720284305,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.05969968951129767,
            0.03772392875827881,
            0.06528478807634343,
            0.08103346707577297,
            0.07793925780220166,
            0.08679694622837848,
            0.07870267003106983,
            0.07540705083301513,
            0.07899216077048261,
            0.08173459986728357,
            0.0745219640079741,
            0.058925629220812056
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.07317811412386188,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.08679694622837848,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 1.4102051455317284
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 5.8936342485917255
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 3.722335213069382
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.07316661435544447
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.11584589767861751
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1844.8995695000028,
        "engine_poa_kwh_m2": 1844.8997082222447,
        "oracle_ac_kwh": 17478.16182580004,
        "engine_ac_kwh": 17519.11655177696,
        "ac_bias_pct": 0.2343194117613813
      },
      "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": 7.942787793493388e-6,
          "hourly_rmse": 0.006824234252239841,
          "hourly_max_abs_diff": 0.06253682442729769,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.0188277422062258,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -4.322242206235536e-6,
            -0.000016105100317152886,
            -0.0000353636935546975,
            -0.000021546024757275443,
            -0.00003259013187175882,
            -0.000022223730407064367,
            0.00003339935963639627,
            0.00005552742535937648,
            0.00002679473639229905,
            0.00004092195781020033,
            0.00003601820818845433,
            7.69887907905435e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.942787793493388e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.0188277422062258,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0004989050037328248
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.006824234252239841
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.00034353360876205805
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.951389526195025e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00015795294368169038
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4187.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4276,
          "annual_bias_pct": 0.23431941176140794,
          "hourly_rmse": 12.714168880622738,
          "hourly_max_abs_diff": 41.21319522874364,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 313.8015295193792,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.22895858888478202,
            0.1878654423903155,
            0.2300241098659919,
            0.21645987287633997,
            0.21672650802632962,
            0.20447937057645862,
            0.21343663430481516,
            0.2513494977602942,
            0.2796733036553235,
            0.27606240570869367,
            0.24088663720185996,
            0.2261607741484931
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.23431941176140794,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.2796733036553235,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.5125472089415473
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 12.714168880622738
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 9.574029785925491
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.23422686992282432
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.311049792737883
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2054.9974431999935,
        "engine_poa_kwh_m2": 2054.99735175928,
        "oracle_ac_kwh": 19339.66179590003,
        "engine_ac_kwh": 19388.07779193396,
        "ac_bias_pct": 0.2503456189921338
      },
      "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": -4.801393503455407e-6,
          "hourly_rmse": 0.007528752314242921,
          "hourly_max_abs_diff": 0.09011691346722728,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.006952887417186509,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            8.208107750434414e-6,
            6.691048647787392e-7,
            -0.00002854120461780783,
            -0.00004944683832863926,
            -0.00007144145979060676,
            -0.000019741268071411003,
            0.000011823553966011257,
            0.00003988051596194069,
            0.00004855109165602381,
            8.857435192555243e-6,
            -0.000018910185797942326,
            -3.0150096655725584e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.801393503455407e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.006952887417186509,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0005835769659371856
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.007528752314242921
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.00023401779768397415
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.802996557287292e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00015452060400470048
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4104.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_surabaya",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4181,
          "annual_bias_pct": 0.25034561899175817,
          "hourly_rmse": 15.04701618995302,
          "hourly_max_abs_diff": 41.29172579699298,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 400.89256430235434,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.21744443580128345,
            0.2296631809742984,
            0.24563877162180203,
            0.23371237109793067,
            0.25055837591056007,
            0.2485955920747713,
            0.2688790119522233,
            0.2655321620313018,
            0.30494771004976357,
            0.24537789074584784,
            0.2679903485232652,
            0.19476894213429083
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.25034561899175817,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.30494771004976357,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 4.12647057662838
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 15.04701618995302
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 11.576189751736969
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.2502631631452469
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.3252982154193137
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 2054.9974431999935,
        "engine_poa_kwh_m2": 2054.99735175928,
        "oracle_ac_kwh": 23153.921259499963,
        "engine_ac_kwh": 23171.82499051544,
        "ac_bias_pct": 0.07732483329635703
      },
      "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": -4.8058911405245654e-6,
          "hourly_rmse": 0.009034487903465567,
          "hourly_max_abs_diff": 0.10822029616088003,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.006948844480363435,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            8.208107732105306e-6,
            7.361551852858967e-7,
            -0.000028539199318442287,
            -0.00004945486118837325,
            -0.00007143572671889857,
            -0.00001977923289579882,
            0.000011783790563018705,
            0.00003993546642525777,
            0.00004851212858342954,
            8.880489571922523e-6,
            -0.000018953583925407494,
            -3.0315036774747258e-6
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": -4.8058911405245654e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.006948844480363435,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0007003414963063542
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.009034487903465567
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": -0.00028115274122595047
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": -4.8086643461450885e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.00015452034960655077
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4104.0
            }
          ]
        },
        {
          "verdict": "PASS",
          "gate": {
            "gated": true,
            "ci_test": "oracle_ac_surabaya",
            "reason": null,
            "pending_issue": null
          },
          "stage": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4220,
          "annual_bias_pct": 0.0773248332964019,
          "hourly_rmse": 6.514436232838896,
          "hourly_max_abs_diff": 20.078466218830727,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 167.90424498062512,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.06686059458122934,
            0.07868449159470141,
            0.0785789704583986,
            0.07222796260531995,
            0.09155919879350384,
            0.08736103893582486,
            0.07492820247118334,
            0.08820754103237335,
            0.06743414297995928,
            0.0808552817714757,
            0.1051143897236475,
            0.028591426421592687
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.0773248332964019,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.1051143897236475,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 1.5474671087288339
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 6.514436232838896
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 4.241928667871131
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.07731277470364328
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.11873116693484789
            },
            {
              "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": "keluaran inverter: kurva efisiensi OND/Sandia pada (P_dc, V_dc), atau efisiensi datar tanpa karakterisasi"
      },
      "annual": {
        "oracle_poa_kwh_m2": 1949.971626999999,
        "engine_poa_kwh_m2": 1949.9717642115927,
        "oracle_ac_kwh": 18400.069566500017,
        "engine_ac_kwh": 18443.725139722792,
        "ac_bias_pct": 0.23725765310288038
      },
      "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": 7.347573747808955e-6,
          "hourly_rmse": 0.006926052342887229,
          "hourly_max_abs_diff": 0.06421210361122576,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 0.010084640599043702,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            -0.000017170922323117156,
            -0.00004233076630836359,
            -0.000026077592760771007,
            -3.704678922393381e-6,
            0.00003101944070905435,
            -3.1151329782884224e-6,
            2.7989580552598115e-6,
            5.205024571969382e-6,
            0.000010120577377841279,
            0.000039888279616985614,
            0.00005657560942024619,
            0.000016793287679905752
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 7.347573747808955e-6,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "hourly_max_rel_diff",
              "unit": "%",
              "value": 0.010084640599043702,
              "tolerance": 0.5,
              "tolerance_key": "dc_power.hourly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 0.0004665244367702344
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 0.006926052342887229
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 0.00034020665576721556
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 7.34985493459958e-6
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.0001496310525579384
            },
            {
              "name": "hourly_pass_fraction",
              "unit": "fraction",
              "value": 1.0
            },
            {
              "name": "hours_compared",
              "unit": "hours",
              "value": 4112.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": "ac",
          "engine_column": "ac_power",
          "oracle_column": "p_ac",
          "engine_status": "modeled",
          "pending_issue": null,
          "n_points": 4150,
          "annual_bias_pct": 0.2372576531032029,
          "hourly_rmse": 13.676134106297823,
          "hourly_max_abs_diff": 40.816652526846156,
          "hourly_max_abs_diff_azimuth": null,
          "hourly_max_rel_diff_pct": 5200.080783244231,
          "hourly_pass_fraction": 1.0,
          "monthly_bias_pct": [
            0.23390806815791532,
            0.23570674931674324,
            0.23651959969384542,
            0.2141162761036045,
            0.2141818802420916,
            0.20631042746721467,
            0.21970743618859156,
            0.22888880569459116,
            0.28312975089492,
            0.24850780033895234,
            0.292307579442819,
            0.20222987462234454
          ],
          "within_tolerance": true,
          "metrics": [
            {
              "name": "annual_bias",
              "unit": "%",
              "value": 0.2372576531032029,
              "tolerance": 1.0,
              "tolerance_key": "ac_power.annual_max_rel_diff_pct",
              "within_tolerance": true
            },
            {
              "name": "monthly_bias_max_abs",
              "unit": "%",
              "value": 0.292307579442819,
              "tolerance": 1.5,
              "tolerance_key": "ac_power.monthly_max_rel_diff_pct",
              "within_tolerance": true
            }
          ],
          "informational": [
            {
              "name": "monthly_rmse",
              "unit": "kWh",
              "value": 3.7373341725548626
            },
            {
              "name": "hourly_rmse",
              "unit": "W",
              "value": 13.676134106297823
            },
            {
              "name": "hourly_mbe",
              "unit": "W",
              "value": 10.516795588098145
            },
            {
              "name": "hourly_nmbe",
              "unit": "%",
              "value": 0.2371985689123088
            },
            {
              "name": "hourly_nrmse",
              "unit": "%",
              "value": 0.30845511934622455
            },
            {
              "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": 99,
      "PASS": 45
    },
    "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": []
  }
}
