Activities and workflows distilled from novaWaste2

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

Sweep: activities, workflows, derived-not-asked values. Entities/vocabulary and indicators/methods are covered by sibling sweeps.

Sources (all read-only). nw2: = ~/novaWaste2/. ref: = ~/novaWasteStandard/reference/surveycto/ (live SurveyCTO definitions of the 27 non-fixture forms, questions.csv / choices.csv).

Towns: mf = Mfidikwe (unsorted, weekday service groups), ik = Ikemeleng, sb = Smashblock (norplats_*); both sorted with QR service groups (nw2:arch/design/surveycto/nova_towns.csv, nw2:arch/adr/0031-generic-town-agnostic-surveycto-forms.md).

Classification: - generic: any waste-service project needs it; belongs in the standard as an activity type. - project-level: a project chooses it or its parameters (design choice the standard should allow, not prescribe). - operational: runs the service or the books; novaOS / platform concern, not a standard activity.

1. Activity table

novaWaste2 form family / process form IDs source paths what happens who (role) what it observes / creates proposed generic activity type classification
stand_enumeration aap_mfidikwe_waste_imp_stand_enumeration_active, aap_waste_imp_stand_enumeration_ACTIVE, aap_waste_imp_stand_enumeration_PILOT, norplats_waste_imp_stand_enumeration_PILOT nw2:dbt/seeds/form_family.csv; nw2:dbt/models/staging/stg_stand_enumeration.sql; nw2:db/migrations/20260707000001_stand_promotion_fn.sql; ref:questions.csv Door-to-door census of every plot in the project area, before recruitment. GPS fix, photo, visible stand / stand-card number, fenced, inhabited / uninhabited structure counts, households and people (ik/mf), owner (mf), occupancy status, proximity of the fieldworker to the plot. Enumerator (field staff) Creates the service point (Stand, operational.stand) and its enumeration block; observes occupancy class (stand_status), headcounts, location Service point enumeration (census of potential service points) generic
enrollment (recruit and enrol) aap_mfidikwe_waste_imp_recruit_and_enroll_active, aap_ikemeleng_waste_imp_recruit_and_enrollment_TRAINING, norplats_Waste_Imp_Recruit_and_Enrollment_Survey_ACTIVE stg_enrollment.sql; nw2:dbt/models/intermediate/int_enrollment_latest.sql; nw2:arch/history/legacy-views/ikemeleng/stand_status_view.sql Visit to an enumerated stand: confirm the stand, consent gates (willing, sober, adult or oldest), study info, participation, sign or defer, photo of signed contract, household QR tag, households and people on stand, baseline disposal practices (organic, recyclable, residual). Recruiter (field staff); respondent = household head / owner Creates the service agreement (signed contract evidence), attaches the household identifier tag (qr_code_household), baseline practice observation Household enrolment (consent + service agreement) plus baseline practice survey generic (consent gates and agreement); baseline survey project-level
bin_placement aap_mfidikwe_waste_imp_bin_placement_active, aap_ikemeleng_waste_imp_bin_placement_survey_ACTIVE, norplats_Waste_Imp_Bin_Placement_Survey_ACTIVE stg_bin_placement.sql; nw2:dbt/models/marts/mart_stand_status.sql; mart_bin_placements.sql Deliver the container set (3 bins: recyclable, non-recyclable, organic; ik big/small set; mf bags), scan bin QR, photo, give bags, give separation training, record owner confirmation. sb distinguishes first deployment vs re-deployment. Placement team (field staff); respondent Creates the container (Bin) and its QR assignment; observes bags given, training given; placed rung Container deployment (incl. redeployment) and separation-at-source training generic (deployment); training generic but bundled here (see inferred row)
qrcode_replacement aap_mfidikwe_waste_imp_qrcode_replacement_active, aap_ikemeleng_waste_imp_qrcode_replacement_ACTIVE, norplats_Waste_Imp_QRcode_replacement_ACTIVE stg_qrcode_replacement.sql; nw2:db/migrations/20260802000002_create_qr_registry.sql Replace a lost/damaged stand or bin QR tag: scan old, place new, photo. Field staff Supersedes an identifier assignment window (operational.qr_code) Identifier (tag) maintenance generic (any project using physical tags)
wp_enrollment aap_mfidikwe_waste_imp_wp_enrollment_active, aap_ikemeleng_waste_imp_wp_enrolment_survey_ACTIVE, norplats_waste_imp_wp_enrolment_survey_active stg_wp_enrollment.sql; nw2:db/migrations/20261007000500_promote_wp_enrollment.sql Register a waste picker: name, QR lanyard, home sorting facility. Supervisor Creates the collector (Person with role waste_picker) and their QR tag; site assignment Collector enrolment (service-provider workforce registration) generic
Location-tracker rounds (no SurveyCTO form) tbl_waste_picker_route, tbl_waste_picker_log, tbl_waste_picker_route_qrcode (tracker table names act as form IDs) nw2:services/location-tracker-ingest/API.md; stg_picker_route.sql, stg_picker_log.sql, stg_picker_qr.sql; nw2:dbt/models/intermediate/int_qr_scan_resolution.sql, int_stand_scan_daily.sql Picker’s phone app logs GPS track, free-text log entries and a QR scan per stand/bin collected, with a description (collection / collection no qr / no collection / no waste / no stand access). Waste picker (collector) Service event per stand-day (scan resolved to stand or bin); route trace Kerbside collection round (service event at a service point) generic (the event); tracker app is project-level instrument
collection sorted mode (weigh + sort) aap_ikemeleng_waste_imp_hws_wp_waste_records_sort_facility_ACTIVE, norplats_Waste_Imp_HWS_WP_Waste_Records_Sort_Facility_ACTIVE; pilot nova_waste_collection stg_collection.sql, stg_collection_weight.sql; nw2:arch/design/surveycto/nova_waste_collection.xlsx; nw2:db/migrations/20261007000300_create_waste_category.sql At the waste sorting facility (WSF) a picker’s load is sorted into 27 material groups and each weighed; scan picker QR and service-group QR; rate separation quality; note contamination issues. Facility operator / fieldworker; collector present Mass by material category per collector per service group per day; separation-compliance rating Material recovery: sort and weigh (MRF / buy-back intake) generic (weighed material by category); category granularity project-level
collection unsorted mode aap_mfidikwe_waste_imp_waste_facility_weighing_survey_active; pilot nova_waste_collection (collection_mode = unsorted) same; ref:questions.csv (Waste_weight_repeat) Repeat of scale batches (≤50 kg) after a zero/kg scale check; service group picked by weekday. Facility operator Mass per batch, uncategorised (unsorted) Weighing at receiving facility (unsorted intake) generic
sorting_evaluation norplats_wsf_sorting_evaluation_active, wsf_sorting_evaluation_active1 stg_sorting_evaluation.sql; mart_sorting_evaluations.sql Audit of bags at the facility: per bag, does it contain recyclable / organic / none; photo. Evaluator (field staff) Bag-level contamination observation (contaminated derived) Stream contamination audit (residual-stream quality check) generic
collection_follow_up aap_mfidikwe_service_followup_active, aap_ikemeleng_waste_imp_follow_up_active, norplats_waste_imp_follow_up_active stg_collection_follow_up.sql; mart_collection_follow_ups.sql; nw2:arch/history/legacy-views/mfidikwe/collection_followup_view.sql Visit a stand whose week was missed / never collected: confirm stand and tags, reason for missed or never collected, bins still there, bin condition and use, what the household does with streams lacking a bin, picker conduct, complaints. Fieldworker; household respondent Service-failure reason; container status; complaint Service exception follow-up (missed-service investigation) generic
stand_evaluation aap_mfidikwe_stand_evaluation_active, aap_ikemeleng_waste_imp_fw_stand_evaluation_ACTIVE, norplats_Waste_Imp_FW_stand_evaluation_ACTIVE stg_stand_evaluation.sql; mart_stand_evaluations.sql; nw2:db/migrations/20260805000003_create_evaluation_scheduler.sql; mart_evaluation_schedule_status.sql Scheduled sample visit to an eligible stand: container presence/condition/use, per-bin separation quality (ik/sb), leakage to other pickers, organic and residual disposal outside the service, service received, bags received, burning, satisfaction (0/1–10), three perceived-change scales, complaints. mf adds put-out, uncollected waste fate, bag use, participation of all households, evaluator comments. Evaluator (field staff); household respondent Monitoring observation of a service point; attempt outcome Service point monitoring visit (sampled evaluation) generic (visit); question set split: separation quality, leakage, burning = generic; satisfaction/QoL = project-level (social indicators)
Evaluation scheduling (scheduler) none (operational tables) nw2:db/migrations/20260805000003_create_evaluation_scheduler.sql; nw2:arch/history/legacy-workflow-map.md; mart_evaluation_schedule_status*.sql; mart_stand_eligibility.sql Per (town, waste site) config of start date and evaluations per day; each run issues scheduled visits for eligible stands with a snapshot of block version, service group, site, service day (ADR-0022). Issued rows only change status (issued → cancelled / superseded). System (scheduler) under project manager config Sample frame and visit plan Monitoring plan / sample draw project-level (sampling design); the issuance is operational
Stand termination none (app: app.record_stand_termination) nw2:db/migrations/20261006000002_create_stand_termination_event.sql, 20261010000300_create_stand_termination_api.sql; nw2:db/legacy/import_terminations.sql Record that service to a stand ends (termination) or that a termination was in error (reversal); comment required. Restart = new signed enrolment. Project manager / supervisor (app user) Termination event Service exit (agreement termination) generic
Block / service group assignment none (operational) nw2:arch/adr/0022-canonical-blocks-and-service-assignment-snapshots.md; nw2:db/migrations/20260805000002_create_block_foundation.sql; int_stand_collection_meta.sql Stands grouped into blocks; a block is assigned a service group (collector + weekday + waste site). Project manager Service route and service day per stand Service route planning operational (route), project-level (service frequency)
Collector pay statement none (app) nw2:arch/adr/0027-waste-picker-payment-statements.md, 0029-flat-rate-holiday-recycler-bonus.md; nw2:db/migrations/20261010000100_create_payment_statement_tables.sql; mart_picker_pay_weekly.sql Weekly statement per town: payable kg × project rate (holiday ×2), recycler bonus shares; draft → signed_off (four-eyes) → paid, or rejected/canceled. Finance preparer, approver Payment to collectors Collector remuneration operational (payment); “collectors are paid per kg” is a project-level benefit-sharing design
Recycler offtake recording none (app) nw2:arch/erd/operational.recycler_payment.md, operational.recycler_payment_line.md; mart_site_recycling_balance.sql; mart_recycler_bonus_shares.sql Record a recycler’s invoice for a site’s recyclables: recycler, invoice no., date, lines (material text, kg, price), mapped to waste category when known. Finance / site manager Offtake of material from site (kg, money); bonus to site’s pickers Material offtake to recycler (chain of custody out of the facility) generic (offtake evidence); bonus split project-level
Weight flag review / submission correction none (app) mart_weight_flags.sql; nw2:arch/erd/operational.weight_flag_review.md; nw2:db/migrations/20260821000001_create_submission_correction.sql, 20261010000200_create_correction_functions.sql Data QA: flags (slide, transposition, swapped_qr, wrong_picker, missing_usual_day, tracker_no_weight); reviewer corrects a value, voids a field or submission, or marks “no change”. Data reviewer Correction / void records over submissions Record correction / restatement operational (maps to greening ADR-0018/0025/0027 restatement, a platform concern)
Household waste sample collection (2022) norplats_aq_waste_hhcollection ~/smashWaste/data/Vraelyste/norplats_aq_Waste_HH-Collection.xlsx Collect a household’s dry and wet waste sample (QR-tagged bags), GPS, special events since last visit, photo. Fieldworker Sample with household link Waste generation sampling generic (baseline / generation-rate method)
Household waste sample analysis (2022) norplats_aq_waste_hh_analysis ~/smashWaste/data/Vraelyste/norplats_aq_Waste_HH_Analysis.xlsx Weigh and estimate volume (fill level) of dry/wet samples; characterise into 13 waste types with weights; split recyclable vs non-recyclable with weights and volume. Lab / field analyst Composition by mass and volume; recyclable share Waste characterisation (composition analysis) generic
Waste site registration none seen as a form; operational.waste_site seeded by migration nw2:arch/erd/operational.waste_site.md; nw2:db/legacy/dispositions.sql (tbl_waste_site) — Project manager Facility entity Facility registration generic — inferred (no capture activity seen)
Separation training / awareness only as a field (training_seperation) in ik/sb placement ref:questions.csv; stg_bin_placement.sql — Trainer Training session evidence Awareness / separation-at-source education generic — inferred as its own activity
Residual disposal to landfill none — (compare ~/ii-test-standard/glossary/ccts-glossary.ttl ccts-cs:landfilled) Non-recyclable and sanitary streams are weighed at the WSF (weight_non_recyclable, weight_sanitary_waste) but their onward route is not recorded. Facility operator / municipality Delivery to landfill with receipt Residual delivery to disposal site generic — inferred
Organic processing none — Organic waste is weighed (weight_organic_waste) but its fate (compost, feed, landfill) is not recorded. Facility / composter Compost batch, offtake Composting / organic treatment generic — inferred
Community clean-up none — (compare ccts-cs:DisposalRoutes) — Volunteers, organiser Litter collected, mass, route Clean-up event generic — inferred
Container retrieval none (termination records no bin retrieval; placement re_deployement covers re-issue only) stg_bin_placement.sql — Field staff Container returned / written off Container retrieval / write-off generic — inferred
Scale verification only the per-batch waste_weight_scale_check (mf) ref:questions.csv — Facility operator Calibration record Measuring instrument check generic — inferred (as a QA activity)
Complaint / grievance only as fields (HH_comments, HH_comments_explain) in follow-up and evaluation ref:questions.csv — Household; project manager responds Grievance and resolution Grievance handling generic — inferred (safeguard)

