novaWaste2 indicators and their implied methodologies: distillation

Pre-release. This site describes standard version 0.1.0-dev, which is in development and may change before version 1.0.0.

Sweep scope: every number novaWaste2 reports (dashboard screens, scheduled emails, PDF/xlsx reports), traced to the dbt model that produces it, then stated as a candidate indicator with an explicit calculation rule. Entities and activities/choice lists are sibling sweeps (entities.md, activities sweep); generic terms below follow entities.md (Stand = service point, Block = service zone, Waste Site = facility, Waste Picker = collector, Town = service area, Collection Status = service outcome).

Path prefixes, all in ~/novaWaste2: D/ = services/dashboard/, M/ = dbt/models/marts/, I/ = dbt/models/intermediate/, S/ = dbt/models/staging/, MIG/ = db/migrations/, DD = arch/design/dashboard.md. A :n is a line number. Indicator ids (WI-nn) are local to this document.

II conventions applied: one indicator across axis values, not one per breakdown; rates are rolled up by summing numerators and denominators, never by averaging (greeningstandard ADR-0011; novaIndicators ADR-0002); value rows at finest grain, never summed across a required axis (novaIndicators ADR-0016); alongside counts beside the value (ADR-0018); scores and other distributions as kind measure (ADR-0019); a methodology may serve several indicators (greeningstandard ADR-0015); records outside the plan are reported separately (ADR-0020); derived values are derived, never captured (ADR-0023). Result levels: input, activity, output, outcome, impact.

Cross-cutting facts about every figure below:


1. Every reported number

Surfaces: OV Overview, PO Process Overview, MAP Mapping, WC Waste collected, WR Waste collected monthly report (xlsx), SV Service, SE Stand evaluation, MPK WSF meeting pack (PDF), WE weekly email (+xlsx, R charts), MS missed-stands email, FU follow-up email, ES evaluation-sample email, PY Payments, AC Actions.

