diff --git a/CHANGELOG.md b/CHANGELOG.md index 4021b54..d7f341b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ Notable user-visible changes to Food Help are recorded here. Community publicati - Top-level Emergency food and Affordable food browsing, with Emergency as the default and a stable `/affordable-food/` route. - Location-specific resource cards that can share one provider identity without merging venue schedules. - Isolated local review builds for visibly labelled draft records. +- A `conditional` access rule for requirements a source qualifies (for example, ID requested where available), shown as “Depends; see details” with the qualification in the access details. +- A start-only weekday time for services with a known start and no set closing time; the weekly table shows the start without inventing an end or an open-now status. ### Changed diff --git a/deployments/kingston/REVIEW.md b/deployments/kingston/REVIEW.md index 7a6f5a0..40ec32d 100644 --- a/deployments/kingston/REVIEW.md +++ b/deployments/kingston/REVIEW.md @@ -4,20 +4,20 @@ This is an operator checklist, not a replacement dataset. Authoritative provider **Review owner:** Jamie Whelan, for True Good Craft. The public correction address is the address in `site.json`. Review sources sooner when a correction, closure or changed schedule is reported. Automation can flag a due review; it cannot approve a provider fact. -Five existing listings retain their **2026-09-04** verification date. Their next 30-day review target is **2026-10-04**. Martha’s Table (direct provider update, corroborated by the City food-supports page) and Lunch by George (provider homepage) were re-reviewed on **2026-09-29**, so their next target is **2026-10-29**. Brit Smith Social Market was newly checked against the current City food-support page on **2026-09-15** for the explicit no-fee classification only, so its next target is **2026-10-15**. These dates are maintenance deadlines, not claims of live availability. After an actual review, update the relevant evidence and resource dates and this checklist's derived deadline together; do not advance verification dates for formatting, schema migration or deployment alone. +Four existing listings retain their **2026-09-04** verification date. Their next 30-day review target is **2026-10-04**. Martha’s Table (direct provider update, corroborated by the City food-supports page) and Lunch by George (provider homepage) were re-reviewed on **2026-09-29**, so their next target is **2026-10-29**. Brit Smith Social Market was newly checked against the current City food-support page on **2026-09-15** for the explicit no-fee classification only. Loretta Meal Program and Brit Smith Social Market were re-reviewed on **2026-10-02** after a St. Vincent de Paul email, so their next target is **2026-11-01**. These dates are maintenance deadlines, not claims of live availability. After an actual review, update the relevant evidence and resource dates and this checklist's derived deadline together; do not advance verification dates for formatting, schema migration or deployment alone. The browsing classification is cost-derived: `free` appears under **Emergency food**; `low_cost` or `subsidized` appears under **Affordable food**; `mixed` appears in both; missing or `unknown` cost remains unresolved. All eight previously published Kingston resources now have a source-supported `free` cost. No record was duplicated to create a browsing view. | Resource ID | Current review state | Next review by | | --- | --- | --- | | `marthas-table` | Confirmed; provider email update 2026-09-29 (daily takeout, weekday delivery by application) | 2026-10-29 | -| `loretta-meal-program` | Confirmed | 2026-10-04 | -| `brit-smith-social-market` | Confirmed; cost source newly checked 2026-09-15 | 2026-10-15 | -| `partners-in-mission` | Confirmed | 2026-10-04 | -| `st-marys-drop-in` | Confirmed | 2026-10-04 | -| `lunch-by-george` | Confirmed 2026-09-29: weekday takeaway from the van on Wellington Street near Johnson Street; breakfast 9–10:30, lunch noon–1 | 2026-10-29 | -| `salvation-army-pantry` | Partially confirmed | 2026-10-04 | -| `storehouse-of-hope` | Confirmed | 2026-10-04 | +| `loretta-meal-program` | Confirmed; organization-level holiday closures added 2026-10-02 (see below). Meal hours were not re-checked against the provider page | 2026-11-01 | +| `brit-smith-social-market` | Confirmed; cost source newly checked 2026-09-15; organization-level holiday closures added 2026-10-02 (see below). Appointment versus walk-in arrangements remain unresolved | 2026-11-01 | +| `partners-in-mission` | Confirmed; identification shown as conditional from 2026-10-02 (household ID requested, availability qualified by the provider) | 2026-10-04 | +| `st-marys-drop-in` | Confirmed; holiday arrangements unknown, and some 211-only access and cost details were not freshly verified in the October 2 audit | 2026-10-04 | +| `lunch-by-george` | Confirmed 2026-09-29: weekday takeaway from the van on Wellington Street near Johnson Street; breakfast 9–10:30, lunch noon–1. Phone 613-484-2984 now maps to the provider homepage, not the superseded 211 listing | 2026-10-29 | +| `salvation-army-pantry` | Partially confirmed; Community Choice Pantry collection hours and appointment rules still unconfirmed (see below) | 2026-10-04 | +| `storehouse-of-hope` | Confirmed; past September 14 restart wording removed 2026-10-02; holiday Mondays now map to the program page | 2026-10-04 | ## Trellis HIV & Community Care @@ -26,10 +26,21 @@ Two records were prepared on **2026-09-29** from a direct provider email (Septem | Resource ID | Provider-stated schedule | Status and open questions | | --- | --- | --- | | `trellis-breakfast` | 844A Princess Street — Monday to Thursday, 9–11 a.m. (extended a little over a year ago; the City still lists 9–10:30) | Published; free, open to anyone, drop-in with no appointment or registration | -| `trellis-fresh-food-stall` | 844A Princess Street — Tuesdays from 1 p.m. until the food is gone | Published; free, open to anyone, drop-in, one bag per household or couple. No set closing time, so the Tuesday hours are carried in the schedule note | +| `trellis-fresh-food-stall` | 844A Princess Street — Tuesdays from 1 p.m. until the food is gone | Published; free, open to anyone, drop-in, one bag per household or couple. No set closing time: since 2026-10-02 the weekly table shows the 1 p.m. start with no closing time, and the day is never shown as open now | ID rules have not been stated and remain unknown. No coordinates were found in a reviewed source, so none are published. The phone number is the organization's public toll-free line; staff direct lines are not published. Next review by **2026-10-30**. +## October 2, 2026 audit + +An audit of all 18 published listings was reviewed on **2026-10-02**. Core schedules and locations not listed below were supported. Finite schedules stay finite: St. Lawrence College keeps its seven Thursday dates through December 3 and W.J. Henderson its eight biweekly Friday dates through December 11. The YMCA Tuesday and Friday sessions remain one listing. A September 28 Lionhearts prepared-food stockout notice is not treated as a current stockout. + +- **St. Vincent de Paul holiday closures.** A St. Vincent de Paul Society of Kingston email (October 1, 2026) says the organization is closed on all statutory holidays, closes on December 24, and this year will not open until January 4. It was added to `loretta-meal-program` and `brit-smith-social-market` as an attributed before-you-go line and a dated notice (December 24, 2026 to January 3, 2027; reopening January 4, 2027, with years inferred from the email date). The email is organization-level and does not name either program, so no closed-date schedule exceptions were added. Open question: confirm both programs follow the organization closures before adding exceptions for statutory holidays and the winter closure. +- **Partners in Mission identification.** The provider's intake instructions ask for household ID while its FAQ qualifies availability, so identification is `conditional` and the access details keep the qualification. +- **Storehouse of Hope.** Regular Monday hours are supported; the program page (not the fall restart notice) is now the official link and the holiday-Monday source. The contact-page phone mapping was not re-read in this change. +- **Community Choice Pantry** (`salvation-army-pantry`): Southeast Healthline lists Monday, Wednesday and Friday 1–4 p.m., and its Caregiver Exchange mirror adds appointments, but both were last updated October 30, 2025. Call-first wording stays, and office hours are not used as collection hours. +- **St. Mary’s:** weekday 1–3:30 p.m., the address and extension 3 were supported. Holiday arrangements remain unknown. +- **Student Food Box** remains an unlisted lead until public eligibility and permission to list are confirmed. + ## Lionhearts publication review One shared `lionhearts` organization and eight distinct physical market records were prepared on **2026-09-15**. Jamie Whelan reviewed and approved the browsing structure, classification, listings, wording, evidence and existing qualifications for publication on **2026-09-15**. The records are `published` with verification state `partially_confirmed`: publication approval does not convert the documented unknown or conflicting details into confirmed facts. The affordable-food wording is deliberately consistent across the cards: @@ -45,9 +56,9 @@ One shared `lionhearts` organization and eight distinct physical market records | `lionhearts-market-kingston-east` | Kingston East Community Centre, 779 Highway 15 — Wednesdays 10–11:30 a.m. | Venue, address, time and facility accessibility wording | | `lionhearts-market-rideau-heights` | Rideau Heights Community Centre, 85 MacCauley Street — Wednesdays 1:30–4:30 p.m. | Venue spelling, address, time and facility accessibility wording | | `lionhearts-market-st-lawrence-college` | Main lobby, 100 Portsmouth Avenue — September 10/24, October 8/22, November 5/19 and December 3, 10 a.m.–noon | All seven dates, year, main-lobby directions and public eligibility | -| `lionhearts-market-isabel-turner` | Isabel Turner Branch, 935 Gardiners Road — Thursdays 2:30–5:30 p.m. | Venue, address, time and library accessibility wording | +| `lionhearts-market-isabel-turner` | Isabel Turner Branch, 935 Gardiners Road — Thursdays 2:30–5:30 p.m. through October 15; 2–4 p.m. from October 22 | Re-reviewed 2026-10-02. The 2:30–5:30 hours are kept as dated exceptions for October 8 and 15. The page prints no year beside the change; 2026 is inferred from the current fall schedule. Library holiday closures raise a question but do not confirm market cancellations | | `lionhearts-market-wj-henderson` | Outside W.J. Henderson Community Centre’s main entrance, 322 Amherst Drive — September 4/18, October 2/16/30, November 13/27 and December 11, 4–6 p.m. | All eight dates, year, outdoor position and access needs | -| `lionhearts-market-artillery-park` | Artillery Park Aquatic Centre, 382 Bagot Street — Saturdays 10 a.m.–1 p.m.; September 19 cancelled, returning September 26 | Cancellation/return, dated notice expiry and conflicting washroom information | +| `lionhearts-market-artillery-park` | Artillery Park Aquatic Centre, 382 Bagot Street — Saturdays 10 a.m.–1 p.m. | Past September 19 cancellation kept only as a dated record (return instruction removed 2026-10-02); conflicting washroom information | Jamie’s September 15 provider meeting is recorded only as a public-safe direct-confirmation summary: information was relayed by Jamie and was not an interview conducted by the implementation agent. It supports public availability, affordability, payment methods, food range, and Lionhearts’ qualified accessibility/dignity approach. Private correspondence, meeting notes and personal contact details remain outside the repository. diff --git a/deployments/kingston/resources.json b/deployments/kingston/resources.json index 2d34433..8ff0858 100644 --- a/deployments/kingston/resources.json +++ b/deployments/kingston/resources.json @@ -398,7 +398,7 @@ ], "before_you_go": [ "Use the new location at 595 Bagot Street.", - "Call to check holiday service." + "St. Vincent de Paul says it is closed on all statutory holidays, and from December 24 until it reopens January 4. Call to confirm holiday service for this program." ], "cost": { "state": "free", @@ -508,16 +508,37 @@ "location", "phone" ] + }, + { + "id": "svdp-holiday-email", + "source_kind": "direct_confirmation", + "checked_on": "2026-10-02", + "note": "St. Vincent de Paul Society of Kingston staff told Jamie Whelan by email on October 1, 2026 that its information is currently up to date, that it is closed on all statutory holidays, and that it closes on December 24 and this year will not open until January 4. The email speaks for the organization and does not name individual programs. The years (December 24, 2026 through January 3, 2027, reopening January 4, 2027) are inferred from the email date. Private correspondence is kept outside this repository.", + "supports": [ + "before_you_go", + "notices" + ] } ], "verification": { - "reviewed_on": "2026-09-04", + "reviewed_on": "2026-10-02", "method": "multiple_sources", "state": "confirmed" }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-04" + "updated_on": "2026-10-02", + "notices": [ + { + "id": "svdp-winter-closure", + "text": "St. Vincent de Paul says it closes on December 24 and reopens January 4. Call to confirm this program's holiday service.", + "starts_on": "2026-12-24", + "ends_on": "2027-01-03", + "evidence_ids": [ + "svdp-holiday-email" + ] + } + ] }, { "id": "brit-smith-social-market", @@ -566,7 +587,7 @@ ], "before_you_go": [ "Ask about registration before making a trip.", - "Call to check holiday service." + "St. Vincent de Paul says it is closed on all statutory holidays, and from December 24 until it reopens January 4. Call to confirm holiday service for this program." ], "cost": { "state": "free", @@ -677,16 +698,37 @@ "phone", "cost" ] + }, + { + "id": "svdp-holiday-email", + "source_kind": "direct_confirmation", + "checked_on": "2026-10-02", + "note": "St. Vincent de Paul Society of Kingston staff told Jamie Whelan by email on October 1, 2026 that its information is currently up to date, that it is closed on all statutory holidays, and that it closes on December 24 and this year will not open until January 4. The email speaks for the organization and does not name individual programs. The years (December 24, 2026 through January 3, 2027, reopening January 4, 2027) are inferred from the email date. Private correspondence is kept outside this repository.", + "supports": [ + "before_you_go", + "notices" + ] } ], "verification": { - "reviewed_on": "2026-09-15", + "reviewed_on": "2026-10-02", "method": "multiple_sources", "state": "confirmed" }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-15" + "updated_on": "2026-10-02", + "notices": [ + { + "id": "svdp-winter-closure", + "text": "St. Vincent de Paul says it closes on December 24 and reopens January 4. Call to confirm this program's holiday service.", + "starts_on": "2026-12-24", + "ends_on": "2027-01-03", + "evidence_ids": [ + "svdp-holiday-email" + ] + } + ] }, { "id": "partners-in-mission", @@ -719,7 +761,7 @@ "walk_in": "no", "appointment_required": "yes", "registration_required": "yes", - "identification_required": "yes", + "identification_required": "conditional", "details": [ "Call to book a first intake appointment. No referral is needed.", "Bring ID for each household member if available; call if you do not have it.", @@ -903,7 +945,7 @@ }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-04" + "updated_on": "2026-10-02" }, { "id": "st-marys-drop-in", @@ -1223,6 +1265,7 @@ "food_access_purpose", "official_url", "location", + "phone", "eligibility", "limitations", "before_you_go", @@ -1249,7 +1292,6 @@ "note": "June listing confirms drop-in and no documents; its old address, lunch hours and phone are superseded by the provider.", "supports": [ "name", - "phone", "access.walk_in", "access.appointment_required", "access.registration_required", @@ -1275,7 +1317,7 @@ }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-29" + "updated_on": "2026-10-02" }, { "id": "salvation-army-pantry", @@ -1395,11 +1437,11 @@ "id": "storehouse-of-hope", "organization_id": "kingston-alliance-church", "name": "Storehouse of Hope", - "summary": "Free Monday lunch, with coffee and snacks before the meal. Fall service restarts September 14.", + "summary": "Free Monday lunch, with coffee and snacks before the meal.", "categories": [ "prepared_meals" ], - "food_access_purpose": "Free Monday lunch, with coffee and snacks before the meal. Fall service restarts September 14.", + "food_access_purpose": "Free Monday lunch, with coffee and snacks before the meal.", "location": { "description": "540 Palace Road, Kingston, ON K7L 4T7", "address": { @@ -1416,7 +1458,7 @@ } }, "phone": "+16135462143", - "official_url": "https://kingstonalliance.ca/storehouse-opens-on-mon-sep-14/", + "official_url": "https://kingstonalliance.ca/storehouse-of-hope/", "time_zone": "America/Toronto", "access": { "walk_in": "yes", @@ -1435,7 +1477,6 @@ "No service on holiday Mondays; summer arrangements differ." ], "before_you_go": [ - "First fall session: Monday, September 14, 2026.", "Coffee and snacks 10:30–11:30 a.m.; lunch 11:30 a.m.–1 p.m." ], "cost": { @@ -1445,7 +1486,7 @@ "schedule": { "kind": "weekly", "confirmed": true, - "note": "Mondays from September 14: lunch 11:30 a.m.–1 p.m. No holiday Mondays.", + "note": "Mondays: lunch 11:30 a.m.–1 p.m. No service on holiday Mondays.", "weekly": [ { "day": 1, @@ -1493,7 +1534,7 @@ "date": "2026-09-07", "confirmed": true, "intervals": [], - "note": "No service; fall program resumes September 14.", + "note": "No service before the fall program restarted on September 14.", "evidence_ids": [ "source-1" ] @@ -1504,12 +1545,13 @@ "intervals": [], "note": "Closed on holiday Mondays.", "evidence_ids": [ - "source-1" + "source-2" ] } ], "evidence_ids": [ - "source-1" + "source-1", + "source-2" ] }, "evidence": [ @@ -1523,7 +1565,6 @@ "name", "summary", "food_access_purpose", - "official_url", "eligibility", "limitations", "before_you_go", @@ -1542,7 +1583,10 @@ "note": "Free food outreach; holiday Mondays excluded; summer service changes.", "supports": [ "name", - "cost" + "official_url", + "cost", + "limitations", + "schedule" ] }, { @@ -1565,6 +1609,7 @@ "note": "Church phone and no documents. Its old program frequency is superseded by provider notice.", "supports": [ "name", + "phone", "access.walk_in", "access.appointment_required", "access.registration_required", @@ -1579,7 +1624,7 @@ }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-04" + "updated_on": "2026-10-02" }, { "id": "lionhearts-market-seniors-association", @@ -2452,19 +2497,41 @@ "schedule": { "kind": "weekly", "confirmed": true, - "note": "Thursdays, 2:30–5:30 p.m. This is a published schedule, not live availability.", + "note": "Thursdays, 2:30–5:30 p.m. through October 15; from October 22, Thursdays 2–4 p.m. This is a published schedule, not live availability.", "weekly": [ { "day": 1, "state": "closed", "intervals": [] }, { "day": 2, "state": "closed", "intervals": [] }, { "day": 3, "state": "closed", "intervals": [] }, - { "day": 4, "state": "published", "intervals": [{ "opens": "14:30", "closes": "17:30" }] }, + { "day": 4, "state": "published", "intervals": [{ "opens": "14:00", "closes": "16:00" }] }, { "day": 5, "state": "closed", "intervals": [] }, { "day": 6, "state": "closed", "intervals": [] }, { "day": 7, "state": "closed", "intervals": [] } ], - "exceptions": [], + "exceptions": [ + { + "date": "2026-10-08", + "confirmed": true, + "intervals": [{ "opens": "14:30", "closes": "17:30" }], + "note": "Current hours continue; the 2–4 p.m. schedule starts October 22.", + "evidence_ids": [ + "lionhearts-schedule", + "lionhearts-schedule-change" + ] + }, + { + "date": "2026-10-15", + "confirmed": true, + "intervals": [{ "opens": "14:30", "closes": "17:30" }], + "note": "Last Thursday at 2:30–5:30 p.m.; the 2–4 p.m. schedule starts October 22.", + "evidence_ids": [ + "lionhearts-schedule", + "lionhearts-schedule-change" + ] + } + ], "evidence_ids": [ - "lionhearts-schedule" + "lionhearts-schedule", + "lionhearts-schedule-change" ] }, "evidence": [ @@ -2542,16 +2609,26 @@ "location", "access.details" ] + }, + { + "id": "lionhearts-schedule-change", + "source_kind": "provider", + "url": "https://www.lionhearts.ca/kingston/our-programs/fresh-food-market-pop-ups/", + "checked_on": "2026-10-02", + "note": "Undated live Lionhearts page checked October 2, 2026 lists Isabel Turner Library at 2:30–5:30 p.m., changing to 2–4 p.m. from October 22. No year is printed beside the change; 2026 is inferred from the page's current fall schedule, and October 22 falls on a Thursday in 2026. Library holiday closures were not treated as market cancellations.", + "supports": [ + "schedule" + ] } ], "verification": { - "reviewed_on": "2026-09-15", + "reviewed_on": "2026-10-02", "method": "multiple_sources", "state": "partially_confirmed" }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-15" + "updated_on": "2026-10-02" }, { "id": "lionhearts-market-wj-henderson", @@ -2766,7 +2843,6 @@ ], "before_you_go": [ "All payment methods accepted, including debit, credit and mobile payments.", - "The September 19 market is cancelled; Lionhearts says the Saturday market returns September 26.", "For schedule changes, use the Fresh Food Market account on Instagram. Public market email: info@freshfoodmkt.ca." ], "cost": { @@ -2776,7 +2852,7 @@ "schedule": { "kind": "weekly", "confirmed": true, - "note": "Saturdays, 10 a.m.–1 p.m.; September 19 is cancelled and the market returns September 26. This is not live availability.", + "note": "Saturdays, 10 a.m.–1 p.m. This is a published schedule, not live availability.", "weekly": [ { "day": 1, "state": "closed", "intervals": [] }, { "day": 2, "state": "closed", "intervals": [] }, @@ -2791,7 +2867,7 @@ "date": "2026-09-19", "confirmed": true, "intervals": [], - "note": "Cancelled during the Artillery Park maintenance closure; market returns September 26.", + "note": "Cancelled during the Artillery Park maintenance closure.", "evidence_ids": [ "artillery-change-post" ] @@ -2926,11 +3002,11 @@ }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-15", + "updated_on": "2026-10-02", "notices": [ { "id": "artillery-maintenance-cancellation", - "text": "No market Saturday, September 19, during the Artillery Park closure. Lionhearts says the market returns September 26.", + "text": "No market on Saturday, September 19, during the Artillery Park closure.", "starts_on": "2026-09-08", "ends_on": "2026-09-20", "evidence_ids": [ @@ -3119,7 +3195,7 @@ "note": "Tuesdays from 1 p.m. until the food is gone. There is no set closing time.", "weekly": [ { "day": 1, "state": "closed", "intervals": [] }, - { "day": 2, "state": "unknown", "intervals": [] }, + { "day": 2, "state": "unknown", "opens": "13:00", "intervals": [] }, { "day": 3, "state": "closed", "intervals": [] }, { "day": 4, "state": "closed", "intervals": [] }, { "day": 5, "state": "closed", "intervals": [] }, @@ -3190,7 +3266,7 @@ }, "publication_status": "published", "service_condition": "active", - "updated_on": "2026-09-30" + "updated_on": "2026-10-02" } ] } diff --git a/docs/data.md b/docs/data.md index 891da1a..4ea1837 100644 --- a/docs/data.md +++ b/docs/data.md @@ -20,7 +20,7 @@ Every resource needs an evidence-supported `food_access_purpose`. Ordinary comme Each resource carries name, summary, category, food-access purpose, eligibility, limitations, before-you-go guidance, evidence, verification, publication status, service condition and updated date. Optional facts include address/coordinates, service area, phone/extension, official URL, timezone, service languages, cost and temporary notices. `content_language` describes the text; `service_languages` describes service provision, not translations. -Access rules are exactly `yes`, `no`, or `unknown` for walk-ins, appointments, registration and identification. Known access rules need supporting evidence. An empty guidance list means unspecified, not “no restrictions.” Do not infer eligibility or identification requirements from missing information. +Access rules are exactly `yes`, `no`, `conditional`, or `unknown` for walk-ins, appointments, registration and identification. Use `conditional` when a source states the rule with a qualification (for example, ID requested where available); the qualification itself belongs in access details, which are then required. Known access rules need supporting evidence. An empty guidance list means unspecified, not “no restrictions.” Do not infer eligibility or identification requirements from missing information. Keep these states separate: @@ -32,7 +32,7 @@ Only published, non-closed records enter public JSON, HTML or discovery output. ## Schedules and evidence -Schedule kind is weekly, dated, by-arrangement or unknown. Weekly weekdays use ISO 1=Monday through 7=Sunday. Each day is published, closed or unknown; a missing day is unknown. Intervals use local `HH:MM`, an exclusive closing time and explicit `closes_next_day` for overnight service. Optional valid date ranges, explicit date exceptions, confirmation and evidence references are preserved. Represent a dated event with its actual date and intervals in `exceptions`; a validity range alone does not establish that the service is scheduled on a particular day. A confirmed empty exception means closed for that whole date and overrides overnight carry-in. Unconfirmed exceptions remain unknown. Never infer live availability, stock or guaranteed access. +Schedule kind is weekly, dated, by-arrangement or unknown. Weekly weekdays use ISO 1=Monday through 7=Sunday. Each day is published, closed or unknown; a missing day is unknown. An unknown day may carry a reviewed `opens` time when the start is known but no closing time is published (for example, open until supplies run out); it is displayed as a start-only time and never produces an open-now or closed status. Intervals use local `HH:MM`, an exclusive closing time and explicit `closes_next_day` for overnight service. Optional valid date ranges, explicit date exceptions, confirmation and evidence references are preserved. Represent a dated event with its actual date and intervals in `exceptions`; a validity range alone does not establish that the service is scheduled on a particular day. A confirmed empty exception means closed for that whole date and overrides overnight carry-in. Unconfirmed exceptions remain unknown. Never infer live availability, stock or guaranteed access. Evidence has a stable ID, source kind, checked date, public note, supported field paths and a source URL (direct confirmation may omit a URL). Describe direct-confirmation provenance accurately—for example, provider information relayed by the review owner is not an interview performed by an automated agent. Keep private names, correspondence and personal details out of public evidence notes. Verification records give the review date, method and state. Evidence review dates cannot be after verification, and verification cannot be after the resource’s updated date. Referenced sources must exist. Automation validates these relationships; it does not validate the truth of claims or automatically contact providers. diff --git a/docs/interoperability.md b/docs/interoperability.md index 0242ebc..b0c621b 100644 --- a/docs/interoperability.md +++ b/docs/interoperability.md @@ -31,7 +31,7 @@ Target HSDS **3.3**, with a separately declared consumer profile if one is later | Resource identity/name/summary | Service with organization link and description; preserve original Food Help ID in a clearly namespaced identifier/extension | | Inline address/coordinates | Location and address objects plus service-at-location link; do not invent a physical location for delivery/support-only resources | | Phone/extension | Phone record linked at the correct service/location level | -| `eligibility`, access details, limitations, guidance | Supported service eligibility/application/description fields; Food Help’s yes/no/unknown access rules need a documented extension where a consumer has no exact field | +| `eligibility`, access details, limitations, guidance | Supported service eligibility/application/description fields; Food Help’s yes/no/conditional/unknown access rules need a documented extension where a consumer has no exact field | | Categories and taxonomy version | Food Help-owned taxonomy/term records with stable IDs; no automatic crosswalk to licensed 211 terms | | `service_languages` | Service language records; keep `content_language` separate | | Weekly schedule/date exceptions | Reviewed conversion to the target version’s operating-hours/event structure. Preserve uncertainty and exceptional closures; do not silently discard unsupported intervals | diff --git a/schemas/resources.schema.json b/schemas/resources.schema.json index 86b2c61..8818b43 100644 --- a/schemas/resources.schema.json +++ b/schemas/resources.schema.json @@ -156,6 +156,7 @@ "enum": [ "yes", "no", + "conditional", "unknown" ], "type": "string" @@ -428,6 +429,9 @@ }, "intervals": { "$ref": "#/$defs/intervals" + }, + "opens": { + "$ref": "#/$defs/time" } } } diff --git a/src/copy/en.ts b/src/copy/en.ts index 707a875..a55a675 100644 --- a/src/copy/en.ts +++ b/src/copy/en.ts @@ -19,7 +19,7 @@ export const copy = { provider: 'Operated by', address: 'Where', today: 'Today', quickAccess: 'Access', area: 'Service area', phone: 'Phone', eligibility: 'Who can use this', limitations: 'Limitations', before: 'Before you go', access: 'Access requirements', details: 'Before you go & weekly hours', schedule: 'Published schedule', timezone: 'Local timezone', cost: 'Cost', languages: 'Service languages', foodPurpose: 'Food support provided', staticHours: 'See published hours below; confirm before travelling.', accessUnknown: 'Check access arrangements before travelling.', dropIn: 'Drop-in access', appointmentNeeded: 'Appointment required', registrationNeeded: 'Registration required', - unknown: 'Not confirmed', yes: 'Yes', no: 'No', walkIn: 'Walk-ins accepted', appointment: 'Appointment required', registration: 'Registration required', identification: 'Identification required', + unknown: 'Not confirmed', yes: 'Yes', no: 'No', conditional: 'Depends; see details', from: 'From', noSetEnd: 'no set closing time', walkIn: 'Walk-ins accepted', appointment: 'Appointment required', registration: 'Registration required', identification: 'Identification required', conditions: { active: 'Operating service', temporarily_changed: 'Service temporarily changed', temporarily_unavailable: 'Service temporarily unavailable', closed: 'Closed' }, verification: { confirmed: 'Reviewed and confirmed', partially_confirmed: 'Some information unconfirmed', needs_review: 'Needs review' }, methods: { provider_source: 'Provider source reviewed', direct_confirmation: 'Direct confirmation', multiple_sources: 'Multiple sources reviewed', other_reviewed: 'Other reviewed evidence' }, diff --git a/src/presentation.ts b/src/presentation.ts index 6162030..c313b8a 100644 --- a/src/presentation.ts +++ b/src/presentation.ts @@ -20,7 +20,7 @@ export function address(resource: Resource, compact = false): string { const times = (items: Resource['schedule']['weekly'][number]['intervals'], site: Site) => items.map(item => `${formatTime(item.opens, site)}–${formatTime(item.closes, site)}${item.closes_next_day ? ` ${c.nextDay}` : ''}`).join(', '); export function schedule(resource: Resource, site: Site, headingLevel = 5): string { const s = resource.schedule; - return `
${c.scheduleKinds[s.kind]}${s.confirmed ? '' : ` — ${c.unconfirmed}`}. ${escape(s.note)}
${c.timezone}: ${escape(resource.time_zone ?? site.time_zone)}
${s.valid_from || s.valid_to ? `${c.validity}: ${s.valid_from ? formatDate(s.valid_from, site) : c.unknown} – ${s.valid_to ? formatDate(s.valid_to, site) : c.unknown}
` : ''}${s.weekly.length ? `${c.scheduleKinds[s.kind]}${s.confirmed ? '' : ` — ${c.unconfirmed}`}. ${escape(s.note)}
${c.timezone}: ${escape(resource.time_zone ?? site.time_zone)}
${s.valid_from || s.valid_to ? `${c.validity}: ${s.valid_from ? formatDate(s.valid_from, site) : c.unknown} – ${s.valid_to ? formatDate(s.valid_to, site) : c.unknown}
` : ''}${s.weekly.length ? `