2. Workflow sketch

Step state below is what novaWaste2 derives in dbt marts; novaOS would derive the same from process graphs over the ledger (~/novaOS/README.md). Tags: [S] schedule- or calendar-derived (novaOS: depends on as_of, plans, windows); [N] standard-normative (what counts as done or allowed); [P] project parameter.

W1. Service point lifecycle (subject: Stand)

order step readiness condition (cite) completion condition (cite) tag
1 Enumerate Stand lies in a project enumeration block (enumeration_block, stg_stand_enumeration.sql) Enumeration submission with stand_status; promoted to operational.stand (operational.promote_stand_enumeration(), nw2:db/migrations/20260707000001_stand_promotion_fn.sql); ladder rung enumerated (mart_stand_status.sql:124-130) N
2 Recruit and enrol Stand exists and the visit resolves to it by Stand Reference (nw2:arch/adr/0026-submission-links-stand-by-stand-reference.md); consent gates: willing = Yes, sober = Yes, age in {Yes, Not_18_but_oldest_in_hh}, study_info = Yes (legacy stand_status_view.sql:30-37) discuss_family_or_sign = 'Sign' with an enrolled_on (mart_stand_status.sql rung enrolled; int_enrollment_latest.sql). Legacy: signed contract document uploaded (uploaded / outstanding, stand_status_view.sql:43-46). Legacy Unreachable after ≥5 failed and 0 successful attempts (stand_status_view.sql:29) N (gates, signature); P (5-attempt rule)
3 Deploy containers Signed enrolment and no successful placement (mart_actions.sql enrolled_not_placed) Latest placement succeeded: mf provide_bags = 'Yes', ik/sb suitable_respondent_available = 'Yes' → rung placed (mart_stand_status.sql:127-128); bin QR captured (qr_code_bin) N (container in place + tag); P (town-specific success test, owner question #418 in mart_stand_eligibility.sql:11)
4 Assign service route Placed and signed (mart_actions.sql block_unassigned) Block not retired and has a Service Group (leg_serviced_block, mart_stand_eligibility.sql:16-17) → nominal service day (int_stand_collection_meta.sql) P
— Eligible Stand gate — is_eligible = leg_placed ∧ leg_signed_enrolment ∧ leg_occupied ∧ leg_serviced_block (mart_stand_eligibility.sql:6-17,180-182); occupancy from enumeration status, overridden to occupied when enrolment and placement post-date the enumeration (mart_stand_eligibility.sql:19-29) N
5 Collect (recurring, per ISO service week) Eligible; the week’s service day has arrived (last_service_date <= as_of, mart_collection_status_asof.sql) Scan in the week → collected / no-waste / no-bin-access / no-stand-access from tracker description (mart_collection_status.sql:212-218); otherwise pending-service (service day = today), carried status if last collection < 8 days ago, recent-placement (placed < 8 days, never collected), else un-scanned (mart_collection_status_asof.sql, “statused”) S (week, day, 8-day window); N (what counts as a collection: a scan resolved to the stand or its bin, int_qr_scan_resolution.sql, int_stand_scan_daily.sql)
6 Follow up exceptions Week status in {un-scanned, no-waste, pending-service} and placement before service date (legacy collection_followup_view.sql); v2 action lists unscanned_latest_week, no_access_latest_week, qr_gap (mart_actions.sql:5-17) Follow-up submission with confirm_stand and a reason (stg_collection_follow_up.sql); the action drops when the next week’s status changes S (trigger is week status); N (a missed service must be investigated — candidate)
7 Monitor (sampled evaluation) Eligible; scheduler config exists for the site and start_date reached (evaluation_schedule_config); row issued with scheduled_date (20260805000003_create_evaluation_scheduler.sql) Schedule status completed = any evaluation of the stand in the visit window with attempt_outcome = 'completed' (respondent available); attempted = only attempts (no_respondent / wrong_stand); missed = no visit and scheduled_date < as_of; window = the day, or the frame week for legacy_sample runs (mart_evaluation_schedule_status.sql:9-17, mart_evaluation_schedule_status_current.sql:3-15); attempts feed evaluation_follow_up (mart_actions.sql:16) S (scheduled date, window, missed); N (completion = respondent interviewed at the right stand); P (evaluations per day, frame)
8 Maintain tags Placed stand with a lost/damaged tag (qr_gap, mart_qr_coverage_gap.sql) New QR assignment window opened, old superseded (operational.qr_code, 20260802000003_create_qr_promotion_fn.sql) N
9 Exit Any time; app row needs recorded_by and non-empty comment (stand_termination_event_supplier_shape_chk) Latest event termination and no later signed enrolment → contract_terminated; a later signed enrolment restarts service; reversal cancels (mart_stand_status.sql:14-17) N

W2. Collector and material flow (subject: Waste Picker / Waste Site)

order step readiness completion tag
1 Enrol collector — wp_enrollment with wp_qr_code and wsf_site → Person + QR (20261007000500_promote_wp_enrollment.sql) N
2 Collect round Collector has active QR; block assigned to collector’s service group Tracker scans per stand (W1 step 5) S
3 Weigh at facility WP_id resolves to a person QR at started_at, WP_house_group to a service group (int_collection_payee.sql:35-39) Collection with ≥1 weight (pilot note_no_waste blocks empty unsorted submissions, nova_waste_collection.xlsx); payee exception NULL N (weighed, attributed)
4 Quality-check weights Collection on/after first_payable_on No open flag in mart_weight_flags (or reviewed “no change”) operational
5 Pay collectors Week closed (ISO Mon–Sun); rows payable Statement signed_off by a user other than the preparer, then paid (payment_statement_four_eyes_ck, nw2:arch/erd/operational.payment_statement.md) S (week); operational
6 Offtake to recycler Recyclables accumulated at site Recycler payment recorded with lines; site balance collected vs invoiced kg per month (mart_site_recycling_balance.sql) N (offtake evidence)

W3. Facility stream audit (subject: Waste Site)

sorting_evaluation has no scheduler or readiness test in code; completion = bag repeat with material_inside_bag per bag (stg_sorting_evaluation.sql). Tag: P (frequency), N (contamination definition: any recyclable or organic found in a residual bag).

Notes on conditions

  • novaWaste2 stores no step state: ladders and schedule statuses are views over facts evaluated at as_of (mart_collection_status.sql:1-11, mart_evaluation_schedule_status_current.sql). Same posture as novaOS.
  • Scheduled vs unscheduled evaluations: completion is matched by stand and window, so an evaluation outside any issued row is kept but counts toward no schedule row. Same split as greening ADR-0020.
  • Town-specific rules to lift into project parameters: placement success test, 7 vs 8-day carry window (mart_collection_status.sql:25), sorted vs unsorted collection mode, scan vs weekday service group (nova_towns.csv).
  • Candidate ncgs:appliesWhen style conditions: SaS bin rating only where containers are separated streams (ik/sb, stg_stand_evaluation.sql sas_versions); weighing by category only when collection_mode = sorted.

3. Derived, not asked

Values novaWaste2 computes. Per greening ADR-0028 these stay off forms.

value derived from where
Business date of every event (enumerated_on, enrolled_on, placed_on, collected_on, evaluated_on, …) form starttime, SA-local nw2:dbt/macros/family_staging.sql business_date
Position (geom, lat, lon) geopoint string family_staging.sql gps_lat_lon, make_point_4326
Stand of a submission Stand Reference (id) stg_* join to stg_stand_reference
Waste site of a follow-up / evaluation / collection site code or service group QR stg_collection.sql, stg_collection_follow_up.sql
Collector (payee) of a weighing WP_id QR resolved at started_at; payee exception int_qr_scan_resolution.sql, int_collection_payee.sql
Collector’s period site per ISO week modal site of week’s weighings int_picker_week_site.sql
Waste category of a weight row; unsorted when none; reporting bucket weight_* field name stg_collection_weight.sql; operational.waste_category
Stand status ladder (enumerated < enrolled < placed; contract_terminated) enumeration, enrolment, placement, termination mart_stand_status.sql
Occupancy class (occupied / vacant / non_residential / unknown) enumeration stand_status + later enrolment/placement mart_stand_eligibility.sql
Eligible Stand and its four legs ladder, enrolment, occupancy, block mart_stand_eligibility.sql
Nominal service date; observed service date; modal collector; block missed service group weekday; tracker scans int_stand_collection_meta.sql, int_weekly_picker_analysis.sql
Collection status per stand-week, n_days_placed, n_days_outstanding, last_collection_date scans, placement, as_of mart_collection_status.sql, mart_collection_status_asof.sql
Evaluation attempt_outcome (completed / no_respondent / wrong_stand / unknown) confirm_stand, suitable_respondent_available stg_stand_evaluation.sql
SaS rating per stream incl. Empty, Misused_bin, Missing_bin bins_still_available, SaS_*_waste, SaS_*_quality stg_stand_evaluation.sql:83-93
Schedule status (completed / attempted / missed / scheduled) schedule row, evaluations, as_of mart_evaluation_schedule_status_current.sql
Bag contaminated material_inside_bag <> 'Non_of_above_in_bag' stg_sorting_evaluation.sql
Weight flags and suggested corrections 90-day collector statistics mart_weight_flags.sql
Pay, holiday multiplier, statement totals, recycler bonus shares, site recycling balance rate eras, holidays, recycler payments ADR-0029; mart_picker_pay_*, mart_recycler_bonus_shares.sql, mart_site_recycling_balance.sql
Action lists eligibility, ladder, latest week status, QR gaps mart_actions.sql
QoL level (0–4) and consolidated SaS level answer codes nw2:services/dashboard/email_weekly_charts.go
Legacy: Unreachable; contract upload status attempt counts; document table legacy-views/ikemeleng/stand_status_view.sql
In-form calculates: collection_mode, service_group_mode, warning thresholds, WP_house_group (pilot); enrolment_outcome, calculate_success, calculate_revisit_required, gps_difference, calculate_bin_size, *_pl preloads server dataset nova_towns, prior records nova_waste_collection.xlsx; ref:questions.csv

Still asked although the ledger knows it (ADR-0028 candidates for the generic forms): - sorting_facility / site_name, enumeration_block / block_number: follow from the stand’s block and service group. - Follow-up collection_status (Missed / Never collected): follows from the collection-status mart (nw2:arch/erd/staging.stg_collection_follow_up.md already calls it “prefilled”). - hh_count_stand at placement: repeats the enrolment hh_on_stand. - deployment_type: follows from earlier placements of the stand. - mf follow-up week_day: follows from the service group. - WP_house_group service-group scan: follows from the collector’s assignment, except when the collector covers several groups. - town on generic forms (ADR-0031): follows from the scanned stand or collector QR. ADR-0031 itself flags wrong-town picks as a new failure mode. - enumerator: comes from the login.

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