displayed as source code underlying model computation candidate indicator level unit unit of observation axes seen notes
OV hero “Total waste collected” (month, delta vs previous month) D/screen_overview.go:144; D/page.go:270 (all sites); D/screen_overview.go:21 (one site) M/mart_process_overview.sql:57-61 (kg_weighed); M/mart_daily_progress.sql:82-89 (site) sum of weight_kg by month of collected_on WI-01 waste mass collected output kg weighed quantity month; facility all-sites path reads staging, WC reads mart_collection_weights; equal after a build (DD F.14)
OV hero “Stands collected” (month) D/screen_overview.go:156 M/mart_process_overview.sql:40-47 distinct stands with status collected in a Service Week whose Monday is in the month WI-10 service points collected output count service point month week spanning two months counts in the Monday’s month
OV hero “Stands collected” (site picked, latest Service Week) D/screen_overview.go:149 M/mart_town_overview.sql:59-71 eligible stands with status collected in the town’s newest week_start WI-10 output count service point-week facility; week label switches to weekly when a site is picked
OV chart “Cumulative enrolled Stands and bins placed per month” D/screen_overview.go:164 M/mart_process_overview.sql:22-38 running sum of monthly n_enrolled and n_placed WI-07 service points by lifecycle stage (flow, cumulated) output count service point month; stage n_placed counts current placed stands by last placement month, so a later termination removes a stand from history
OV “Per Waste Site” table: Stands, Eligible, Enrolled, Bins placed, Terminated, Blocks D/screen_overview.go:176-196; D/page.go:246 M/mart_town_overview.sql:26-49; M/mart_stand_eligibility.sql counts per facility, plus Unassigned row and Town total WI-07 lifecycle stock; Blocks = zone count (context) output count service point; zone facility; stage Town total is a sum of site rows (counts only)
OV table “Collected / Un-scanned latest Service Week” D/screen_overview.go:184-185 M/mart_town_overview.sql:59-71 eligible stands per status in newest week WI-10, WI-12 output count service point-week facility
OV table “kg, 30 days” D/screen_overview.go:186 M/mart_town_overview.sql:74-84 kg with collected_on in (as_of−30, as_of] by collection’s facility WI-01 output kg weighed quantity facility; rolling 30 days window baked in at build
PO tiles “Blocks” (+ “Unassigned Blocks”), “Stands” D/screen_process_overview.go:179-180 M/mart_town_overview.sql:41-49 non-retired blocks; all stands WI-07 / zones output count zone; service point facility
PO tile “Empty or non-residential Stands” D/screen_process_overview.go:181; :20 M/mart_stand_eligibility.sql:103-162 stands with occupancy_class in (vacant, non_residential) WI-08 service points by occupancy input (context) count service point facility; occupancy class override: vacant/non-res reads occupied if enrolled and placed after the enumeration (:115-122)
PO donut “of enumerated Stands have bins placed” D/screen_process_overview.go:183 M/mart_town_overview.sql:33 n_placed / n_stands × 100 WI-07b placement rate output % service point facility denominator is all canonical stands, incl. vacant and unknown
PO “Stands enrolled” % and n / N D/screen_process_overview.go:184-185 M/mart_town_overview.sql:32 n_enrolled / n_stands WI-07b enrolment rate output % service point facility same all-stands denominator
PO “enrolments required” D/screen_process_overview.go:186 M/mart_stand_eligibility.sql; M/mart_town_overview.sql max(0, occupied − enrolled) WI-07c enrolment gap output (gap) count service point facility mixes two populations: occupied stands vs all signed enrolments
PO strip “Bins placed”, “placements required”, “Stands with a Termination” D/screen_process_overview.go:187-191; :26 M/mart_town_overview.sql:33-34; M/mart_actions.sql (enrolled_not_placed) counts WI-07, WI-20 terminations output count service point facility placements required is an action list count (section 4)
PO tiles “Eligible Stands of N”, “Collected / Un-scanned latest Service Week”, “Waste collected last 30 days” D/screen_process_overview.go:197-203 M/mart_town_overview.sql as OV WI-07, WI-10, WI-12, WI-01 output count / kg facility
PO chart + “Last 12 months” table: Enrolled, Bins placed, Stands collected, kg D/screen_process_overview.go:208-230 M/mart_process_overview.sql monthly flows WI-07 flow, WI-10, WI-01; n_collections (WI-05) is in the mart, not shown output count / kg month xlsx download of the months frame
MAP tiles Stands, Bins placed, Blocks, Unassigned Blocks D/screen_mapping.go:28-45 M/mart_stand_status.sql, M/mart_blocks.sql counts under the pills WI-07 output count service point; zone facility; zone; stand status or service outcome map colour = per-stand stand status or latest-week service outcome
WC hero “Total waste” (+ delta) and tiles Recyclable, Non-recyclable, Sanitary, Organic, Other D/screen_waste_collected.go:1321-1325; :32; wcTiles :477-494 M/mart_collection_weights.sql; MIG/20261007000300_create_waste_category.sql:33-62 kg per month per bucket; NULL category → unsorted → bucket recyclable; Other = total − four buckets WI-01 with stream axis output kg weighed quantity month; facility; collector; stream unsorted (Mfidikwe scale batches) shows as Recyclable here
WC chart “kg per month by Waste Category” (12 months) D/screen_waste_collected.go:45, :694 same same, 12 months WI-01 output kg month; stream
WC table “Waste Pickers”: Collections, kg D/screen_waste_collected.go:58 M/mart_collection_weights.sql, M/mart_collections.sql per collector label: distinct weighing submissions; sum kg WI-05 collections; WI-01 by collector activity / output count / kg weighing submission collector; facility; month unresolved QR becomes “Unresolved QR Code x” bucket
WC chart “kg per Waste Picker by Waste Category” D/screen_waste_collected.go:118, :786 same kg per collector × bucket WI-01 output kg collector; stream
WC tile “Collections” (weighed this month) D/screen_waste_collected.go:1328-1343 same sum of picker collections WI-05 activity count weighing submission month; facility
WC tile “Un-scanned” (eligible Stand-Service Weeks) D/screen_waste_collected.go:83, :1344 M/mart_collection_status_asof.sql eligible stand-weeks with status un-scanned, weeks whose Monday falls in the month WI-12 missed services output count service point-week month; facility DD C.4.5 and F.12 describe an older definition (all stands with a block); code now restricts to eligible
WC chart “kg per day by Waste Site” (+ xlsx kg_per_day) D/screen_waste_collected.go:104, :729 M/mart_collection_weights.sql kg per day per facility WI-01 output kg day; facility
WC weekday grid (Scanned / No scans / Weekend) D/screen_waste_collected.go:72, :271 M/mart_picker_daily.sql, M/mart_picker_day.sql distinct QR codes scanned per collector-day; kg per collector-day WI-23 collector active days activity count collector-day collector; day operational review grid; feeds jobs gap
WC “Site jumps” D/screen_waste_collected.go:297 M/mart_collections.sql collectors weighing at >1 facility in a week — — count collector-week operational (section 4)
WC flag chips (per kind; “Over-reported”, “Under-reported”) D/screen_waste_collected.go:246, :957-981 M/mart_weight_flags.sql flag counts — — count weighed quantity / collector-day data-quality, operational (section 4)
WR Summary “Recyclables by material” (material, family, kg, share) D/screen_waste_collected_report.go:21, :157-176; :67-90 (families) M/mart_collection_weights.sql kg per category code mapped to 10 material families; share = kg / grand total of recyclables WI-02 recyclable mass by material output kg; % weighed quantity material family; material; month; facility family map lives only in Go (wcMaterials); unsorted lands in “Other”
WR Summary “Waste streams” kg, share, “Recycling rate” D/screen_waste_collected_report.go:177-187 same recyclable bucket kg / total kg WI-03 diversion rate (variant C) outcome % weighed quantity month; facility unsorted counted as recyclable; organic not counted
WR Summary “Collection activity”: Collections, Collection days, Waste Pickers, Waste Sites D/screen_waste_collected_report.go:188-200 same distinct events, days, collector labels, facilities in the month WI-05, WI-06, WI-23 activity count month; facility “Waste Pickers” is the only active-collector count anywhere
WR Trends: kg by family and stream per month, 12-month total, recycling rate per month D/screen_waste_collected_report.go:205-285 same as Summary over 12 months; 12-month rate from summed kg WI-01, WI-02, WI-03C output / outcome kg; % month; family; stream rate rolled up correctly (sum then divide)
WR Data sheet (every weighing) D/screen_waste_collected_report.go:35, :288-297 same rows (evidence) — kg weighed quantity finest-grain value rows already exist here
SV hero “Collected” (n, % of Stands, delta vs previous week) D/screen_service.go:433-437; :46 M/mart_collection_status_asof.sql + M/mart_stand_eligibility.sql eligible stands with status collected in the week / eligible stands with a status that week WI-11 collection rate (variant A) output count; % service point-week week; facility; zone
SV tiles “Stands with a bin placed”, “No waste”, “No access”, “Un-scanned”, “Pending or newly placed” D/screen_service.go:441-447 same eligible stand-weeks by status; No access = no-bin-access + no-stand-access; Pending = pending-service + recent-placement WI-09 service outcome distribution output count service point-week week; facility; zone; status “Stands with a bin placed” is actually eligible stands with a status row
SV chart “Stands per Collection Status, last 12 Service Weeks” D/screen_service.go:453; :46 same counts per week × status WI-09 output count service point-week week; status
SV “Waste Pickers” card: Collected, No waste, No access, Un-scanned, Pending, Total D/screen_service.go:57, :468 same; picker = block’s modal picker of the week (I/int_weekly_picker_analysis.sql:1-13) counts per picker × status WI-09 by collector output count service point-week collector; status collector attribution is block-level, legacy fallback (alphabetical max)
SV “Overall Progress”: Enrolments, Placements, Collected, No waste, No bin access, Un-scanned, kg, kg per collected Stand D/screen_service.go:68, :240-245, :499 M/mart_daily_progress.sql daily counts; statuses by last_service_date; kg/collected recomputed after summing WI-07 flow, WI-09, WI-01, WI-14 mass per serviced point output count; kg; kg/stand site-day day / week / facility (re-grouped) status counts here are all stands with a block, placed or not, not eligible-only (M/mart_daily_progress.sql:15-17)
SE hero “Eligible Stands” (n, % of N) D/screen_stand_evaluation.go:49 M/mart_stand_eligibility.sql is_eligible count / all stands WI-07 eligible output count; % service point —
SE tiles Completed, Attempted, Missed, Scheduled; card “% of Scheduled Evaluations completed” D/screen_stand_evaluation.go:41; DD D.2 M/mart_evaluation_schedule_status.sql:9-17; M/mart_evaluation_schedule_status_current.sql:1-15 issued scheduled evaluations in the month by status; completed / all four WI-18 evaluation schedule compliance activity (verification) count; % scheduled evaluation month; status
SE tile “Stands with an upcoming Evaluation”, “Scheduled Evaluations ahead” table, Planning card D/screen_stand_evaluation.go:30, :53, :58 M/mart_evaluation_schedule_next_upcoming.sql, M/mart_evaluation_schedule_daily_workload.sql counts ahead — — count operational (section 4)
SE “Satisfaction” bars D/screen_stand_evaluation.go:77 M/mart_stand_evaluations.sql completed evaluations in month per project_satisfaction_label WI-15 satisfaction outcome count per label evaluation submission month; score
SE “Evaluations this month, worst first” (Bins still available, Bin condition, Correct bin use, Satisfaction) D/screen_stand_evaluation.go:66 M/mart_stand_evaluations.sql row list, ordered: attempts first, then bins_still_available (evidence for WI-17, gaps G-11, G-12) — — evaluation submission answers are listed, never aggregated
MPK 2.3 map and “Status counts (Eligible Stands)”: Stands, Share D/screen_meeting_pack.go:65, :288-333 M/mart_collection_status_asof.sql + eligibility eligible stand-weeks per status / all WI-09 output count; % service point-week week; status
MPK 2.3 “Service per weekday and Waste Site”: Service fulfilled, Waste collected, No waste, Waste not collected, Service missed, Recent placement, Coverage D/screen_meeting_pack.go:370-394 same Coverage = (collected + no-waste) / (stands − recent-placement) WI-11 coverage (variant D) output % service point-week service weekday; facility access failures count against coverage here
MPK 2.4 “Stand evaluations”: Total Sampled, Attempts, Successful, Successful Rate D/screen_meeting_pack.go:74, :397-411 M/mart_evaluation_schedule_status.sql issued schedules in week; attempts = completed or attempted; rate = completed / attempts WI-18 (visit success variant) activity count; % scheduled evaluation week; facility “Compliance Rate” printed as “no v2 source” (:41)
MPK 2.4 “Follow-up surveys”: Missed Collections, Follow-ups Done, Suitable Respondent, Compliance Rate, Reach Rate D/screen_meeting_pack.go:84, :412-458 M/mart_collection_follow_ups.sql + status done / missed (un-scanned eligible); suitable / done WI-19 follow-up completion and reach activity (verification) count; % follow-up submission; service point-week week; facility definitions “assumed, printed” (:44)
MPK 2.5 “Waste Picker kg per day” and Pay, Bonus, Total D/screen_meeting_pack.go:91-101, :461-519 M/mart_picker_pay_daily.sql, M/mart_picker_pay_weekly.sql payable kg per collector-day; weekly pay + recycler bonus WI-01 by collector (payable subset); WI-22 collector income output; outcome kg; ZAR collector-week collector; weekday; period site payable kg excludes exceptions and pre-first_payable_on
MPK 2.6 “Sorting and data capturing per submission”: category weights, Total kg, SaS compliance, WP compliance D/screen_meeting_pack.go:104, :521-566 M/mart_collections.sql (sas_compliance, wp_compliance) per submission listing WI-17b SaS compliance at weighing (evidence rows) outcome (evidence) label weighing submission
MPK “Landfill avoidance per Waste Site”: Recyclables, Non-recyclables, Organic, Sanitary, Total kg, Landfill avoided D/screen_meeting_pack.go:115, :568-612 M/mart_collection_weights.sql + waste_category.bucket (recyclable + organic) / total, unsorted → recyclable WI-03 diversion rate (variant A) outcome kg; % weighed quantity week; facility; stream
MPK “13-month landfill avoided % per Waste Site” D/screen_meeting_pack.go:614-640 same same per month WI-03A outcome % month; facility
MPK “Recycler payments”; “Recycling balance”: Recyclable kg collected, kg invoiced, Balance kg, Invoiced, Payments D/screen_meeting_pack.go:127-141, :650-675 M/mart_site_recycling_balance.sql per facility-month; balance = collected − invoiced WI-04 recyclables sold (and balance) outcome kg; ZAR facility-month; recycler payment month; facility collected side drops NULL category (unsorted) by inner join (M/mart_site_recycling_balance.sql:22-24)
WE Summary: Stands, Enrolled, Placed, Eligible, Households, People, Eligible Stands collected, Service coverage, Evaluations completed, Terminations D/email_weekly.go:35-58, :141, :430-432 M/mart_town_overview.sql, M/mart_enrollments.sql, status, M/mart_stand_evaluations.sql, M/mart_stand_termination_latest.sql snapshots; coverage = (collected + no-waste + no-bin-access + no-stand-access + recent-placement) / eligible stands that week WI-07, WI-13 households, WI-10, WI-11 (variant B), WI-18 (evaluations completed), WI-20 output count; % town; week
WE “Waste streams” per town: per bucket, Uncategorised, Total D/email_weekly.go:82, :436-444 M/mart_collection_weights.sql kg per bucket; NULL or unsorted → uncategorised WI-01 stream axis output kg weighed quantity town; week; stream unsorted is “uncategorised” here, Recyclable on WC
WE “Evaluation schedule compliance”: Due, Completed, Attempted, Missed, Still scheduled, Compliance D/email_weekly.go:74, :446-453 schedule status completed / due (issued, scheduled that week, status today) WI-18 activity % scheduled evaluation town; week
WE “Households and people”: Enrolled Stands, Households, People, Households per Stand, People per household D/email_weekly.go:141, :455-457 M/mart_enrollments.sql; I/int_enrollment_latest.sql:28-29 sums over each stand’s latest enrolment; ratios WI-13 output count; ratio service point (latest enrolment) town denominator is enrolment rows: Mfidikwe keeps unsigned enrolments (I/int_enrollment_latest.sql:40-41)
WE per town “latest and trailing statistics” (latest week, trailing 4/13 weeks, YTD, since inception) and “change summary” (WoW, MoM, QoQ, YoY): Total kg, Average kg per service day, Collected stands (n, %), Scanned stands (n, %), Un-scanned stands (n, %), Kg landfill avoidance, Landfill avoidance %, Kg per stand, Kg per household, Kg per person, Mean satisfaction D/email_weekly.go:629-678 (wkMetrics, wkStats), :94-130 (series SQL), :716-775 status, M/mart_enrollments.sql, weights, evaluations see WI-01, WI-06, WI-11, WI-12, WI-03, WI-14, WI-15; windows sum period rows then divide WI-01, WI-06, WI-11 (variant C), WI-12, WI-03 (variant B), WI-14, WI-15 output / outcome kg; count; %; kg/stand; kg/hh; kg/person; score service point-period; weighed quantity; evaluation town; window; comparison status series is not eligibility-filtered and counts no-stand-access as un-scanned (:94-107)
WE “Trend” sheet: 52 weeks total kg, collected stands %, mean satisfaction per town D/email_weekly.go:466-475 same per-week wkStats WI-01, WI-11C, WI-15 week; town
WE “Satisfaction” (count per score label), “SaS compliance” (collections per sas_compliance_label) D/email_weekly.go:60-72 evaluations; M/mart_collections.sql counts WI-15; WI-17b outcome count evaluation; weighing submission town; week; label
WE “QoL”: % better, % same, % worse, n per question (latest complete month) + Likert chart (12 months) D/email_weekly.go:158; D/email_weekly_charts.go:15-35, :96-121, :352-366 M/mart_stand_evaluations.sql (qol_*) 5-level codes collapsed to better (top 2) / same / worse (bottom 2); unknown codes left out of n WI-16 perceived change in quality of life outcome / impact % evaluation submission town; month; question; level
WE “SaS ratings”: % very good+little mixing, % noticeable mixing, % lots of mixing or missing bin, n per stream D/email_weekly.go:168; D/email_weekly_charts.go:53-77, :125-186, :371-400 M/mart_stand_evaluations.sql (sas_*_rating) 5 codes → 3 levels; Empty and Misused_bin dropped; Smashblock and Ikemeleng only WI-17 source-separation quality outcome % bin rating (stand × stream) town; month; stream; level
WE charts: collected stands %, stands by status bands, kg by stream, avg kg per service day, cumulative kg by stream since first week, landfill avoidance %, satisfaction mean ± se + boxplot D/email_weekly_charts.go:201-350; D/r/email_charts.R:305-335 as above mean and standard error of score distribution per week WI-11C, WI-09, WI-01, WI-06, WI-03B, WI-15 (measure) week; town; stream
MS “Collection attempts by Waste Picker”: Attempts, Collected, No waste, No access, Other, Not today’s service day, Success rate D/email_missed_stands.go:30-72, :180-215 M/mart_picker_activity.sql, M/mart_qr_registry.sql QR scans of the day resolved to a stand, one per stand (Collection wins); success = collected / attempts WI-21 scan-verified collection success activity count; % scan (stand-day) facility; collector; day unverified scans tabled separately (ADR-0020 analogue)
MS “Collection success for each Waste Site”: Stands, Collected, No waste, No access, Missed, Due today, Recent placement, Service coverage D/email_missed_stands.go:76, :255-305 status + eligibility coverage = (collected + no-waste + no-access + recent) / eligible stands; unknown counts as missed WI-11 (variant B) output % service point-week facility; service weekday
FU “Service report”: Stands, Collected, Un-scanned, No waste, Pending service, Follow-up (4 weeks) D/email_follow_up.go:34-46, :134-144 status (terminated stands left out, eligibility not applied) counts per week WI-09 output count service point-week week; status
FU “Follow-up completion”: Required, Completed, Open, Completion D/email_follow_up.go:24-46, :136-144 status + M/mart_collection_follow_ups.sql required = follow-up stand-weeks placed before the service date; completed = a follow-up survey within 7 days WI-19 activity (verification) % service point-week week legacy status-match dropped (:29-33)
FU “Evaluation schedule”: Scheduled, Completed, Missed, Total D/email_follow_up.go:48, :175-181 schedule status counts by period WI-18 activity count scheduled evaluation period
PY hero “Payable” (R), tiles Exceptions, Waste Pickers, Open drafts; Payable lines, Exceptions, Unallocated bonus, Period sites D/screen_payments.go:47-110, :1300-1362 M/mart_payable_weights.sql, M/mart_recycler_bonus_shares.sql, M/mart_picker_pay_weekly.sql money owed per collector WI-22 (hidden outcome) operational ZAR section 4
PY “Recycling balance” table D/screen_payments.go:242 M/mart_site_recycling_balance.sql as MPK WI-04 outcome kg; ZAR facility-month month; facility
AC six count tiles D/screen_actions.go:20-40 M/mart_actions.sql:1-20 stands per action kind — — count service point kind operational (section 4)

