{
  "title": "Microgrid load profile 8,760-hour evidence artifact, version 1",
  "generatedDate": "2026-07-20",
  "evidenceCommit": "b7da228a30045e92d3d1b0a4ca073e6caf50fefc",
  "applicability": "Synthetic screening and CSV-format example for an outpatient clinic load at 5.6 degrees north; not measured site data, a forecast, or a construction design.",
  "generation": {
    "function": "generateBuildingLoad",
    "profile": "Outpatient",
    "targetAnnualKwh": 100000,
    "latitude": 5.6,
    "loadYearConvention": "2017 non-leap calendar; January 1 is Sunday",
    "sourceType": "Local deterministic parametric reference shape, not a downloaded DOE or NLR time series"
  },
  "csv": {
    "filename": "microgrid-load-profile-8760-v1.csv",
    "schema": "One finite, nonnegative hourly-average kW value per row; no header, timestamps, or numeric index column",
    "decimals": 6,
    "sha256": "a7efdf80e9d8d0bf97a6e8d27509b3341553fdf80fc7f7efc95dcf5956d58274",
    "parserWarnings": []
  },
  "qa": {
    "rowCount": 8760,
    "annualKwh": 99999.999938,
    "meanKw": 11.415525,
    "peakKw": 28.325081,
    "minKw": 2.579606,
    "loadFactor": 0.403018,
    "p01Kw": 2.579606,
    "p05Kw": 2.883089,
    "p50Kw": 8.497524,
    "p95Kw": 26.077059,
    "p99Kw": 28.325081,
    "zeroCount": 0,
    "negativeCount": 0,
    "nonfiniteCount": 0,
    "peakRecord": 4402,
    "maxUpRampKw": 7.08127,
    "maxUpRampRecord": 4400,
    "maxDownRampKw": -7.08127,
    "maxDownRampRecord": 4410,
    "monthlyKwh": [
      7167.864165,
      6570.124008,
      7749.742173,
      7534.47164,
      9041.365845,
      9613.047082,
      10400.969745,
      10763.530933,
      8919.972828,
      8095.470036,
      7126.91418,
      7016.527303
    ]
  },
  "reproduction": {
    "command": "npm exec -- tsx tools/generate-load-profile-artifact.ts",
    "engineGuard": "The generator aborts if tracked or untracked src/engine files differ from b7da228a30045e92d3d1b0a4ca073e6caf50fefc.",
    "benchmarkKey": "clinic-small",
    "engineCommit": "b7da228a30045e92d3d1b0a4ca073e6caf50fefc",
    "modelInputs": {
      "site": {
        "name": "Remote clinic (small)",
        "latitude": 5.6,
        "longitude": -0.2,
        "climate": "tropical",
        "albedo": 0.2,
        "utcOffset": 0
      },
      "solarResourceFunction": "generateSolarResource",
      "solarResourcePvSpec": {
        "ratedKw": 50,
        "tiltDeg": 6,
        "azimuthDeg": 180,
        "derate": 0.85,
        "tempCoeff": -0.0037,
        "noct": 45,
        "degradation": 0.005
      },
      "solarResourceSummary": {
        "annualGhiKwhM2": 1566.535833,
        "annualPoaKwhM2": 1567.636669,
        "specificYieldKwhPerKw": 1229.67502,
        "provenance": {
          "source": "synthetic",
          "model": "Hottel clear-sky + AR(1) clearness + Erbs split + isotropic POA + NOCT",
          "climate": "tropical",
          "seedLabel": "Remote clinic (small)|5.6|-0.2|tropical"
        }
      },
      "baseDesign": {
        "pv": {
          "ratedKw": 50,
          "tiltDeg": 6,
          "azimuthDeg": 180,
          "derate": 0.85,
          "tempCoeff": -0.0037,
          "noct": 45,
          "degradation": 0.005
        },
        "battery": {
          "capacityKwh": 50,
          "maxChargeKw": 25,
          "maxDischargeKw": 25,
          "roundTripEff": 0.975,
          "minSoc": 0.2,
          "initialSoc": 0.5,
          "cycleLife": 4000
        },
        "genset": {
          "ratedKw": 30,
          "minLoadRatio": 0.15,
          "fuelInterceptLPerHrPerKw": 0.08,
          "fuelSlopeLPerKwh": 0.25,
          "lifetimeHours": 15000
        },
        "converter": {
          "ratedKw": 45,
          "efficiency": 0.96,
          "lifetimeYears": 15
        },
        "strategy": "load-following"
      },
      "economics": {
        "discountRate": 0.08,
        "inflationRate": 0.02,
        "projectYears": 25,
        "annualLoadGrowth": 0,
        "fuelPricePerL": 1.45,
        "fuelPriceEscalation": 0.02,
        "elecCostEscalation": 0.019,
        "voll": 5,
        "itcFraction": 0.3,
        "pvCapexPerKw": 900,
        "windCapexPerKw": 5776,
        "windOmPerKwYr": 42,
        "batteryCapexPerKwh": 253,
        "gensetCapexPerKw": 880,
        "converterCapexPerKw": 300,
        "bosFixed": 20000,
        "pvOmPerKwYr": 12,
        "batteryOmPerKwhYr": 7,
        "gensetOmPerKwh": 0.02,
        "converterOmPerKwYr": 4,
        "co2PerL": 2.706,
        "noxPerL": 0.0093,
        "so2PerL": 0.00479,
        "pm25PerL": 0,
        "batteryCalendarLifeYears": 15,
        "pvLifeYears": 30,
        "windLifeYears": 20
      },
      "constraints": {
        "maxUnmetFraction": 0,
        "minRenewableFraction": 0,
        "maxExcessFraction": 1
      },
      "baseline": {
        "annualLoadKwh": 99999.99993800034,
        "peakKw": 28.325081,
        "hoursLoadPositive": 8760
      }
    },
    "optimizer": {
      "coarseSearchSpace": {
        "pvKw": [
          0,
          26,
          51,
          77,
          100,
          130,
          150,
          180
        ],
        "batteryKwh": [
          0,
          32,
          65,
          97,
          130,
          160,
          190,
          230
        ],
        "gensetKw": [
          0,
          15,
          30,
          40
        ],
        "windKw": [
          0
        ]
      },
      "coarseCandidateCount": 256,
      "refinementMethod": "Shipped two-pass coordinate refinement over PV kW, battery kWh, genset kW, and battery C-rate; see engine commit.",
      "refinementEvaluationCalls": 71,
      "totalEvaluationCalls": 327,
      "optimizerReportedFeasibleRecords": 113,
      "optimizerReportedFeasibleRecordsDefinition": "Feasible coarse-grid candidates plus the final retained refined incumbent when it differs; the shipped counter does not count every feasible refinement evaluation."
    }
  },
  "sixHourAlignmentSensitivity": {
    "method": "The automatic sampled search was run on the unshifted profile. Its feasible first-pass design was then simulated unchanged against the original profile and the same 8,760 values moved six clock hours later. Annual energy, peak, minimum, percentiles, and load factor are identical. The shifted case was not re-optimized.",
    "search": {
      "coarseCandidateCount": 256,
      "refinementEvaluationCalls": 71,
      "totalEvaluationCalls": 327,
      "optimalityGapProxyPercent": 0.511192,
      "caveat": "Lowest-NPC point found by the shipped sampled and locally refined search, not a continuous global optimum."
    },
    "fixedDesign": {
      "pvKw": 140,
      "batteryKwh": 190,
      "batteryKw": 38,
      "gensetKw": 16.9,
      "converterKw": 126,
      "dispatch": "load-following"
    },
    "originalClock": {
      "feasible": true,
      "violations": [],
      "unmetKwh": 0,
      "unmetFraction": 0,
      "fuelLitres": 791.917769,
      "renewableFraction": 0.978088,
      "curtailedKwh": 70929.314173,
      "gensetHours": 149,
      "gensetStarts": 20,
      "npc": 280737.703171,
      "lcoe": 0.217163
    },
    "movedSixHoursLater": {
      "feasible": false,
      "violations": [
        "Capacity shortage 0.102% exceeds limit 0.00%"
      ],
      "unmetKwh": 82.483,
      "unmetFraction": 0.000825,
      "fuelLitres": 11614.534135,
      "renewableFraction": 0.678445,
      "curtailedKwh": 101669.973226,
      "gensetHours": 2205,
      "gensetStarts": 260,
      "npc": 565241.930575,
      "lcoe": 0.43381
    }
  },
  "limitations": [
    "The load is synthetic and deterministic; it does not contain metered outages, operator interventions, motor starts, subhourly peaks, or forecast uncertainty.",
    "The solar resource is synthetic for the Remote clinic (small) benchmark site; this sensitivity isolates clock alignment inside one screening model.",
    "The fixed-design sensitivity does not prove that either profile would retain the same preferred design after a new capacity search."
  ]
}
