18 SEPTEMBER 2026 · dbMigrations · columns only

Just the columns

The four tables the Scheduling Assistant adds, and what each column holds for a capture project. Keys, indexes and constraints are left off on purpose — they are on Tables in detail.

capture_schedulesone row per wave of onsite work

columnwhat it holds
columnidholdsThe schedule’s number. Used by the API and by Edit / Delete on the schedules table.
columnschedule_capex_idholdsThe code people see — CS-93AT2329. Issued automatically when the row is created, never reused.
columncapture_project_idholdsThe capture project this wave belongs to — the numeric id behind CP-8961C6T1.
columnlead_user_idholdsThe lead capturer for this wave — the person with the crown. Empty until one is picked.
columnstart_dateholdsFirst day of the wave, e.g. 2026-10-01.
columnend_dateholdsLast day of the wave, e.g. 2026-10-31. Every visit falls between the two.
columnstatusholdsWhere the wave is: draftpublishedin_progresscompleted, or canceled.

capture_visitsone row per facility per day

columnwhat it holds
columnidholdsThe visit’s number.
columncapture_schedule_idholdsWhich wave this visit is part of.
columncapture_project_idholdsWhich capture project — the same project as the wave and the facility.
columncapture_project_site_idholdsWhich facility — a row of the project’s site list, e.g. Bergan Mercy Surgery Center.
columnvisit_dateholdsThe day the team is on site there, e.g. 2026-10-06. The same facility on another day is another row.
columnhoursholdsThe planned hours at that facility that day, e.g. 8. The “Hours” cell in the day-by-day preview.
columnnotesholdsAnything the team needs to know for that day, e.g. escort required after 15:00.

capture_visit_membersone row per person per facility-day

columnwhat it holds
columnidholdsThe row’s number.
columncapture_visit_idholdsWhich visit — that is, which facility on which day.
columnwork_dateholdsThe day worked — always the visit’s date, kept here so a person’s day can be read from this table alone.
columnuser_idholdsThe capturer.
columnhoursholdsHow many hours they work at that facility that day, e.g. 4. Typed in, defaulted to the visit’s hours. Their rows across every facility and project that day add up to the daily cap — 8 for now.

capture_project_blackout_datesone row per closure

columnwhat it holds
columnidholdsThe closure’s number.
columncapture_project_idholdsWhich capture project is closed.
columnstart_dateholdsFirst closed day, e.g. 2026-10-07.
columnend_dateholdsLast closed day, e.g. 2026-10-08. A single closed day repeats the date: 2026-10-10 / 2026-10-10. “7–8 October and 10 October” is two rows.
columnnotesholdsWhy, e.g. inventory count, holiday.

On every tablethe same five columns

columnwhat it holds
columncreated_byholdsWho created the row.
columnupdated_byholdsWho last changed it.
columncreated_atholdsWhen it was created.
columnupdated_atholdsWhen it was last changed.
columndeleted_atholdsWhen it was removed — empty while the row is live. Rows are never physically deleted.

Existing columns it readsnothing new here

columnwhat it holds
columncapture_projects.idholdsThe project’s number — what the build-team URL carries (?project=1).
columncapture_projects.project_codeholdsThe project’s code — what the dashboard URL carries (?project=CP-8961C6T1).
columncapture_projects.project_lead_idholdsThe project-level lead, shown on the project card.
columncapture_projects.target_start_date / target_end_dateholdsThe project’s overall window; waves are planned inside it.
columncapture_project_sites.idholdsThe facility’s number — what a visit points at.
columncapture_project_sites.nameholdsThe facility’s name as shown in the schedules table and the preview.
columncapture_project_sites.facility_account_idholdsThe facility’s account once it exists; empty while the site is only an uploaded row — which is why the schedule points at the site, not the account.
columnusers.idholdsThe capturer a row belongs to.