Models computed but not displayed anywhere: M/mart_sorting_evaluations.sql (bag contamination, passed), mart_daily_progress.weight_per_visited_stand (M/mart_daily_progress.sql:138), mart_process_overview.n_collections, evaluation answers burn_waste, bags_received, service_received, wp_relationship* (M/mart_stand_evaluations.sql:45-53), collection_follow_ups.collection_status (household’s own answer). The weekly email says the sorting evaluation “has no V2 source yet” (D/email_weekly.go:567-568) although the mart now exists.


2. Candidate indicator register

Kind: count / rate (numerator + denominator) / measure (one value per unit), per novaIndicators ADR-0002/0019. Axes: R = required (never summed across, novaIndicators ADR-0016), otherwise optional. “Period” means a reporting interval on the ISO-week (Monday start) or calendar-month calendar in the project time zone.

WI-01 Waste mass collected

  • Level output. Unit kg. Kind count (sum). Unit of observation: weighed quantity.
  • Axes: period (R), service area, facility, collector, waste category (→ stream via skos:broader; streams recyclable, non_recyclable, organic, sanitary, plus uncategorised).
  • Rule. Sum the mass of every weighed quantity recorded on a weighing record whose business date (device-local start date) falls in the period. A weighed quantity is one non-blank decimal weight, either a per-category field or one batch of an uncategorised scale repeat (S/stg_collection_weight.sql:5-16, :39-50); a blank field is absent, not zero. Records are taken after corrections, Field Voids and Submission Voids are applied; rejected records are excluded. The facility is the one the record’s service-group QR resolves to; a record whose QR resolves to none keeps a null facility and still counts in the service-area total (S/stg_collection.sql:6-12; M/mart_daily_progress.sql:26-30). The collector is the person whose collector QR assignment window covers the record’s start instant (I/int_collection_payee.sql:1-11); unresolved stays visible as such. No payability cut (first_payable_on), exception or rate is applied: those belong to payment, not to mass (contrast M/mart_payable_weights.sql:84-85).
  • Variants in code: monthly (M/mart_process_overview.sql:57-61), daily per facility (M/mart_daily_progress.sql:82-89), rolling 30 days (M/mart_town_overview.sql:74-84), per stream (D/screen_waste_collected.go:32, D/email_weekly.go:82).
  • Judgements to make explicit. (J1) Uncategorised mass: Mfidikwe weighs unsorted scale batches with no category; the catalog maps them to code unsorted in bucket recyclable (MIG/20261007000300_create_waste_category.sql:60-61, comment “the recyclables the pickers are paid for”). WC and the meeting pack show it as Recyclable, the weekly email as Uncategorised (D/email_weekly.go:80-88), the recycling balance drops it (M/mart_site_recycling_balance.sql:22-24). The standard should require “uncategorised” as its own stream value and forbid assigning it to a stream by default. (J2) The stream classification of each category is a project-level catalog, not data; the standard should publish the category scheme with skos:broader streams.

