Visit data standard
Supplier specification for pseudonymised domiciliary care visit extracts. Contact minutes are actual end minus actual start. Only visits with both actual times are delivered visits.
Assessment criteriaCSV fields
visit_id,person_ref,worker_ref,shift_ref,core_team_flag,visit_zone,worker_zone,planned_start,planned_end,actual_start,actual_end,planned_travel_min,route_travel_min,route_miles,travel_mode,paid_minutes,change_date,change_reason,intro_flag,notice_date
- Times: ISO 8601 with an offset (including Z). Dates: YYYY-MM-DD.
- core_team_flag and intro_flag: Y or N. Visit and worker zones must be domiciliary care provider zone codes.
- travel_mode: car_petrol, car_diesel, car_hybrid, car_plugin_hybrid, car_electric, car_unknown, public_transport, walk, cycle.
- change_reason: blank, person_request, sickness, leave, vacancy, rescheduling or other. Provide change_date when a reason is present.
- paid_minutes includes the visit plus preceding travel and waiting time.
- A leg is a delivered visit other than the first in the worker’s shift, ordered by actual_start within worker_ref and shift_ref. Travel minutes and miles describe that preceding leg; leave all three travel fields blank on the first visit.
- Package band: visits in the final 28 days ÷ 4, classified using the configured weekly band boundaries.
- Raw visit_id, person_ref, worker_ref and shift_ref are browser-hashed with SHA-256 over salt + “:” + value. Names and addresses are never requested. Double-handed visits need one row per worker, each with its own visit_id.
Monthly formulas
- TK1 · Travel-to-contact ratio
- Sum of route travel minutes over legs ÷ sum of contact minutes.
- TK2 · Driving per contact hour
- Sum of route miles over legs with car_ travel mode ÷ sum of contact hours.
- TK3 · Paid hours per contact hour
- Sum of paid minutes ÷ sum of contact minutes.
- TK4 · Zero-travel scheduling
- 100 × legs with planned travel minutes below route travel minutes ÷ all legs.
- TK5 · In-zone delivery
- 100 × visits where worker zone equals visit zone ÷ delivered visits.
- TK6 · Late rota changes
- 100 × visits changed within late_change_days before planned start, excluding person_request ÷ delivered visits.
- TK7 · Travel emissions
- 100 × sum of route miles × travel-mode factor (kg CO₂e per mile) over legs ÷ contact hours. Conversion factors not set means unavailable; factors are never guessed.
- CK1 · Core-team continuity
- 100 × visits with core_team_flag Y ÷ delivered visits.
- CK2 · Different workers
- Median distinct workers per person, by package band, in the last 28 days of the calendar month.
- CK3 · Continuity of care index
- Median per-person Bice–Boxerman index by package band: (sum of n_j² − n) ÷ (n × (n − 1)), where n_j is visits from worker j and n is total visits; only people meeting coc_min_visits.
- CK4 · New-face rate
- 100 × visits by a worker with no earlier delivered visit to that person in new_face_lookback_days ÷ delivered visits. Unavailable until complete look-back history is present.
- CK5 · Introduced before solo
- 100 × new-face visits with intro_flag Y ÷ new-face visits.
- CK6 · Advance notice
- 100 × visits where notice_date is at least rota_notice_days before planned start ÷ delivered visits.
- CK7 · Continuity survey
- Yes to both ‘I usually know who is coming’ and ‘I mostly see workers I know’ ÷ survey responses (shown as a percentage).
Pilot settings and acceptance
Draft — calibrate in pilot. A month must cover the whole calendar month and meet the quality limits. Quality results also flag duplicate IDs, long visits, worker overlaps, implausible legs and unknown zones. Include the previous 3 months in the first upload for new-face checks.
- new face lookback days
90
- coc min visits
4
- rota notice days
7
- late change days
7
- package bands visits per week
[ 7, 14, 28 ]
- ghg conversion factors
null
- data quality
{ "max_visit_minutes": 480, "max_zero_visit_days": 1, "implausible_leg_miles": 60, "max_flagged_visit_pct": 1, "implausible_leg_minutes": 120, "min_actual_coverage_pct": 95 }- data checks
{ "C2": { "3": [ { "op": ">=", "kpi": "CK5", "value": 80, "months": 3 } ], "4": [ { "op": ">=", "kpis": [ "CK5", "CK6" ], "value": 90, "months": 6 } ], "5": [ { "op": ">=", "kpis": [ "CK5", "CK6" ], "value": 95, "months": 12 } ] }, "C3": { "5": [ { "op": "<", "kpi": "CK4", "value": 5, "months": 12 } ] }, "C4": { "3": [ { "op": "exists", "kpis": [ "CK1", "CK2", "CK3", "CK4" ], "months": 3 } ], "4": [ { "op": "exists", "kpis": [ "CK1", "CK2", "CK3", "CK4", "CK5", "CK6", "CK7" ], "months": 6 } ], "5": [ { "op": "exists", "kpis": [ "CK1", "CK2", "CK3", "CK4", "CK5", "CK6", "CK7" ], "months": 12 } ] }, "C5": { "3": [ { "op": "any", "months": 3, "alternatives": [ { "op": "improved_points", "kpi": "CK1", "value": 5, "months": 3 }, { "op": ">=", "kpi": "CK1", "value": 70, "months": 3 } ] } ], "4": [ { "op": "any", "months": 6, "alternatives": [ { "op": "improved_points", "kpi": "CK1", "value": 10, "months": 6 }, { "op": ">=", "kpi": "CK1", "value": 80, "months": 6 } ] }, { "op": "rising", "kpi": "CK3", "months": 6 } ], "5": [ { "op": "peer_top_quartile", "kpis": [ "CK1", "CK3" ], "months": 12 } ] }, "C7": { "3": [ { "op": "count_in_last_months", "kpi": "CK7", "value": 1, "months": 12 } ], "4": [ { "op": "count_in_last_months", "kpi": "CK7", "value": 2, "months": 12 } ] }, "T1": { "3": [ { "op": ">=", "kpi": "TK5", "value": 70, "months": 3 } ], "4": [ { "op": ">=", "kpi": "TK5", "value": 85, "months": 6 } ], "5": [ { "op": ">=", "kpi": "TK5", "value": 95, "months": 12 } ] }, "T2": { "3": [ { "op": "<", "kpi": "TK4", "value": 5, "months": 3 } ], "4": [ { "op": "<", "kpi": "TK4", "value": 2, "months": 6 } ], "5": [ { "op": "<", "kpi": "TK4", "value": 1, "months": 12 } ] }, "T3": { "3": [ { "op": "exists", "kpi": "TK6", "months": 3 } ], "4": [ { "op": "<", "kpi": "TK6", "value": 10, "months": 6 } ], "5": [ { "op": "<", "kpi": "TK6", "value": 5, "months": 12 } ] }, "T4": { "3": [ { "op": "exists", "kpis": [ "TK1", "TK2", "TK3", "TK5" ], "months": 3 } ], "4": [ { "op": "exists", "kpis": [ "TK1", "TK2", "TK3", "TK4", "TK5", "TK6" ], "months": 6 } ], "5": [ { "op": "exists", "kpis": [ "TK1", "TK2", "TK3", "TK4", "TK5", "TK6", "TK7" ], "months": 12 } ] }, "T5": { "3": [ { "op": "any", "months": 3, "alternatives": [ { "op": "improved_pct", "kpi": "TK1", "value": 5, "months": 3 }, { "op": "improved_pct", "kpi": "TK2", "value": 5, "months": 3 } ] } ], "4": [ { "op": "improved_pct", "kpis": [ "TK1", "TK2" ], "value": 10, "months": 6 } ], "5": [ { "op": "peer_top_quartile", "kpis": [ "TK1", "TK2" ], "months": 12 } ] } }