novaWaste2 entities, roles, identity rules and vocabulary: distillation
On this page
Sweep scope: entities, roles, identity, vocabulary. Activities/choice lists and indicators/methods are covered by sibling sweeps; rows here point there instead of repeating.
Sources are in ~/novaWaste2. CTX = CONTEXT.md (line of the term). SCH = db/schema.sql (line of CREATE TABLE). ADR-nnnn = arch/adr/. SC = arch/contracts/schema-contract.md. II patterns are from ~/greeningstandard (NCGS ADR-0002 identity, 0003 consignments/lazy creation, 0004 observer roles, 0005 StateClaims, 0007 no personal data, 0018/0025/0027 restatement).
Classifications: generic, project-level, operational, personal. “?” marks a proposal I am unsure of. Proposed terms are proposals only.
Ground rules applied: the graph holds identifiers and roles only (NCGS ADR-0007). An observed state is an aiao:StateClaim about an impactont:State, with the observer as claimant (ADR-0005). A thing gets a urn:uuid: identity when it first becomes individually distinguishable (ADR-0002/0003). A tag/QR is a bearer, never the identity.
1. Concept table
1.1 Place and property
| novaWaste2 term | source | what it is | classification | proposed generic term | II mapping | notes |
|---|---|---|---|---|---|---|
| Town | CTX:12; SCH:8984 | Locality served; tenant row attribute (town_id) on every scoped record |
generic (as concept), project-level (instances) | Service area | Place; project-design element listing service areas; coded to a census-like place scheme (cf. NCGS census place) | has_cadastre, cutover_at, first_payable_on, termination_writes_enabled columns are project/ops config, not standard. Tenancy (RLS) is operational. Standard should never say “town” in normative text. |
| Cadastral Town | CTX:61; SCH:8984 (has_cadastre) |
Town whose land is surveyed into erven | project-level | Cadastre availability (property of a service area) | Project-design declaration | Boolean today; generic form is “which land-parcel register, if any, the project aligns service points to”. |
| Stand | CTX:20; SCH:8617 | Operational property unit serviced; one current Block; may align to Erf(s) | generic | Service point (a Site subtype; NCGS “household stand” site type is the nearest precedent) | Site with urn:uuid identity; point geometry mandatory |
Core unit of service; everything weighed/collected/evaluated is about one. Name is SA-township flavoured; “premises” is the alternative. ? |
| Stand Number | CTX:26; SCH:8617 (nova_stand_number) |
Human label, unique within town, never an identifier | project-level | Service-point label | Literal attribute (like NCGS tagNumber/case label), not identity |
Confirms NCGS pattern: label is display text, identity is the uuid. Uniqueness scope (per service area) is project design. |
| Stand Reference | CTX:80; SCH:9400 | Value a Submission carries naming the Stand (legacy record id; stand or erf) | operational | (none; migration artefact) | Replaced by capture shapes referencing service points by IRI (cf. NCGS ADR-0022) | Exists only because legacy forms reference legacy ids. In a fresh standard the form carries the service point’s urn:uuid (or a bearer code resolved to it). Resolution states (one/many/none) = triage; keep only the rule “only an unambiguous resolution counts”. |
| Block | CTX:33; SCH:4098 | Spatial service area containing Stands; at most one Service Group | generic | Service zone | Site-adjacent spatial entity (polygon) with urn:uuid; versioned | ADR-0022: immutable id, mutable number label, versions, lineage. Strong generic pattern for any project that zones service points. |
| Block Version | CTX:39; SCH:4261 | Immutable number+polygon snapshot | generic | Zone version | Versioned record; supersession via new version, same IRI | Same pattern as NCGS “project version”/location records (new record, never edit). |
| (block lineage) | SCH:4203; ADR-0022 | Predecessor/successor for split/merge | generic | Zone lineage | prov:wasDerivedFrom / ncgs:replaces-style link between new zones |
Split/merge creates new identities; old id never inherited. |
| (stand-block mismatch) | arch/erd/operational.stand_block_mismatch.md | Triage view: stand point outside assigned block polygon | operational | (none) | Validation warning (sh:Warning) |
Geometry validates assignment, never assigns (ADR-0022). Worth a standard rule: explicit assignment wins, mismatch is a warning. |
| Erf / Erven | CTX:45; SCH:4621 | Official surveyed cadastral parcel | project-level | Land parcel (cadastral) | External register entity keyed by its official reference, imported snapshot | Country-specific legal record. erf_ref normalised unique within town (ADR-0021). Standard should allow an optional parcel link, not mandate a cadastre. |
| Stand-erf alignment | CTX:51; SCH:8820, 8927; arch/erd/operational.stand_erf_resolution.md | Many-to-many evidence linking Stand to Erf(s), resolved by rule | project-level | Parcel alignment | Evidence-based links; resolution = derived view over append-only claim sets | ADR-0021 pattern (append-only versioned claim sets, truth derived, manual evidence wins, conflicts surfaced) is reusable far beyond erven. Alignment itself is project-level. |
| Waste Site | CTX:109; SCH:9938 | Place within a Town where waste work happens (sorting/drop-off) | generic | Facility | Site (facility type) with urn:uuid; point geometry | Alternatives: “processing site”, “depot” (CTX says avoid). Distinguish from NCGS/II “site” generally; the type scheme should include facility. |
| Service Group | CTX:115; SCH:8504 | Partition within a Waste Site into groups/service days | project-level | Service round / service group | Project-design element (grouping of zones with a service day) | service_day is a weekday label; scheduling of rounds is a design choice. Also a QR-bearing entity. |
| Period Site | CTX:299 | Waste Site of most of a picker’s weighings in an ISO week | operational | (derived) | Derived value, not stored | Payment rule artefact. |
| Site Jump | CTX:305 | Picker weighs at >1 site in a week | operational | (derived flag) | Derived warning | |
| Route | CTX:127 | One picker’s GPS trail; scans hang off points | generic (concept) ? | Collection route / trail | Activity trace (prov:Activity with geometry) with agent in collector role |
Persistent identifiable GPS tracks of a named worker are personal-data-adjacent: graph keeps agent IRI + role, raw track stays in the ledger/evidence store (ADR-0007 pattern). ? |
1.2 Identity bearers and assets
| novaWaste2 term | source | what it is | classification | proposed generic term | II mapping | notes |
|---|---|---|---|---|---|---|
| QR Code | CTX:133; SCH:8021 | Printed code on a stand, bin, picker or service group; assignment is a validity window | generic | Tag (identifier bearer) | Bearer of identity (NCGS ADR-0002/0003 “tag”); code text only | Matches NCGS rule: code carries a token, not the uuid. Novel here: bearer can be re-assigned over time (window [assigned_at, superseded_at)), globally unique code, one active code per entity, history never rewritten. NCGS tag is one-shot per tree; the standard needs a bearer-window rule. |
| QR assignment window | SCH:8021 | One (code, entity, validity) row | generic | Bearer assignment | Dated assignment record (append-only); time-aware resolution | Scan resolves against the window valid at scan time. |
| Bin | SCH:4009; arch/erd/operational.bin.md | Container asset identified by the QR on it; minted on first scan | generic | Container / bin | Asset with urn:uuid, created when first distinguishable | Textbook NCGS ADR-0003 lazy creation. Deliberately no status machinery. |
| (bin placement) | arch/erd/marts.mart_bin_placements.md | Event: bin placed at a stand | generic (event) | Container placement | Activity record | See activities sweep. |
1.3 Data capture and ingestion
| novaWaste2 term | source | what it is | classification | proposed generic term | II mapping | notes |
|---|---|---|---|---|---|---|
| Form | CTX:69; SCH:5087 | SurveyCTO instrument, keyed (source_system, server_id, form_id) | operational | Capture instrument | Instrument mapping (NCGS: “capture shape/projection”) | Standard defines record shapes; forms are projections (NCGS CONTEXT “Record”). |
| Form Version | SCH:5316 | Immutable per deployed version | operational | Instrument version | Pinned in ledger provenance | |
| Form Question / Form Version Question | CTX:88, 92; SCH:5166, 5387 | Reusable question and its per-version placement (lineage anchor) | operational | Field mapping | Mapping nodes owned by the provider (NCGS ADR-0002) | Form drift absorbed by mapping. Not standard content. |
| Choice List / Choice | CTX:97, 103; SCH:4439, 4376 | Form-local select lists | operational | (form-local) | Each real list becomes a SKOS concept scheme in the standard | Sibling sweep (choice lists). |
| Form registry | SCH:5221 | Ingestion cursor and current-version pointer | operational | |||
| Submission | CTX:74; raw SCH:10235 | One captured response, identified by scoped key | generic (as Record) | Record | Typed graph node (urn:uuid v5 from instrument namespace + submission key; NCGS ADR-0002) |
Never globally unique in source; the standard needs a deterministic record IRI so re-export is idempotent. |
| raw.ingestion_event | SCH:10235 | Immutable event per source revision (scoped key + source_updated_at + payload_hash) | operational | Ledger/raw-store layer, below the graph | Corresponds to “preserve raw submissions” (NCGS ADR-0018). | |
| raw.ingestion_observation / current_submission / submission_conflict | SCH:10357; arch/erd/raw.*.md | Observation log, current view, conflicts | operational | |||
| raw.submission_tombstone | SCH:10554 | Source-absence marker | operational | Not a claim; absence is not a void | Importer never infers a void from absence (CTX:360). | |
| raw.attachment_manifest | SCH:10143 | Attachment refs per submission | operational | Evidence item (content-addressed) | NCGS evidence item with content address | Attachment becomes an evidence artifact by hash. |
| raw.pipeline_run, tracker_ingest_quarantine, reconcile_resolution | SCH:10822, 10981; arch/erd/raw.reconcile_resolution.md | Pipeline run, quarantine, reconcile decisions | operational | |||
| tracker_project_crosswalk, device_heartbeat | SCH:9755, 4494 | Tracker source-to-town map; device telemetry | operational | |||
| migration_crosswalk, migration_exceptions | SCH:5701, 5797 | Legacy-id to canonical-uuid map; triage queue | operational | Pattern worth noting: crosswalk keyed (source system, db, table, source id) is how legacy ids survive as external identifiers. | ||
| stg_* / int_* / mart_* | arch/erd/staging., intermediate., marts.* | dbt derived layer | operational | Derived indicators/views | Not entities; out of scope here. |
1.4 Service-state observations and lifecycle
| novaWaste2 term | source | what it is | classification | proposed generic term | II mapping | notes |
|---|---|---|---|---|---|---|
| Service Week | CTX:139 | ISO week (Monday start) a service round falls in | generic | Service period (week) | time:Interval / period concept; ISO 8601 week |
Canonical ISO week; legacy Sunday weeks mapped. Period length is a project choice; the standard should fix the calendar convention. |
| Collection Status | CTX:145 | Per-stand per-week outcome (collected, no waste, no bin access, …) | generic | Service outcome (per service point per period) | impactont:State observed via aiao:StateClaim; outcome values = SKOS scheme |
Derived from scans + submissions; time-dependent history kept. Value list in sibling sweep. |
| Occupancy Class | CTX:154 | occupied / vacant / non_residential / unknown, consolidated from raw enumeration status | generic | Occupancy state | StateClaim about service point; 4-value SKOS scheme | Raw status kept beside the mapped class. Rule for later enrolment overriding earlier “vacant” is a latest-observation-wins pattern. Mapping rules per project. |
| Eligible Stand | CTX:169 | Stand qualifying for service (placement + signed unterminated enrolment + occupied + active block) | project-level | Eligible service point | Derived determination (cf. NCGS derived determination) | Eligibility rule is a project design choice; the standard should provide the pattern (derived, never captured) not the rule. |
| Termination | CTX:178; SCH:9452 | End of a Stand’s signed enrolment | generic | Service withdrawal / agreement ended | Agreement act (NCGS: withdrawn, formal act) with status derived | Closest to NCGS “Withdrawn”. Event log append-only, latest event wins. Legacy label contract_terminated is a project value. |
| Termination Reversal | CTX:187; SCH:9452 | Termination entered in error; existing enrolment counts again | generic | Withdrawal reversal (error) | Restatement/withdrawal of the termination act (NCGS ADR-0018/0027), NOT a reinstatement | NCGS distinguishes error correction (restatement) from formal reinstatement (new act). novaWaste2 makes the same split: reversal vs restart (new signed enrolment). Direct fit. |
| Enrolment (stand enrolment, signed) | CTX:169, 178 (no own term); arch/erd/staging.stg_enrollment.md | Signed agreement to receive the service | generic | Enrolment / participation agreement | Agreement act + evidence item (signature); NCGS enrolment | Not a glossary term but central. Signatory and signature file are personal/evidence, kept in the file store. |
| Evaluation | CTX:193 | Field visit assessing the service at a Stand | generic | Service evaluation | aiao:Activity subclass (visit) producing a record |
See activities sweep. |
| Evaluation Attempt | CTX:199 | Evaluation with non-completed outcome; a real record, never filtered | generic | Visit attempt | Same activity, outcome value | Aligns with NCGS “every assessed site gets a record” and “withheld is a result”. |
| Scheduled Evaluation / Evaluation Schedule / Schedule Run / Schedule Status | CTX:205, 213, 229, 219; SCH:4719, 4989 | Planned visits, run records, derived outcome | generic (plan) / operational (runner) | Planned visit; schedule run | Monitoring-plan element + scheduled record; status derived | Never edited: cancel or supersede (restatement-like). Missed/attempted/completed derived. Sibling sweep covers workflow. |
| evaluation_schedule_config | SCH:4883 | Per-(town, site) scheduler parameters | operational | |||
| Sample Frame / Visit Week / Cutover | CTX:235, 242, 247 | Legacy weekly draw; its 7-day window; migration switch | operational | Legacy-migration artefacts, not standard. Sampling design itself belongs to the monitoring plan (sibling sweep). | ||
| Action List | CTX:254 | Read-only xlsx lists of stands needing follow-up | operational | |||
| Stand Occupancy Count | CTX:397; SCH:9284 | Household and person counts at a Stand at a date (source enrolment/evaluation) | generic | Occupancy count | StateClaim with count values; observed_on is observed time | Counts only, no individuals: fits NCGS “learners are counted, never identified”. Longitudinal, latest valid wins. |
| Household | CTX:385 | Aggregate measure, never a tracked entity | generic (as measure) | Household (count only) | Not an entity; count property | Explicit design decision (ADR-0014) that matches NCGS ADR-0007. Keep. |
| Weight flag review | SCH:10051 | “No change” review of a high-weight flag | operational | Anomaly review | Review record by reviewer role (NCGS review seat) | Pattern: reviewer is a different agent/role. |
1.5 Waste, payments
| novaWaste2 term | source | what it is | classification | proposed generic term | II mapping | notes |
|---|---|---|---|---|---|---|
| Waste Category | CTX:262; SCH:9898 | Catalog code with bucket (recyclable, non_recyclable, sanitary, organic) and label | generic | Waste category | SKOS concept scheme with skos:broader bucket |
Exact mixed-case codes are legacy; standard should mint stable IRIs, keep legacy code as skos:notation. Sibling sweep covers lists. |
| Project Rate | CTX:270; SCH:7839 | Flat price/kg and holiday multiplier per town over a half-open window | project-level | (none) | Not in standard | Payment term. Half-open validity windows are a good generic pattern for any dated parameter. |
| Public Holiday | CTX:280; SCH:7923 | Dates paying holiday multiplier | operational (and SA-specific) | |||
| Recycler Payment (+ line) | CTX:287; SCH:8185, 8318 | What a recycling company paid for a site’s recyclables | operational | Recyclate sale (revenue) | Possibly an evidence item for a recovery claim ? | The weight sold is indicator-relevant (circularity); the money is not. Voided, never deleted. |
| Recycler Bonus | CTX:293; SCH:6438 | Picker’s equal share of a recycler payment | operational | |||
| Payment Statement (+ day, picker, bonus, row, counter) | CTX:310; SCH:6244, 6554, 6676, 6438, 6782, 6512 | Weekly frozen pay run; draft, signed off, paid; gapless number | operational | Four-eyes sign-off and canceled-number-burned are good audit patterns but not standard content. Money stays out of the standard (II bounties are operational). | ||
| Day Line / Payment Slip / Detail xlsx | CTX:323, 329, 334 | Statement sub-lines and exports | operational |
1.6 Corrections
| novaWaste2 term | source | what it is | classification | proposed generic term | II mapping | notes |
|---|---|---|---|---|---|---|
| Correction | CTX:340; SCH:9581 | Append-only attributed amendment of one captured value; supersedable | generic | Correction | New record that restates the original (NCGS ADR-0018/0025) |
See section 3. Granularity differs: field-level vs record-level. |
| Field Void | CTX:354 | One captured value is void, record stands | generic | Value withdrawal | Restatement omitting/blanking the value, with reason | NCGS has no value-level void; restated record without the value. ? |
| Submission Void | CTX:360 | Whole submission void: the event never happened | generic | Record withdrawal | ncgs:withdraws-style withdrawal of the record’s introduced things; record kept, not counted |
Explicit invalidation only; never inferred from absence. |
| Repair | CTX:348 | Superseding raw event restoring what the source sent | operational | Pipeline layer, outside the graph | Not a correction of the world, of the pipeline. | |
| Supersession of a correction | SCH:9581 (supersedes_id) |
Amending a correction supersedes it | generic | Latest governing correction wins | NCGS: latest governing, IRI ordering on ties. |
1.7 People, organisations, roles
| novaWaste2 term | source | what it is | classification | proposed generic term | II mapping | notes |
|---|---|---|---|---|---|---|
| Person | CTX:369; SCH:6918 | One real human; non-town-scoped identity | personal | (not in graph) | aiao:Agent IRI in the graph; person record stays in a people register |
Graph holds agent IRI + role only (NCGS ADR-0007). Link identifier: a minted agent urn:uuid held in the register against the person row (do not reuse a database PK if that would leak linkability ?). |
| person_identifier (RSA ID, passport) | SCH:7289 | Government identity numbers | personal | Never in graph | Tier 2 definer-only. | |
| person_address, person_contact | SCH:7041, 7169; CTX:442 | Addresses, phones, emails | personal | Never in graph | ||
| Bank, Bank Branch | CTX:449, 454; SCH:3716, 3906 | Reference data for payroll | operational | |||
| bank_account | SCH:3795 | Banking and tax details | personal | Never in graph | ||
| Resident | CTX:380 | Person tied to a Stand (lives, owns, responsible) | generic (role) | Resident / occupant role | Stakeholder aiao:Role of an agent re: a site (NCGS owner/steward/landowner pattern) |
Describes a relationship, not a kind of human. |
| Stand Relationship (person_stand_relationship) | CTX:391; SCH:7645 | resident, owner, head_of_household, responsible_party, other, with dates | generic | Site relationship (role at a site) | Role assignment of an agent to a site, with validity | Types ~ NCGS landowner/owner/steward. head_of_household is household-centric; standard may keep only owner/responsible/occupant. ? |
| Organization | CTX:404; SCH:5925 | Formal entity: Nova, municipality, funder, subcontractor, partner | generic | Organisation | aiao:Agent (organisation) with role |
Not town-scoped; participation is an edge. Household is not an organisation. |
| Organization Town Relationship | CTX:412; SCH:6130 | Org to town edge (provider, municipality, funder, partner) | generic | Organisation participation in a service area | Party-by-role in project design | “Parties by role” is already a project-design section in NCGS. |
| Organization Relationship | CTX:417; SCH:6015 | Directed org to org (contracted by, funds, subcontracts) | generic | Organisation relationship | Role-qualified relation between agents | Keep generic, no contract terms. |
| Person Organization Relationship | CTX:434; SCH:7393 | Employee, municipal contact, subcontractor staff, partner rep | personal/operational | In graph only as agent holds role for an organisation | Who the person is relative to an org; separate from Job Role. The edge itself is HR-ish; only the resulting role at the project goes in the graph. | |
| Organization Scope / Resident Scope | CTX:424, 429 | Derived town visibility | operational | Access-control derivation; not standard. | ||
| Job Role (person_role) | CTX:468; SCH:7507 | Operational function: field_staff, waste_picker, supervisor, admin, other | generic | Operational role | aiao:Role / observer role (NCGS ADR-0004) |
Observer roles grade evidence. Map field_staff to fieldworker, supervisor to supervisor, waste_picker to collector; admin is operational, not an observer role. Contact on role = personal. |
| Waste Picker | CTX:121 | Person performing the service: scans, collects, sorts; identified in legacy by SurveyCTO instance id (uuid: prefix) |
generic (as role) / personal (as person) | Collector (role); the person is an agent | Agent in collector role; observer in role for weighing/scan records |
The role is generic and carries evidence weight. The legacy id is a source identifier held in the register. CTX says avoid “collector”; the generalisation deliberately overrides that (informal-sector context specific to SA). Alternatives: “service operative”, “waste worker”. |
| User | CTX:461; SCH:3644 | App login account, distinct from Person | operational | Standard only needs agent IRIs; logins are resolved by exporters (NCGS ADR-0007). | ||
| Access Role, permission, role_permission, user_role, user_town | CTX:475; SCH:8402, 6871, 8457, 9804, 9851 | RBAC and town membership | operational | |||
| app_credential, app_session, pii_read_log | SCH:3534, 3581, 7767 | Auth and PII audit | operational | |||
| mail_list, mail_subscription, mail_delivery | SCH:5563, 5603, 5482 | Mailing lists | operational |
2. Identity rules found
| Thing | How novaWaste2 identifies it | Refs | Mapping to urn:uuid + bearers |
|---|---|---|---|
| Internal rows | uuid surrogate uuidv7() default on every table; plus (source_system, source_dbname, source_id) provenance |
SCH (all tables); ADR-0012 note in column comment | NCGS requires urn:uuid version 4 (ADR-0002 as glossed in CONTEXT “Identifier contract”); v7 is not v4. Open question 1. |
| Stand | Surrogate uuid; label nova_stand_number unique within town; never a join key; legacy identity via migration_crosswalk (legacy tbl_stand_properties.id); canonical store is operational.stand (ADR-0024); promotion guard rejects UUID-shaped submission ids so an instance UUID never becomes a stand number |
CTX:20-31; ADR-0024; ADR-0026 | Service point gets urn:uuid at enumeration (the moment it becomes distinguishable). Stand Number = label attribute. QR = bearer. Legacy ids = external identifiers. Live identity (where live numbers come from) is a recorded deferral in ADR-0024. |
| Stand to Submission link | By Stand Reference only; resolved via stand_reference (one row per town, reference, candidate); only exactly one candidate counts; others to triage |
ADR-0026; SCH:9400 | In the standard the record references the service point IRI directly (NCGS ADR-0022 capture shapes reference entities by IRI). Resolution table is migration scaffolding. |
| Person | Surrogate uuid; “one human is one Person”; not town-scoped; legacy waste picker id = SurveyCTO instance id with uuid: prefix; gov ids (RSA ID national unique, passport unique within issuing country) on tier-2 table |
CTX:369; ADR-0014; ADR-0020; SCH:7289 | Agent IRI minted for the graph, held against the person in the people register; ids/contacts never exported (NCGS ADR-0007). A QR attached to a person is a bearer of the agent identity; keep the code to person link in the register. |
| QR code | code text globally unique (one print namespace); window [assigned_at, superseded_at); one active code per entity; no overlapping windows in history; exactly one of stand/bin/person/service_group per row |
CTX:133; SCH:8021 | Tag as bearer (NCGS ADR-0002/0003): carries the token only, scan resolves time-aware to the entity valid at scan time. Standard needs the window rule (NCGS has none yet because trees keep one tag). |
| Bin | uuid minted when an unknown bin QR first scanned; identity = its sticker | SCH:4009 | Lazy creation at first distinguishability; same as NCGS tree rule. |
| Block | Immutable canonical id; number is a mutable town-scoped label; versions immutable; boundary fix = new version; split/merge = new ids plus lineage | ADR-0022; SCH:4098, 4261, 4203 | urn:uuid for zone, versions as records; lineage as derivation links. |
| Waste Site, Service Group | uuid; site_code / group_code unique within scope; legacy provenance |
SCH:9938, 8504 | urn:uuid plus code as notation. |
| Erf | uuid; erf_ref normalised unique within town |
ADR-0021; SCH:4621 | External register id as notation on a parcel entity. |
| Town | uuid; town_code slug unique |
SCH:8984; ADR-0031 | Service area IRI; slug as notation. |
| Submission | Scoped key (source_system, server_id, town_id, form_id, submission_id); revisions by source_updated_at; variants by payload_hash; submission_id is the instance UUID, uuid: prefix normalised away in readers; town is part of the key (a change of town is a conflict) |
CTX:74; SC §4 (lines 204-1057); ADR-0016 (not adopted, SC governs); ADR-0031 | Record IRI = deterministic UUIDv5 from instrument namespace + submission key (NCGS ADR-0002 reference exporter); re-export idempotent. |
| Form | (source_system, server_id, form_id); versions immutable; generic town-agnostic forms carry town as a payload field |
CTX:69; ADR-0031 | Instrument identity is provider-owned mapping, not graph identity. |
| Scheduled Evaluation | One per (stand, date) issued in a run; never edited | CTX:205 | Planned record; supersede by new record. |
| Payment Statement | Number <TOWN_CODE>-<year>-<NNNN>, gapless, canceled numbers burned |
CTX:310 | Operational only. |
| Correction | Append-only row, supersedes_id chain, addressed by (scoped submission key, payload_key) |
SCH:9581 | Restatement node with deterministic IRI from submission id + edit instant (NCGS ADR-0025). |
3. Correction / void / termination semantics
| novaWaste2 | Semantics | NCGS/II restatement mapping | Gap or tension |
|---|---|---|---|
Correction (correction_kind='correction') |
Replaces one captured value (payload_key); append-only; attributed (corrected_by, supplier legacy or app); reason NOT NULL; applied in dbt below all marts; amended by supersession (supersedes_id) |
New record restates the original, with reason, observer and time; original stays; latest governing correction wins (ADR-0018/0025) |
(a) novaWaste2 corrects one field; NCGS restates a whole record. (b) NCGS places the correction in the original’s observation-time slot so an old fact corrected today is not a new event; novaWaste2 stores corrected_at as when the correction was made and applies it to the original submission, which by construction also leaves the value in the original week. Confirm that payment periods (frozen statements) never re-read a correction made after sign-off (see open Q5). (c) NCGS requires reason >= 20 chars; novaWaste2 only NOT NULL. |
| Field Void | One value void, record stands | Restatement that omits the value, with reason | NCGS has no value-level void. ? |
| Submission Void | Entire event never happened; app act or legacy is_valid=false; never inferred from absence |
Withdrawal of the record and what it introduced (ncgs:withdraws, withdrawn true), nothing deleted, record kept but not counted (ADR-0027 section 2) |
Only supervisor/office analyst may withdraw under NCGS; check app permission equivalent. Distinguish recording error (withdraw/replace) from a real new event (replanting analogue: new placement, not replace). |
| Supersession of a correction | Amending closes the earlier correction; both remain | Later governing correction; deterministic ordering on ties | Equal. |
| Repair | Superseding raw event when a live row carries another scan’s record | Not a world claim; pipeline-layer | Keep outside the standard. |
| Tombstone | Source-absence marker; newer observation reinstates | Not a claim | Keep outside the standard. |
| Termination | Append-only event; latest event of a Stand is its state; recorded by Person, supplier legacy or app | Agreement act; status derived from acts (“status in force” at observed time) | NCGS requires status read at the record’s time; novaWaste2 reads “latest”, while Eligible Stand and per-week status use dates. Standard should say eligibility is read at the service period. |
| Termination Reversal | Termination was an error; enrolment counts again; restart needs a NEW signed enrolment | Reversal is a restatement/withdrawal of the termination act; restart is a formal reinstatement-like act | Same two-way split as NCGS (ADR-0018 vs reinstatement). Good alignment, worth stating explicitly. |
| Block version | Boundary fix = new immutable version; schedule/collection facts snapshot Block Version, Service Group, Waste Site | Versioned zone records, facts reference version in force | Matches NCGS “point in force”. |
| Scheduled Evaluation | Never edited; cancel or supersede | Plan record superseded by new record | Equal. |
| Recycler Payment / Statement | Voided, never deleted; canceled statements free rows | Operational | Out of scope. |
4. Open questions for the standards body
- Identity version: NCGS says
urn:uuidv4; novaWaste2 keys areuuidv7(). Accept v7 (time-ordered) or mint separate v4 graph IRIs per entity? Same question for deterministic v5 record IRIs. - Is the central unit a service point (stand) at a household/premises, with Site as supertype, or should it be a new class? How does it relate to the NCGS “site” and “household stand” site type?
- Bearer lifecycle: standardise the QR window rule (re-assignment, reuse of a printed code, one active code per entity, time-aware scan resolution) as a general “tag assignment” pattern across standards?
- A bearer attached to a person (picker QR) is linkable to an individual. Keep QR-to-person in the people register only, with the graph carrying agent IRI + role? Same for GPS routes.
- Corrections after payment sign-off: standard should say whether a restatement observed after a period is closed changes the closed period’s claims (NCGS: restatement occupies original slot) or is recognised as a later adjustment.
- Granularity of restatement: value-level (field void/correct) vs record-level (NCGS). Accept record-level only?
- Collector role naming: “collector” vs “waste picker” vs “service operative”; which observer roles grade evidence (collector, supervisor, evaluator, auditor)? Which are mandatory in a project design?
- Zone (Block) versioning and lineage: adopt as a general pattern for any zoned service area? Explicit-assignment-beats-geometry rule as a standard warning.
- Eligibility and occupancy: standard defines the pattern (derived, read at service period) and states, or just the state vocabulary? Which parts are project design?
- Parcel (Erf) alignment: optional link with append-only claim-set evidence, or leave wholly project-level?
- Termination vs reversal vs restart: adopt NCGS agreement-act pattern (withdrawn, reversal-by-restatement, formal reinstatement) verbatim for service agreements?
- Waste Site vs facility types: what is the facility type scheme (sorting, drop-off, landfill, recycler) and how do recycler/offtaker organisations attach as agents?
- Which payment-adjacent facts (weights sold, recycler offtake) are indicator evidence versus bounty/operations? Payments themselves are out; revenue amounts?
- Household counts: keep only counts, never household identity (matches NCGS ADR-0007)? Confirm.
- Route/trail: a standard concept at all, or a capture-channel detail kept in the ledger?
- Time zone and calendar conventions: ISO week, local midnight (Africa/Johannesburg in rates); fix the standard’s period calendar and timezone handling.