WI-02 Recyclable mass by material

  • Level output. Unit kg (share in %). Kind count; share is a rate with denominator = all recyclable kg. Unit of observation: weighed quantity.
  • Axes: period (R), facility, material family (PET, HDPE, LDPE, PP, PVC, paper and cardboard, glass, metal, e-waste, other), material (category).
  • Rule. WI-01 restricted to categories in the recyclable stream, grouped by a material-family mapping of category codes (D/screen_waste_collected_report.go:67-90); share = family kg / all recyclable kg in the same period and scope.
  • Judgements. The family mapping exists only in Go; a standard needs it as a concept scheme because it is the bridge to AMS-III.AJ material types. Unsorted falls into “Other”.
  • GHG link. This is the per-material quantity material_processed_tonnes by material_type that AMS-III.AJ needs (~/GHG_methodologies/CDMSmallScale/cdmAmsIIIaj/R, baseline args material_processed_col, virgin_emission_factor_col), but only once the mass is shown to have been recycled (WI-04), not merely collected.

WI-03 Diversion rate (landfill avoidance)

  • Level outcome. Unit % (and kg diverted). Kind rate. Unit of observation: weighed quantity.
  • Axes: period (R), facility, service area.
  • Rule as the code implies it (three incompatible variants):
    • A, meeting pack “Landfill avoided”: (recyclable kg + organic kg) / all kg, unsorted counted as recyclable (D/screen_meeting_pack.go:115-125, :568-612).
    • B, weekly email “Landfill avoidance %” and “Kg landfill avoidance”: diverted = recyclable + organic kg of real categories only (not null, not unsorted); denominator = all kg including uncategorised; NA when the window has no categorised kg (“legacy include_landfill_avoidance = FALSE”) (D/email_weekly.go:109-121, :645-678).
    • C, monthly report “Recycling rate”: recyclable kg / all kg, unsorted counted as recyclable, organic not diverted (D/screen_waste_collected_report.go:186-187, :316).
  • Proposed explicit rule. Diverted mass = sum of WI-01 mass in streams the project design declares diverted (default: recyclable, organic) whose destination is recorded as recovery; diversion rate = diverted mass / all collected mass, with uncategorised mass reported alongside (ADR-0018) and excluded from both numerator and denominator. Roll up by summing kg, never averaging site rates (variant B and C already sum windows correctly; D/email_weekly.go:645-678).
  • Judgements. (J1) unsorted; (J3) whether organic counts as diverted without evidence of treatment (none is recorded); (J4) the denominator is collected waste, not waste generated, so this is a “share of collected stream not sent to landfill”, not a municipal diversion rate (see gap G-01); (J5) “avoided” asserts a counterfactual (would have gone to landfill) that the code never tests.
  • GHG link. Variant-B diverted organic mass is the candidate composted_waste_tonnes input to AMS-III.F only if composting is evidenced; diverted recyclable mass by material feeds AMS-III.AJ via WI-02/WI-04. Non-recyclable and sanitary mass is the residual (residual_disposal_tonnes, III.AJ leakage args).

WI-04 Recyclable mass sold to recyclers (and collection-to-sale balance)

  • Level outcome. Unit kg (and ZAR). Kind count per side; balance = collected − invoiced. Unit of observation: facility-month (collected side: weighed quantity; sold side: recycler payment line).
  • Axes: month (R), facility.
  • Rule. Collected = WI-01 kg of categories in the recyclable stream at facilities, by month of collection date, ignoring payee exceptions (“the kg reached the site”) (M/mart_site_recycling_balance.sql:4-27). Invoiced = kg on lines of non-voided recycler payments, by month of invoice date; a payment without lines adds money, not kg (:7-8, :29-49). Balance = collected − invoiced; information only, because recyclables wait at a site for weeks (:2-3).
  • Judgements. NULL-category (unsorted) mass is excluded from “collected” here by the inner join, so the balance for Mfidikwe is understated. Month misalignment between collection and sale is accepted, not modelled (stock carry-over). Voided payments excluded.
  • Why it matters. This is the only figure that evidences recovery rather than collection; it is the natural verification source for an AMS-III.AJ quantity and for WI-03’s “destination recorded as recovery”.

WI-05 Weighing records (collections)

  • Level activity. Unit count. Kind count. Unit of observation: weighing submission.
  • Axes: period (R), facility, collector.
  • Rule. Count distinct weighing records with at least one weighed quantity in the period (D/screen_waste_collected.go:58-70, count(DISTINCT w.ingestion_event_id)); the monthly mart counts every weighing record, weighed or not (M/mart_process_overview.sql:49-55). Same correction/void handling as WI-01.
  • Judgement. Whether a weighing record with no weights is a collection.

WI-06 Collection days and mass per collection day

  • Level activity (days) / output (kg per day). Kind count; ratio = rate.
  • Axes: period (R), service area; facility on the report.
  • Rule. Collection days = distinct business dates with at least one weighed quantity in scope (D/email_weekly.go:110-121, count(DISTINCT w.collected_on); D/screen_waste_collected_report.go:188-199). Average kg per service day = WI-01 kg / collection days, both summed over the window’s periods before dividing (D/email_weekly.go:659). A multi-week window sums per-week day counts.
  • Judgement. “Service day” here means a day anyone weighed in the town, not a scheduled service day.

WI-07 Service points by lifecycle stage (stock and flow)

  • Level output. Unit count (and %). Kind count; rates for enrolled share, placed share, eligible share. Unit of observation: service point.
  • Axes: stage (R: enumerated, enrolled, placed, terminated, eligible), facility (via zone → service group), period (flow only).
  • Rule. Each canonical service point has one stage, first match wins: terminated (latest termination event is a termination and no signed enrolment dated later), placed (latest placement attempt succeeded), enrolled (signed latest enrolment with a date), else enumerated (M/mart_stand_status.sql:13-25). Eligible = placed and signed enrolment and occupied and in a non-retired zone with a service group (M/mart_stand_eligibility.sql:5-17, :181-182). Stock counts read today’s stage (M/mart_town_overview.sql:26-39). Flow counts a service point in the month of its latest signed enrolment date or latest placement date (M/mart_process_overview.sql:5-14), so the flow sums to today’s stock and history rewrites when a stage changes. Daily flow counts latest enrolment and latest placement by date regardless of success (M/mart_daily_progress.sql:47-64). Shares: enrolled / all service points and placed / all service points (D/screen_process_overview.go:183-184); eligible / all (D/screen_stand_evaluation.go:49).
  • Judgements. (J6) Placement success differs by town: Mfidikwe provide_bags = 'Yes', elsewhere suitable_respondent_available = 'Yes' (M/mart_stand_status.sql:18-20; owner question noted at M/mart_stand_eligibility.sql:9-11). (J7) “Signed”: Ikemeleng/Smashblock require Sign, Mfidikwe keeps unsigned rows in the latest-enrolment table and the sign test is applied downstream (I/int_enrollment_latest.sql:35-41). (J8) Restart: a later signed enrolment overrides a termination; same-day stays terminated. (J9) Denominator of the shares is every service point, including vacant and unknown occupancy. (J10) Flow-by-latest-event under-counts churned history; a standard should count enrolment and placement acts as events (activity indicators) and stages as a dated state.

WI-08 Service points by occupancy

  • Level input (context, denominator for reach). Unit count. Kind count. Unit of observation: service point.
  • Axes: occupancy class (R: occupied, vacant, non_residential, unknown), facility.
  • Rule. Latest non-null enumeration status (SurveyCTO first, legacy copy otherwise), mapped: Residential, Business_residential → occupied; Vacant, un_occupied → vacant; Non_Residential → non_residential; anything else → unknown (M/mart_stand_eligibility.sql:19-30, :141-162). A vacant or non-residential point reads occupied when it is placed and both its signed enrolment date and its latest placement date fall after the enumeration (:115-122). Points enumerated on two June 2023 Smashblock form versions with no status question and a signed enrolment read Residential (:37-40, :74-83, :146).
  • Judgements. All three overrides are owner decisions embedded in SQL; the standard should state the occupancy-state precedence (latest dated observation of occupancy wins; an enrolment is evidence of occupancy) rather than form-version literals.

WI-09 Service outcome per service point per period (collection status)

  • Level output. Unit count (and share). Kind count. Unit of observation: service point-week.
  • Axes: week (R), outcome (R: collected, no-waste, no-bin-access, no-stand-access, un-scanned, pending-service, recent-placement, unknown), facility, zone, collector, service weekday.
  • Rule. For every service point in a zone with a service schedule, and every week from the zone’s first scanned week, the point’s own last scan in the week (stand QR, or a bin QR routed to the stand through its placement) gives a description mapped to an outcome (M/mart_collection_status.sql:133-149, :211-218; I/int_stand_scan_daily.sql:1-21; an empty note is a Collection). Weeks whose service date (zone’s weekday, else the observed day) is after the reading date are omitted. Ladder at read time, first match: not scanned and today is the service date → pending-service; scanned → its description; not scanned but last collection less than 8 days ago → carry the last description; not scanned and days outstanding < 2 → carry; never collected and placed less than 8 days ago → recent-placement; else un-scanned (M/mart_collection_status_asof.sql:71-82). Weeks before placement are dropped (M/mart_collection_status.sql:226-232). Most surfaces count eligible points only (join is_eligible, e.g. D/screen_service.go:46-55); mart_daily_progress, the follow-up email and the weekly series do not.
  • Judgements. (J11) The 8-day carry-forward makes “collected” mean “collected within the last 8 days”, so a point serviced late in one week can read collected the next; one threshold for all towns, Mfidikwe’s legacy used 7 (M/mart_collection_status.sql:25; M/mart_collection_status_asof.sql:76-77). (J12) Scan description, not weighing, is the evidence of collection; no mass is tied to a point. (J13) Population differs by surface (eligible vs all points with a zone vs placed). (J14) Collector attribution is the zone’s modal scanner of the week with a legacy alphabetical fallback (I/int_weekly_picker_analysis.sql:6-16).
  • II mapping. Outcome per point-week is an impactont:State claim derived from scan records; the ladder is the methodology’s derivation rule and belongs in meth:calculationRules.

WI-10 Service points collected

  • Level output. Unit count. Kind count. Unit of observation: service point (per period).
  • Axes: period (R), facility.
  • Rule. Weekly: eligible points with outcome collected in the week (M/mart_town_overview.sql:59-71; D/screen_service.go:433). Monthly: distinct points with outcome collected in any week whose Monday falls in the month (M/mart_process_overview.sql:40-47), not eligibility-filtered. Weekly-email series take one outcome per point per period by legacy priority collected > no-waste > no-workday > un-scanned > no-bin-access > no-stand-access > pending-service > other (D/email_weekly.go:94-107).
  • Judgement. Month assignment by week start; distinct-in-month vs point-weeks; eligibility filter inconsistent.

WI-11 Service coverage / collection rate

  • Level output (reliability of service). Unit %. Kind rate. Unit of observation: service point-week.
  • Axes: week (R), facility, service weekday, zone.
  • Rule as implied (four variants):
    • A, Service hero: collected / eligible points with an outcome that week (D/screen_service.go:433-437).
    • B, weekly summary and missed-stands: (collected + no-waste + no-bin-access + no-stand-access + recent-placement) / eligible points; pending-service excluded from the numerator, kept in the denominator; unknown counts as missed (D/email_weekly.go:41-47, :481-482; D/email_missed_stands.go:255-272, :303).
    • C, weekly statistics “Collected stands %”: collected / all points with an outcome, not eligibility-filtered; scanned % = (all − un-scanned − no-stand-access) / all (D/email_weekly.go:94-107, :658-662).
    • D, meeting pack “Coverage”: (collected + no-waste) / (points − recent-placement) (D/screen_meeting_pack.go:370-394).
  • Proposed explicit rule. Service delivered = the collector reached the point on its scheduled day and recorded an outcome (collected or no-waste); access failures are a separate failure class attributed to the household, not the service; recent placements and pending services leave both numerator and denominator and are reported alongside. Rolled up by summing numerators and denominators across sites and weeks (all four variants already do).
  • Judgements. Whether an access failure counts as service delivered (B yes, D no); whether recent placements are in the frame (B numerator, D excluded from denominator, A/C counted only if collected); eligibility of the frame.

WI-12 Missed services (un-scanned)

  • Level output (failure). Unit count (and %). Kind count / rate. Unit of observation: service point-week.
  • Axes: week (R), facility, zone, collector.
  • Rule. Eligible point-weeks with outcome un-scanned (D/screen_waste_collected.go:83-91; M/mart_town_overview.sql:65). Weekly statistics add no-stand-access (D/email_weekly.go:96, legacy). mart_daily_progress.no_qrcode counts all points with a zone, placed or not, by service date (M/mart_daily_progress.sql:15-17, :75).
  • Judgement. Same population and carry-forward judgements as WI-09; “missed” depends on the reading date until 8 days have passed.

WI-13 Households and people served

  • Level output (reach). Unit count; ratios households per point, people per household. Kind count / rate. Unit of observation: service point (household and person are counts only, per entities.md 1.4).
  • Axes: service area; snapshot date (R).
  • Rule. Sum household_count and person_count of each point’s latest enrolment, each taken only when the answer is a plain whole number (I/int_enrollment_latest.sql:28-29); households per point = households / enrolment rows; people per household = people / households (D/email_weekly.go:141-145, :455-457).
  • Judgements. Frame is every point with a latest enrolment row (Mfidikwe unsigned included; terminated and never-placed included), not points actually served. Non-numeric answers silently drop out of the numerator but not the denominator. Counts are as-of-enrolment, never refreshed (an evaluation-sourced Stand Occupancy Count exists in the schema but is not used).

WI-14 Mass per serviced point, per household, per person

  • Level output (intensity). Unit kg/point, kg/household, kg/person. Kind rate.
  • Axes: period (R), facility.
  • Rule. kg per collected point = WI-01 kg / collected point-weeks, recomputed after summing (M/mart_daily_progress.sql:18-21, :137; D/screen_service.go:240-245). Weekly statistics: kg / all point-weeks with an outcome; kg per household = kg / Σ households of those point-weeks; kg per person likewise (D/email_weekly.go:94-107, :664). weight_per_visited_stand = kg / (collected + no-waste) exists but is not displayed (M/mart_daily_progress.sql:138).
  • Judgements. Numerator mass is attributed to facilities and collectors, never to points, so the ratio mixes populations (mass from any collector over points of a facility). Household denominators are person-weeks (household-weeks) in multi-week windows. A per-household generation rate (DD F.5) is an open owner question.

WI-15 Service satisfaction score

  • Level outcome. Unit score 0–10. Kind measure (one value per completed evaluation); label distribution as counts. Unit of observation: evaluation submission (household respondent).
  • Axes: period (R), service area, facility.
  • Rule. Completed evaluations only (attempt_outcome = 'completed'). Score = project_satisfaction when it is an unsigned integer string; mean = Σ score / n over the window’s evaluations (D/email_weekly.go:123-130, :665); the chart draws mean ± standard error and a boxplot from the score counts per week (D/r/email_charts.R:305-335). The label distribution counts every completed evaluation, unanswered as “Not answered” (D/email_weekly.go:60-65; D/screen_stand_evaluation.go:77-85). Question wording “0 = completely unsatisfied; 10 = completely satisfied” (D/email_weekly_charts.go:32-34). Change = plain difference of means (D/email_weekly.go:840-841).
  • Judgements. DD F.1 says labels like “Qol_good” occur and the legacy mean was 1–10; non-numeric labels are silently excluded from the mean. A mean of window means is avoided (window sums n and Σ score). Should be kind measure (ADR-0019), not a mean of means.

WI-16 Perceived change in quality of life

  • Level outcome (perceived impact). Unit % of respondents. Kind rate (count per level / n). Unit of observation: evaluation submission.
  • Axes: month (R), question (R: project overall, ability to dispose of waste, community cleanliness), level (much worse … much better).
  • Rule. Completed evaluations in the latest complete month; answer codes mapped to five ordered levels per question; better = top two, worse = bottom two; unknown codes excluded from n and their count reported in a note (D/email_weekly_charts.go:15-35, :79-121).
  • Judgements. Retrospective self-report against “since the project started” is the only baseline in the system. Respondent is whoever answered at the visited point (no sampling weight). Evaluations come from the evaluation schedule sample (sampling design is the activities sweep’s).

WI-17 Source-separation quality

  • Level outcome (behaviour). Unit % of ratings. Kind rate. Unit of observation: bin rating (point × stream at a completed evaluation).
  • Axes: month (R), stream (R: recyclable, non_recyclable, organic), level (good, noticeable mixing, poor or missing), service area.
  • Rule. Completed evaluations; five rating codes consolidated to three levels (Very_good + Decent_little_mixing; Average_noticable_mixing; Poor_lots_of_mixing + Missing_bin); Empty and Misused_bin excluded from n; reported only for Smashblock and Ikemeleng (D/email_weekly_charts.go:53-77, :125-186).
  • WI-17b SaS compliance at weighing. The weighing form carries the collector’s SaS_compliance and wp_compliance ratings per record; reported as counts per label and per-record lists (D/email_weekly.go:67-72; D/screen_meeting_pack.go:104-111; S/stg_collection.sql:30-32). Unit of observation weighing submission; it rates the collector’s load, not a household.
  • Judgements. Treating a missing bin as poor separation; dropping empty bins; the town list is hard-coded (wkSaSTown). DD F.6 asks which score definitions (legacy SaS 0–3) should move to dbt.

WI-18 Evaluation schedule compliance

  • Level activity (monitoring/verification performance). Unit %. Kind rate. Unit of observation: scheduled evaluation.
  • Axes: period of scheduled date (R), facility, status.
  • Rule. Issued scheduled evaluations (status not null) whose scheduled date falls in the period; status at read time: completed (any evaluation of the same point in the visit window completed), attempted (only attempts), missed (no visit and date past), scheduled (M/mart_evaluation_schedule_status.sql:9-17; M/mart_evaluation_schedule_status_current.sql:1-15). Visit window = the scheduled day, or for legacy weekly samples the frame week. Compliance = completed / due (D/email_weekly.go:446-453). Meeting-pack “Successful Rate” = completed / (completed + attempted) (D/screen_meeting_pack.go:74-82, :397-411).
  • II mapping. Monitoring-plan adherence; evaluations matched outside a schedule are unscheduled evidence (greeningstandard ADR-0020) and the code already keeps them out of compliance.

WI-19 Follow-up completion and reach

  • Level activity (verification of missed services). Unit %. Kind rate. Unit of observation: service point-week (required) / follow-up submission.
  • Axes: week (R), facility.
  • Rule. Follow-up email: required = point-weeks with outcome un-scanned, no-waste or pending-service, placed before the service date, terminated points excluded; completed = a follow-up submission for the point within service date .. +6 days (D/email_follow_up.go:24-46). Meeting pack: compliance = follow-ups done in the week / eligible un-scanned point-weeks; reach = follow-ups with a suitable respondent / follow-ups done (D/screen_meeting_pack.go:84-89, :412-458).
  • Judgement. Two denominators (follow-up set vs un-scanned only); legacy required the follow-up’s reported status to match, v2 does not.

WI-20 Service withdrawals (terminations)

  • Level outcome (retention, negative). Unit count. Kind count. Unit of observation: service point.
  • Axes: period (R for flow), facility.
  • Rule. Stock: points whose stage is terminated (WI-07). Flow: points whose latest termination event (not a reversal) was recorded in the week, by SA-local date (D/email_weekly.go:53-58).
  • Judgement. A reversal (error) removes the termination; a restart (new signed enrolment) ends it; only the latest event per point counts, so repeated churn is invisible.

WI-21 Scan-verified collection success per collector

  • Level activity. Unit %. Kind rate. Unit of observation: scan resolved to a point, one per point-day.
  • Axes: day (R), facility, collector.
  • Rule. QR scans of the day resolved to a point through the QR window at scan time, else through the bin code of the point’s latest placement; one row per point (a Collection wins); success = collected / attempts; scans that resolve to no point are tabled separately as unverified (D/email_missed_stands.go:24-72, :180-215).

WI-22 Collector earnings (hidden outcome in payments)

  • Level outcome (livelihood). Unit ZAR. Kind count (sum); per-collector distribution as measure. Unit of observation: collector-week.
  • Axes: week (R), collector, period facility.
  • Rule. Pay = round(Σ payable kg × price per kg × day multiplier, 2) per collector-week, where payable rows exclude payee exceptions and rows with no rate era and rows before the service area’s first payable day; day multiplier = holiday multiplier on an active public holiday (M/mart_payable_weights.sql:1-19, :61-65; M/mart_picker_pay_daily.sql:1-6; M/mart_picker_pay_weekly.sql:1-6). Bonus = equal cent-exact share of each non-voided recycler payment among collectors whose period facility that ISO week is the payment’s facility, or all to a named payee (M/mart_recycler_bonus_shares.sql:1-10, :46-60). Total = pay + bonus.
  • Why an indicator. Income earned by collectors is the outcome; the statement, rates and sign-off are operational (future II bounties). Rates are project terms (seeded R1/kg, MIG/20261007000300_create_waste_category.sql:10-12), so income is comparable across projects only with the rate as context.

WI-23 Active collectors and collector-days

  • Level output (jobs proxy). Unit count. Kind count. Unit of observation: collector-day.
  • Axes: period (R), facility.
  • Rule. Distinct collector labels with a weighed quantity in the month (D/screen_waste_collected_report.go:188-199); per collector-day weight and scan activity (M/mart_picker_day.sql:1-12).
  • Judgement. Unresolved QR codes count as distinct “collectors”; no employment status, hours or FTE.

WI-24 Bag contamination (computed, not reported)

  • Level outcome (sorting quality). Unit % of evaluations passed / bags contaminated. Kind rate. Unit of observation: sorted bag at a facility sorting evaluation.
  • Axes: period (R), facility.
  • Rule. A bag is contaminated when the material found inside is anything but Non_of_above_in_bag; blank bags dropped; an evaluation passes when no bag is contaminated (S/stg_sorting_evaluation.sql:9-14, :83; M/mart_sorting_evaluations.sql:5-8, :24-26). “Weekly counts, pass rates and the four-week window are report aggregates over this mart” (:11-12) but no surface reads it.
  • GHG link. The contamination_rate / specification_met applicability inputs of AMS-III.AJ (cdmAmsIIIaj/R, contamination_rate_col, specification_met_col).

Cross-cutting judgements a standard should make explicit

# judgement embedded in code where standard should state
J1 Uncategorised (unsorted) mass: recyclable on WC/MPK/WR, uncategorised on WE, excluded from balance MIG/20261007000300…:60-61; D/email_weekly.go:80-121; M/mart_site_recycling_balance.sql:22-24 own stream value; never in diversion numerator or denominator; reported alongside
J2 Category → stream → material-family mapping in a migration and in Go MIG/…:33-61; D/screen_waste_collected_report.go:67-90 published SKOS scheme with skos:broader
J3 Organic counts as diverted without a treatment record D/screen_meeting_pack.go:568-612; D/email_weekly.go:110 diversion requires a recorded destination
J4 Diversion denominator = collected, not generated all WI-03 variants name it “share of collected waste recovered”
J5–J10 Lifecycle ladder, placement success per town, signed rule, restart, all-points share denominator, flow by latest event WI-07 pattern: derived stage from dated acts; success criterion declared in project design
J11 8-day carry-forward, <2 days outstanding, 8-day recent-placement M/mart_collection_status_asof.sql:71-82 named parameters with defaults in the methodology
J12 Scan description, not mass, evidences collection at a point M/mart_collection_status.sql:211-218 evidence requirement per outcome value
J13 Frame for outcome counts: eligible vs zone vs placed WI-09–WI-12 one frame: eligible service points; others reported alongside
J14 Collector attribution by zone modal scanner, alphabetical fallback I/int_weekly_picker_analysis.sql:6-16 attribute to the agent on the record
J15 Coverage numerator includes access failures (B) or not (D) WI-11 one definition
J16 Satisfaction: non-numeric labels dropped from mean D/email_weekly.go:123-130 closed 0–10 scale; kind measure
J17 QoL / SaS level consolidation, Empty/Misused_bin dropped, two towns only D/email_weekly_charts.go:53-77 levels as SKOS schemes; exclusions declared
J18 Trailing windows count weeks present, not calendar weeks; YTD from 1 January; QoQ uses a March fiscal year for Smashblock D/email_weekly.go:593-622, :693-696, :724 presentation, not methodology; a dashboard roll-up concern
J19 Change rules: points for shares, difference for score, relative for others D/email_weekly.go:834-850 presentation
J20 Payability cut (first_payable_on), holiday multiplier, rate eras apply to pay only M/mart_payable_weights.sql:11-19 keep out of mass indicators (already so)
J21 Bonus split equally among period-site members; period site = most submissions, tie → latest M/mart_recycler_bonus_shares.sql:4-9; I/int_picker_week_site.sql:1-7 operational (bounty rule)
J22 Household counts only from plain-integer answers, frame includes unsigned/terminated I/int_enrollment_latest.sql:28-29 reach frame = eligible points served in period
J23 Follow-up window 7 days, legacy status match dropped D/email_follow_up.go:24-33 verification window parameter
J24 Contaminated = anything but Non_of_above_in_bag S/stg_sorting_evaluation.sql:9-14 contamination definition by material spec
J25 Re-reading a past period can change status-based figures (as-of) M/mart_collection_status_asof.sql:1-15 close a period: freeze outcome claims once the carry-forward window has elapsed

3. Gaps (inferred)

Indicators a standard serving many waste projects plausibly needs that novaWaste2 does not compute. All rows are inferred.

id indicator level why needed what novaWaste2 has toward it
G-01 Diversion rate on a generation basis (waste recovered / waste generated by served households) outcome Municipal and funder targets are stated against generation, not collection WI-01, WI-13; no generation estimate or audit (DD F.5 open)
G-02 GHG emission reductions from recycling (AMS-III.AJ) impact Climate co-benefit claim; carbon finance WI-02 per material, WI-04 sold kg, WI-24 contamination; missing: virgin-material EFs, transport distance, residual disposal, project electricity/fuel at facilities
G-03 GHG avoided by composting organics (AMS-III.F) impact Organic stream is collected and counted as diverted organic kg (WI-01); missing: composting evidence, DOC/MCF parameters, compost output, residual
G-04 Avoided methane from biomass treatment (AMS-III.E) impact Only if a project combusts/gasifies/MBT-treats nothing; flag as not applicable to collection-only projects
G-05 Final disposition / mass balance (collected → sold, composted, landfilled, stockpiled) outcome Closes the loop WI-03 asserts WI-04 balance (recyclables only); no fate records for other streams
G-06 Contamination rate of recyclables (mass basis) and of household bins outcome III.AJ applicability; buyer specs WI-24 (bag pass/fail, unreported); SaS ratings (WI-17)
G-07 Jobs: collectors engaged, person-days, FTE, retention, disaggregated by gender and age outcome Green-jobs claims; SDG 8 WI-23 labels and days; person register exists but not aggregated
G-08 Collector income distribution and adequacy (median weekly income, share above a reference wage) outcome Livelihood claim WI-22 per collector-week; no reference wage, no distribution summary
G-09 Households actively served in period (eligible points with ≥1 collected week × households) output Reach claim on service actually delivered WI-10, WI-13 separately; never joined on a period
G-10 Open burning / illegal dumping reduction outcome Health and air-quality co-benefit burn_waste captured on every evaluation, never reported (M/mart_stand_evaluations.sql:47)
G-11 Bin retention and condition output Asset durability, replacement cost bins_still_available, bin_condition captured, listed only
G-12 Service received as reported by households (triangulates WI-11) outcome Independent verification of scans service_received, bags_received, follow-up collection_status captured, not aggregated
G-13 Service-area coverage (enrolled / occupied points in the area) output Saturation of the target population WI-07, WI-08 exist; “enrolments required” is the gap form only
G-14 Time to service (enumeration → enrolment → placement → first collection) activity Roll-out efficiency dated acts exist; no duration indicator
G-15 Retention / churn rate (terminations ÷ enrolled point-months) outcome Service sustainability WI-20 counts only
G-16 Cost per tonne collected / recovered input/efficiency Comparability across projects payments only cover collector pay
G-17 Waste generation per capita and per household (from audits) input (baseline) Baseline for G-01, G-02 WI-14 is collected-mass intensity, not generation
G-18 Recyclate revenue per tonne by material outcome Market viability recycler payment lines carry kg and amount, not aggregated by material

4. Operational numbers (not indicators)

These feed novaOS task management, payment runs or data-quality review. Note any outcome they hide.

surface and label source what it is hidden indicator
AC “Enrolled, not placed”, “Block without a Service Group”, “Eligible Stands un-scanned in their latest Service Week”, “No access latest week”, “QR gap”, “Evaluation follow-up” counts and lists D/screen_actions.go:20-40; M/mart_actions.sql:1-20 work queues per service point placement backlog (WI-07c); un-scanned latest week (WI-12)
PO “placements required” D/screen_process_overview.go:26 same action count —
SE “Stands with an upcoming Evaluation”, “Scheduled Evaluations ahead” (date, site, n), Planning card (source, latest sample frame, cutover) D/screen_stand_evaluation.go:30-64 evaluation workload —
SE “Evaluations this month, worst first” D/screen_stand_evaluation.go:66 follow-up list evidence rows for G-11, G-12
ES evaluation sample list (stand, site, block, orders, status) D/email_evaluation_sample.go:22-27 daily visit list —
SV Stands table (status, picker, last service, days outstanding, scanned) and “Showing N of M” D/screen_service.go:34-44 per-point work list days outstanding per point (service gap measure)
MS “Missed Stands” (due today, no collection in 7 days, days outstanding) and unverified scans table D/email_missed_stands.go:87-98, :215-237 today’s missed list —
FU follow-up lists (today PDF, week xlsx) D/email_follow_up.go:200-213 field task list —
WC weekday grid, Site jumps, Collections table (cap banner), Corrections panel and History D/screen_waste_collected.go:72, :146-175, :271-310 review tools collector active days (WI-23)
WC weight flag chips and table (slide, transposition, swapped_qr, wrong_picker, missing_usual_day, tracker_no_weight; over/under-reported) D/screen_waste_collected.go:246-291, :957-981; M/mart_weight_flags.sql:1-35 data-entry anomaly review before pay a data-quality rate (flags per 1 000 weighed quantities) could be a verification indicator ?
PY hero “Payable” (R), “Exception collections”, “Waste Pickers”, “Open drafts”; Payable lines (rows, kg, amount); Exceptions (kind, picker, range, rows, kg); Unallocated recycler payments; Period sites and site jumps; statements, drift, rates, holidays, recycler payments, payment slips/statements (typst) D/screen_payments.go:47-262, :1300-1362; D/typst/payment_*.typ payment run (ADR-0027/0029) collector income (WI-22); exception kg = mass collected but not attributable to a person (a traceability measure)
MPK 2.5 pay table (Pay, Bonus, Total) D/screen_meeting_pack.go:91-101 weekly pay review WI-22
MPK “Recycler payments” list D/screen_meeting_pack.go:127-132 invoices of the week WI-04, G-18
MPK Sources page (“no v2 source” boxes) D/screen_meeting_pack.go:35-52 provenance list marks legacy figures with no source: satellite basemap, evaluation Compliance Rate
Mail, Data docs screens D/screen_mail.go, D/screen_data_docs.go admin —

This page explains the standard and does not decide conformance: only the released corpus does. It describes docs/distillation/indicators-and-methods.md at standard version 0.1.0-dev.