C4 Architecture Model & Behavioral Flows & Delivery Timeline · Product V1 · SOW Doc v1.9 · May 2026
Product V1 — the delivered version of the Kinloch Platform (capital V, no dot). SOW Doc v1.9 — the revision of this document (lowercase v, dotted).
Kinloch Platform, its users, and external system dependencies
flowchart TD
node_1["Patient
Cannabis healthcare patient seeking product discovery, AI clinical intake, an..."]
node_2["Nurse Practitioner
Licensed NP who reviews AI-generated clinical summaries and authorizes patien..."]
node_11["Kinloch Platform
Cannabis healthcare platform: patient discovery, AI voice clinical intake, NP authorization, comp..."]
node_3["Shopify
E-commerce platform providing product catalogue, payment processing, order fu..."]
node_4["AI / LLM Provider
OpenAI, Anthropic, or equivalent. Provides LLM inference for clinical summary..."]
node_5["Voice AI Platform
Twilio Voice, Vapi, ElevenLabs, or equivalent. Conversational voice intake. V..."]
node_6["SMS Provider
Twilio or equivalent. Delivers SMS for two-step verification and callback not..."]
node_8["Provincial College Registry
Provincial college APIs for practitioner license verification lookups. Extend..."]
node_9["Health Canada
Federal regulatory authority receiving mandatory monthly and quarterly report..."]
node_1 -->|"uses"| node_11
node_2 -->|"uses"| node_11
node_11 -->|"integrates for commerce"| node_3
node_11 -->|"generates AI summaries"| node_4
node_11 -->|"voice intake calls"| node_5
node_11 -->|"sends SMS"| node_6
node_11 -->|"verifies licenses"| node_8
node_11 -->|"submits reports"| node_9
style node_1 fill:#08427b,stroke:#073b6e,color:#fff
style node_2 fill:#08427b,stroke:#073b6e,color:#fff
style node_11 fill:#1168bd,stroke:#0e5aa7,color:#fff
style node_3 fill:#999,stroke:#777,color:#fff
style node_4 fill:#999,stroke:#777,color:#fff
style node_5 fill:#999,stroke:#777,color:#fff
style node_6 fill:#999,stroke:#777,color:#fff
style node_8 fill:#999,stroke:#777,color:#fff
style node_9 fill:#999,stroke:#777,color:#fff
Internal structure of the Kinloch Platform showing all containers and their interactions
flowchart TD
node_1["Patient"]
node_2["Nurse Practitioner"]
subgraph kinloch["Kinloch Platform"]
node_12["Patient Web Application
React"]
node_13["NP Workbench
Responsive Web"]
node_14["Platform API
REST API"]
node_15["AI Clinical Intake Engine
AI Service"]
node_16["Compliance & Regulatory Service
Backend Service"]
node_17[("Application Database
Encrypted DB")]
node_18[("Object Storage
Encrypted Object Storage")]
end
node_3["Shopify"]
node_4["AI / LLM Provider"]
node_5["Voice AI Platform"]
node_6["SMS Provider"]
node_8["Provincial College Registry"]
node_9["Health Canada"]
node_1 -->|"browses, orders, intake"| node_12
node_2 -->|"reviews and authorizes"| node_13
node_12 -->|"calls"| node_14
node_13 -->|"calls"| node_14
node_14 -->|"reads/writes"| node_17
node_14 -->|"orchestrates intake"| node_15
node_14 -->|"triggers compliance"| node_16
node_15 -->|"stores intake data"| node_17
node_15 -->|"stores recordings"| node_18
node_16 -->|"stores compliance data"| node_17
node_12 -->|"embedded buy flow"| node_3
node_14 -->|"reads catalogue/orders"| node_3
node_14 -->|"sends 2FA SMS"| node_6
node_15 -->|"generates summaries"| node_4
node_15 -->|"voice intake calls"| node_5
node_15 -->|"sends callback SMS"| node_6
node_16 -->|"verifies licenses"| node_8
node_16 -->|"submits reports"| node_9
node_1 -->|"uploads existing medical document (A6)"| node_12
node_12 -->|"sends uploaded image for AI pre-fill (A6)"| node_15
node_15 -->|"stores uploaded image, hash, pre-fill payload (A6)"| node_18
node_15 -->|"creates External Document Review case with draft pre-fill (A6)"| node_13
node_13 -->|"writes NP-confirmed fields + decision to audit trail (A6)"| node_16
node_13 -->|"on NP approve: sets Authorization Status to active (A6)"| node_14
style node_1 fill:#08427b,stroke:#073b6e,color:#fff
style node_2 fill:#08427b,stroke:#073b6e,color:#fff
style node_12 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_13 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_14 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_15 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_16 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_17 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_18 fill:#438dd5,stroke:#3a7bc0,color:#fff
style kinloch fill:#0d1b2a,stroke:#1e3a5f,color:#fff
style node_3 fill:#999,stroke:#777,color:#fff
style node_4 fill:#999,stroke:#777,color:#fff
style node_5 fill:#999,stroke:#777,color:#fff
style node_6 fill:#999,stroke:#777,color:#fff
style node_8 fill:#999,stroke:#777,color:#fff
style node_9 fill:#999,stroke:#777,color:#fff
Components inside the patient frontend
flowchart TD
node_1["Patient"]
subgraph container_node_12["Patient Web Application"]
node_19["Kinloch Wheel
Interactive experience selector with terpene education layer, real-time recom..."]
node_20["Product Browse Page
Product grid with filters and product detail pages. Integrates with current K..."]
node_21["Age Verification Gate
Required gate for all cannabis product content. Can reuse existing gate on cu..."]
node_22["Shopping Cart
Persistent mini-cart and full cart view with cart restoration after authoriza..."]
node_23["Checkout Gate
Authorization lock/unlock logic with three states: no account, active auth, e..."]
node_24["Account Creation Flow
3-screen progressive form collecting identity fields for registration with em..."]
node_25["Login & Session Management
Email/password authentication with persistent sessions and account lockout"]
node_26["Two-Step Verification
SMS via third-party provider, authenticator app support, backup codes. MVP scope"]
node_27["Patient Dashboard
Auth status (active/expiring/expired), orders, addresses, and settings across..."]
node_53["Onboarding Questionnaire
Needs-assessment questionnaire integrated into Account Creation. Captures pat..."]
node_56["Document Upload Surface
Patient-facing upload surface for an existing Part 14 medical document (PDF/J..."]
end
node_3["Shopify"]
node_14["Platform API
REST API"]
node_19 -->|"gets recommendations"| node_14
node_20 -->|"fetches products"| node_14
node_21 -->|"validates age"| node_14
node_22 -->|"cart operations"| node_14
node_22 -->|"embedded buy flow"| node_3
node_23 -->|"checks auth status"| node_14
node_24 -->|"creates account"| node_14
node_25 -->|"authenticates"| node_14
node_26 -->|"2FA verification"| node_14
node_27 -->|"reads status & orders"| node_14
node_1 -->|"explores products"| node_19
node_1 -->|"views dashboard"| node_27
node_1 -->|"answers onboarding"| node_53
node_53 -->|"saves preferences"| node_14
style node_1 fill:#08427b,stroke:#073b6e,color:#fff
style node_19 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_20 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_21 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_22 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_23 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_24 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_25 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_26 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_27 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_53 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_56 fill:#85bbf0,stroke:#6fa8e0,color:#000
style container_node_12 fill:#0d1b2a,stroke:#1e3a5f,color:#fff
style node_3 fill:#999,stroke:#777,color:#fff
style node_14 fill:#438dd5,stroke:#3a7bc0,color:#fff
Components inside the NP frontend
flowchart TD
node_2["Nurse Practitioner"]
subgraph container_node_13["NP Workbench"]
node_28["Case Queue Dashboard
Queue view with case filters, risk level display, and wait time tracking"]
node_29["Case Review Interface
Three-column clinical review surface: contraindication panel, medication revi..."]
node_30["Decision Workflow
Approve/decline/flag with decision recording, medical document generation, an..."]
node_31["NP Dispatch & Notification
Case assignment with claim window, escalation logic, push/SMS notification de..."]
node_32["NP Availability Management
Online/idle/offline status tracking with queue depth visibility"]
node_55["Call Recording Upload
Interface for NP to upload audio recordings of calls held with patients outsi..."]
node_58["External Document Review
NP Workbench case type for reviewing a patient-supplied existing medical docu..."]
end
node_14["Platform API
REST API"]
node_18[("Object Storage
Encrypted Object Storage")]
node_28 -->|"fetches case queue"| node_14
node_29 -->|"loads case data"| node_14
node_30 -->|"submits decision"| node_14
node_31 -->|"dispatch & notify"| node_14
node_32 -->|"manages availability"| node_14
node_2 -->|"reviews case queue"| node_28
node_2 -->|"reviews clinical data"| node_29
node_2 -->|"uploads recordings"| node_55
node_55 -->|"POST upload"| node_14
node_55 -->|"stores audio"| node_18
style node_2 fill:#08427b,stroke:#073b6e,color:#fff
style node_28 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_29 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_30 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_31 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_32 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_55 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_58 fill:#85bbf0,stroke:#6fa8e0,color:#000
style container_node_13 fill:#0d1b2a,stroke:#1e3a5f,color:#fff
style node_14 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_18 fill:#438dd5,stroke:#3a7bc0,color:#fff
Backend service components for auth, commerce, registration, and NP workflow
flowchart TD
subgraph container_node_14["Platform API"]
node_34["Discovery Service
Backend for Kinloch Wheel recommendation engine and product matching logic"]
node_35["Commerce Service
Cart persistence, checkout gate logic, Shopify buy flow integration, and orde..."]
node_36["Auth Service
Account creation, login, session management, and two-step verification orches..."]
node_37["Patient Registration Engine
Client registration with internal patient identifier, registration confirmati..."]
node_38["Authorization Status API
Returns active/expired/pending/none + expiry date. Serves checkout gate and p..."]
node_39["Order & Fulfillment Service
Retrieves order status, tracking, and history data from Shopify for patient d..."]
node_40["NP Workflow Service
Backend for NP case assignment, dispatch, availability management, and compen..."]
node_54["Gram Equivalency Calculator
Cannabis Act compliance rule enforced at checkout. Validates cart gram-equiva..."]
end
node_16["Compliance & Regulatory Service
Backend Service"]
node_15["AI Clinical Intake Engine
AI Service"]
node_13["NP Workbench
Responsive Web"]
node_3["Shopify"]
node_17[("Application Database
Encrypted DB")]
node_6["SMS Provider"]
node_34 -->|"reads product data"| node_17
node_35 -->|"reads/writes cart data"| node_17
node_35 -->|"catalogue & orders"| node_3
node_36 -->|"reads/writes accounts"| node_17
node_36 -->|"sends 2FA SMS"| node_6
node_37 -->|"stores registrations"| node_17
node_38 -->|"reads auth status"| node_17
node_39 -->|"reads order data"| node_3
node_40 -->|"reads/writes NP data"| node_17
node_40 -->|"sends NP notifications"| node_6
node_40 -->|"routes to intake"| node_15
node_40 -->|"triggers compliance"| node_16
node_40 -->|"pushes notifications"| node_13
node_54 -->|"reads gram rules"| node_17
style node_34 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_35 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_36 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_37 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_38 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_39 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_40 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_54 fill:#85bbf0,stroke:#6fa8e0,color:#000
style container_node_14 fill:#0d1b2a,stroke:#1e3a5f,color:#fff
style node_16 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_15 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_13 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_3 fill:#999,stroke:#777,color:#fff
style node_17 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_6 fill:#999,stroke:#777,color:#fff
Components inside the AI intake service
flowchart LR
subgraph container_node_15["AI Clinical Intake Engine"]
node_41["Questionnaire Engine
Clinical questionnaire presented in correct sequence. Question count and phas..."]
node_42["Voice Recording Manager
Voice recording capture, transcript history management, and encrypted object ..."]
node_43["Clinical Summary Generator
AI-generated structured summary for NP review with contraindication flags and..."]
node_44["Callback Scheduler
Patient-selected callback window with 1-hour retry on missed callback and SMS..."]
node_57["Medical Document AI Pre-Fill
AI-assisted extractor that reads an uploaded medical document and produces ca..."]
end
node_18[("Object Storage
Encrypted Object Storage")]
node_5["Voice AI Platform"]
node_4["AI / LLM Provider"]
node_17[("Application Database
Encrypted DB")]
node_6["SMS Provider"]
node_41 -->|"stores responses"| node_17
node_42 -->|"stores recordings"| node_18
node_42 -->|"voice processing"| node_5
node_43 -->|"LLM inference"| node_4
node_43 -->|"stores summaries"| node_17
node_44 -->|"sends callback SMS"| node_6
style node_41 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_42 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_43 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_44 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_57 fill:#85bbf0,stroke:#6fa8e0,color:#000
style container_node_15 fill:#0d1b2a,stroke:#1e3a5f,color:#fff
style node_18 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_5 fill:#999,stroke:#777,color:#fff
style node_4 fill:#999,stroke:#777,color:#fff
style node_17 fill:#438dd5,stroke:#3a7bc0,color:#fff
style node_6 fill:#999,stroke:#777,color:#fff
Compliance, regulatory export, and audit trail components
flowchart TD
subgraph container_node_16["Compliance & Regulatory Service"]
node_45["Medical Document Generator
Produces medical document authorizing cannabis access under Part 14. Not a le..."]
node_46["Compliance Audit Trail
Immutable audit log of consent, decisions, and handoff events. 2-year baselin..."]
node_47["Amendment & Revocation Engine
Amendment, refusal, revocation workflows under Cannabis Regulations ss.137-13..."]
node_48["Health Canada CSV Export
On-demand CSV export of authorization events for Kinloch to submit manually u..."]
node_49["Provincial Disclosure Module
Scoped disclosure packs under s.299 with secure transmission log"]
node_50["Licensing Notice Module
Templated notices under s.277 with sent-date log"]
node_52["Practitioner License Verification
Verifies NP licenses against provincial registries. V1 scope pending clarific..."]
end
node_8["Provincial College Registry"]
node_9["Health Canada"]
node_17[("Application Database
Encrypted DB")]
node_45 -->|"stores documents"| node_17
node_46 -->|"writes audit records"| node_17
node_47 -->|"reads/writes workflows"| node_17
node_48 -->|"submits reports"| node_9
node_49 -->|"sends disclosures"| node_9
node_50 -->|"sends notices"| node_9
node_52 -->|"verifies licenses"| node_8
style node_45 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_46 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_47 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_48 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_49 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_50 fill:#85bbf0,stroke:#6fa8e0,color:#000
style node_52 fill:#85bbf0,stroke:#6fa8e0,color:#000
style container_node_16 fill:#0d1b2a,stroke:#1e3a5f,color:#fff
style node_8 fill:#999,stroke:#777,color:#fff
style node_9 fill:#999,stroke:#777,color:#fff
style node_17 fill:#438dd5,stroke:#3a7bc0,color:#fff
Complete patient lifecycle from first visit through discovery, intake, authorization, and first purchase
flowchart TD
N1(["Patient arrives at Patient Web Application"])
N2["Age Verification Gate validates patient age for cannabis content access"]
N1 --> N2
N3["Patient completes Account Creation Flow and Onboarding Questionnaire"]
N2 --> N3
N4["Patient explores products via Kinloch Wheel and Product Browse Page with personalized recommendations"]
N3 --> N4
N5["Patient adds products to Shopping Cart and attempts checkout"]
N4 --> N5
N6["Gram Equivalency Calculator validates gram total against Cannabis Act limits"]
N5 --> N6
N7["Checkout Gate blocks purchase — no authorization"]
N6 --> N7
N8["Patient initiates AI voice clinical intake via Questionnaire Engine"]
N7 --> N8
N9["Clinical Summary Generator produces structured summary via AI / LLM Provider"]
N8 --> N9
N10["NP Workflow Service assigns case to available Nurse Practitioner"]
N9 --> N10
N11["Nurse Practitioner reviews case in Case Review Interface and approves via Decision Workflow"]
N10 --> N11
N12["Medical Document Generator produces Part 14 authorization document with e-signature"]
N11 --> N12
N13["Authorization Status API updates patient to active authorization with expiry date"]
N12 --> N13
N14["Patient receives authorization notification and returns to Shopping Cart"]
N13 --> N14
N15["Checkout Gate re-runs gram check and unlocks checkout"]
N14 --> N15
N16["Shopify processes payment via embedded buy flow and initiates fulfillment"]
N15 --> N16
N17["Patient Dashboard displays active authorization, order status, and tracking"]
N16 --> N17
N18(["Compliance Audit Trail records full audit trail"])
N17 --> N18
New patient creates account (identity + onboarding questionnaire), age-verifies, confirms email, and sets up two-step verification
flowchart TD
N1(["Patient arrives at Patient Web Application and encounters Age Verification Gate"])
N2["Age Verification Gate validates patient meets age requirement for cannabis content"]
N1 --> N2
N3["Patient begins Account Creation Flow — 4-screen progressive form (identity + onboarding)"]
N2 --> N3
N4["Account Creation Flow collects identity fields required for registration"]
N3 --> N4
N5["Onboarding Questionnaire captures patient needs and preferences to seed personalized discovery"]
N4 --> N5
N6["Auth Service sends email verification and creates account in Application Database"]
N5 --> N6
N7["Patient confirms email and completes registration"]
N6 --> N7
N8["Patient Registration Engine generates internal patient identifier and stores registration in Application Database"]
N7 --> N8
N9{"Patient sets up Two-Step Verification"}
N8 --> N9
N10["Auth Service sends verification code via SMS Provider"]
N9 -->|if: SMS verification| N10
N11(["Patient enters SMS code to confirm"])
N10 --> N11
N12["Auth Service generates QR code for authenticator app setup"]
N9 -->|if: authenticator app| N12
N13(["Patient scans QR and confirms with generated code"])
N12 --> N13
N14["Patient accesses Patient Dashboard showing account status, empty order history, and authorization state (none)"]
N15(["Compliance Audit Trail records account creation and consent events"])
N14 --> N15
Returning patient authenticates with email/password and two-step verification to establish a session
flowchart TD
N1(["Patient opens Patient Web Application and navigates to Login & Session Management"])
N2["Patient enters email and password"]
N1 --> N2
N3{"Auth Service validates credentials against Application Database"}
N2 --> N3
N4["Auth Service prompts for Two-Step Verification"]
N3 -->|if: credentials valid| N4
N5["Patient completes 2FA via SMS code or authenticator app"]
N4 --> N5
N6["Auth Service establishes persistent session"]
N5 --> N6
N7(["Patient lands on Patient Dashboard with auth status and order history"])
N6 --> N7
N8["Auth Service increments failed attempt counter"]
N3 -->|if: credentials invalid| N8
N9(["Login & Session Management displays error and allows retry"])
N8 --> N9
N10["Auth Service blocks login after excessive failed attempts"]
N3 -->|if: account locked| N10
N11(["Login & Session Management displays lockout message with recovery options"])
N10 --> N11
Patient explores products via the Kinloch Wheel, browses the catalogue, adds to cart, passes gram-equivalency check, and completes purchase through Shopify
flowchart TD
N1(["Patient opens Patient Web Application and lands on the Kinloch Wheel"])
N2["Kinloch Wheel personalizes exploration using Onboarding Questionnaire responses captured during registration"]
N1 --> N2
N3["Discovery Service generates real-time product recommendations based on patient selections and onboarding preferences"]
N2 --> N3
N4["Patient browses recommended products on Product Browse Page with filters and detail pages"]
N3 --> N4
N5["Patient adds products to Shopping Cart"]
N4 --> N5
N6["Shopping Cart persists cart state via Commerce Service"]
N5 --> N6
N7["Patient proceeds to checkout, hitting the Checkout Gate"]
N6 --> N7
N8{"Gram Equivalency Calculator validates cart gram-equivalent total against Cannabis Act per-order l..."}
N7 --> N8
N9(["Checkout Gate queries Authorization Status API for auth state"])
N8 -->|if: within limit| N9
N10(["Checkout Gate blocks purchase with clear gram-limit message and cart-adjustment prompt"])
N8 -->|if: exceeds limit| N10
N11{"Checkout Gate evaluates authorization state"}
N12["Checkout Gate unlocks and redirects to Shopify embedded buy flow"]
N11 -->|if: active authorization| N12
N13["Shopify processes payment and initiates fulfillment (Kinloch-selected provider, integrated through Shopify)"]
N12 --> N13
N14["Order & Fulfillment Service retrieves order data from Shopify"]
N13 --> N14
N15(["Patient Dashboard displays order status and tracking"])
N14 --> N15
N16["Checkout Gate blocks purchase and prompts patient to register or complete clinical intake"]
N11 -->|if: no account or expired auth| N16
N17(["Shopping Cart preserves cart for restoration after authorization"])
N16 --> N17
Patient's preserved cart is restored after completing authorization, enabling seamless checkout
flowchart TD
N1(["Patient had items in Shopping Cart but was blocked by Checkout Gate due to missing authorization"])
N2["Commerce Service persists cart state in Application Database tied to patient account"]
N1 --> N2
N3["Patient completes clinical intake and receives NP authorization"]
N2 --> N3
N4["Authorization Status API confirms active authorization status"]
N3 --> N4
N5["Patient returns to Patient Web Application"]
N4 --> N5
N6["Shopping Cart restores previously saved cart items via Commerce Service"]
N5 --> N6
N7["Gram Equivalency Calculator re-validates gram total against Cannabis Act limits"]
N6 --> N7
N8["Checkout Gate confirms active authorization and unlocks checkout"]
N7 --> N8
N9(["Patient proceeds to Shopify embedded buy flow to complete purchase"])
N8 --> N9
Patient completes the AI clinical intake via callback-based voice intake, resulting in a structured clinical summary for NP review
flowchart TD
N1(["Patient initiates clinical intake from Patient Web Application"])
N2["Platform API routes intake request to AI Clinical Intake Engine"]
N1 --> N2
N3["Questionnaire Engine schedules voice intake and presents the clinical questionnaire in the correct sequence"]
N2 --> N3
N4["Patient selects preferred callback window"]
N3 --> N4
N5["Callback Scheduler schedules callback and confirms via SMS through SMS Provider"]
N4 --> N5
N6["Voice AI Platform initiates voice intake call at scheduled time"]
N5 --> N6
N7["Voice Recording Manager captures voice recording and generates transcript"]
N6 --> N7
N8["Voice Recording Manager stores encrypted recording in Object Storage"]
N7 --> N8
N9["Clinical Summary Generator sends intake data to AI / LLM Provider for processing"]
N8 --> N9
N10["AI / LLM Provider returns structured clinical summary with contraindication flags and completeness score"]
N9 --> N10
N11["Clinical Summary Generator stores summary in Application Database and marks case ready for NP review"]
N10 --> N11
N12(["Compliance Audit Trail records intake consent and handoff event"])
N11 --> N12
Patient misses a scheduled callback for voice intake — system retries after 1 hour and falls back to SMS with rescheduling link
flowchart TD
N1(["Callback Scheduler triggers callback at patient-selected time via Voice AI Platform"])
N2["Voice AI Platform attempts to reach Patient — call goes unanswered"]
N1 --> N2
N3["Callback Scheduler records missed callback in Application Database"]
N2 --> N3
N4["Callback Scheduler waits 1 hour and initiates retry via Voice AI Platform"]
N3 --> N4
N5{"Voice AI Platform attempts second call to Patient"}
N4 --> N5
N6["Voice Recording Manager begins voice intake recording"]
N5 -->|if: patient answers| N6
N7(["Questionnaire Engine continues intake from where patient left off"])
N6 --> N7
N8["Callback Scheduler sends SMS fallback via SMS Provider with link to reschedule"]
N5 -->|if: missed again| N8
N9(["Patient receives SMS and can reschedule the voice intake"])
N8 --> N9
New case is assigned to an available NP with claim window, escalation, and notification
flowchart TD
N1(["Clinical Summary Generator marks intake case as ready for NP review"])
N2["NP Workflow Service checks NP Availability Management for online NPs with capacity"]
N1 --> N2
N3["NP Dispatch & Notification assigns case to best-match NP and opens claim window"]
N2 --> N3
N4["NP Dispatch & Notification sends push/SMS notification to assigned NP via SMS Provider"]
N3 --> N4
N5{"Nurse Practitioner receives notification"}
N4 --> N5
N6["NP Workflow Service locks case to claiming NP"]
N5 -->|if: NP claims within window| N6
N7(["Case Queue Dashboard updates queue to reflect claimed case"])
N6 --> N7
N8["NP Dispatch & Notification triggers escalation logic"]
N5 -->|if: claim window expires| N8
N9["NP Workflow Service reassigns case to next available NP"]
N8 --> N9
N10(["NP Dispatch & Notification sends notification to newly assigned NP"])
N9 --> N10
Nurse Practitioner reviews AI-generated clinical summary, makes authorization decision, and generates medical document
flowchart TD
N1(["NP Workflow Service assigns new case and sends notification to available Nurse Practitioner via SMS Provider"])
N2["Nurse Practitioner opens NP Workbench and views Case Queue Dashboard"]
N1 --> N2
N3["Case Queue Dashboard displays queue with case filters, risk levels, and wait times"]
N2 --> N3
N4["Nurse Practitioner claims a case and opens Case Review Interface"]
N3 --> N4
N5["Case Review Interface displays three-column view: clinical summary, contraindication panel, and medication review"]
N4 --> N5
N6["Nurse Practitioner reviews AI-generated summary, transcript, and contraindication flags"]
N5 --> N6
N7{"Nurse Practitioner submits decision via Decision Workflow"}
N6 --> N7
N8["Medical Document Generator produces authorization document under Part 14"]
N7 -->|if: approved| N8
N9["Nurse Practitioner applies e-signature to medical document"]
N8 --> N9
N10["Authorization Status API updates patient status to active with expiry date"]
N9 --> N10
N11(["Patient receives notification that authorization is active"])
N10 --> N11
N12["Decision Workflow records refusal reason"]
N7 -->|if: declined| N12
N13["Amendment & Revocation Engine initiates refusal workflow under ss.137-139"]
N12 --> N13
N14(["Patient receives notification of decline with explanation"])
N13 --> N14
N15["Decision Workflow flags case with notes for escalation"]
N7 -->|if: flagged for review| N15
N16(["NP Dispatch & Notification escalates to senior NP"])
N15 --> N16
N17(["Compliance Audit Trail records decision, document generation, and handoff events"])
Active authorization is amended or revoked under Cannabis Regulations ss.137-139
flowchart TD
N1(["Nurse Practitioner initiates amendment or revocation from NP Workbench"])
N2["Amendment & Revocation Engine loads active authorization from Application Database"]
N1 --> N2
N3{"Nurse Practitioner selects action type"}
N2 --> N3
N4["Amendment & Revocation Engine records amendment details (dosage, product, duration changes)"]
N3 -->|if: amendment| N4
N5["Medical Document Generator produces amended authorization document"]
N4 --> N5
N6(["Authorization Status API updates authorization with amended terms"])
N5 --> N6
N7["Amendment & Revocation Engine records revocation reason under ss.137-139"]
N3 -->|if: revocation| N7
N8["Authorization Status API sets patient status to expired immediately"]
N7 --> N8
N9(["Checkout Gate blocks future purchases for this patient"])
N8 --> N9
N10["Patient receives notification of authorization change via Patient Dashboard"]
N11["Compliance Audit Trail records amendment or revocation event"]
N10 --> N11
N12(["Licensing Notice Module sends templated notice under s.277 if required"])
N11 --> N12
Nurse Practitioner uploads a recording of a voice call held with a patient outside the AI intake (e.g. clarification or follow-up call). Recording is stored encrypted and linked to the patient record and compliance audit trail
flowchart TD
N1(["Nurse Practitioner holds a voice call with the Patient outside the AI intake (clarification, follow-up, etc.) and rec..."])
N2["Nurse Practitioner opens Call Recording Upload in NP Workbench and selects the patient and case"]
N1 --> N2
N3["Nurse Practitioner uploads the audio recording and optional notes"]
N2 --> N3
N4["Call Recording Upload transmits the file to Platform API via authenticated REST endpoint"]
N3 --> N4
N5["Platform API stores the audio encrypted in Object Storage and creates a record in Application Database linking the re..."]
N4 --> N5
N6["Compliance Audit Trail records the upload event (NP, patient, case, timestamp, file hash)"]
N5 --> N6
N7(["Nurse Practitioner sees the recording in the patient case view for future reference"])
N6 --> N7
Order status and tracking data flows from Shopify (including Kinloch-selected fulfillment provider) back to the patient dashboard
flowchart TD
N1(["Shopify updates order status (confirmed, shipped, delivered) via Kinloch-selected fulfillment provider"])
N2["Order & Fulfillment Service detects status change from Shopify via API polling or webhook"]
N1 --> N2
N3["Order & Fulfillment Service stores updated order data in Application Database"]
N2 --> N3
N4["Patient opens Patient Dashboard and views current order status and tracking"]
N3 --> N4
N5(["Patient Dashboard displays order history with fulfillment details from Shopify"])
N4 --> N5
NP license verified against provincial college registry before case assignment. Extended scope — V1 approach TBD
flowchart TD
N1(["NP Workflow Service prepares to assign case to Nurse Practitioner"])
N2{"Practitioner License Verification queries Provincial College Registry for NP license status"}
N1 --> N2
N3["Practitioner License Verification confirms license validity and stores result"]
N2 -->|if: license active| N3
N4(["NP Workflow Service proceeds with case assignment"])
N3 --> N4
N5["Practitioner License Verification flags NP for manual review"]
N2 -->|if: license not found or expired| N5
N6(["NP Availability Management sets NP status to offline pending verification"])
N5 --> N6
N7["Practitioner License Verification falls back to manual verification process"]
N2 -->|if: unsupported province| N7
N8(["NP Workflow Service holds case assignment until manual check completes"])
N7 --> N8
N9(["Compliance Audit Trail records license verification event"])
On-demand CSV export of authorization events for Kinloch to submit to Health Canada manually under s.297
flowchart TD
N1(["Kinloch Admin requests a Health Canada report for a date range from Compliance & Regulatory Service"])
N2["Health Canada CSV Export queries Application Database for authorization events in the requested period"]
N1 --> N2
N3["Health Canada CSV Export generates a CSV file with the fields required for s.297 submission"]
N2 --> N3
N4["Kinloch Admin downloads the CSV file"]
N3 --> N4
N5["Kinloch Admin submits the report manually to Health Canada through Kinloch's existing regulatory channel"]
N4 --> N5
N6(["Compliance Audit Trail records the export event with timestamp, date range, and operator"])
N5 --> N6
Scoped disclosure packs submitted to provincial authorities under s.299
flowchart TD
N1(["Provincial Disclosure Module identifies disclosure obligation for a patient's province"])
N2["Provincial Disclosure Module queries Application Database for relevant authorization records"]
N1 --> N2
N3["Provincial Disclosure Module assembles scoped disclosure pack under s.299"]
N2 --> N3
N4["Provincial Disclosure Module transmits pack via secure channel"]
N3 --> N4
N5["Provincial Disclosure Module logs transmission in secure transmission log"]
N4 --> N5
N6(["Compliance Audit Trail records disclosure event"])
N5 --> N6
Phase 1 — Mobilization (W1–W2) · finalize SOW, select external tools, resolve Kinloch open items. Phase 2 — Development (W3–W10) · 8 parallel workstreams, mid-June start. Phase 3 — Internal Beta (W11+) · deployed to staging for Kinloch internal testing.
Week 1 begins June 1, 2026. Internal beta release target: August 10–17, 2026.
| Phase | Dates | Weeks | Purpose |
|---|---|---|---|
| Mobilization | Jun 1 – Jun 14 | W1–W2 | Make sure the SOW is right; find and shortlist external tools; get Kinloch answers on every open item. |
| Development | Jun 15 – Aug 9 | W3–W10 | Build the 16 flows in parallel across 8 workstreams. |
| Internal Beta | Aug 10 onward | W11+ | Deploy to staging; Kinloch internal team tests; bug triage. |
| Week | Dates | Milestone |
|---|---|---|
| W1 | Jun 1 – Jun 7 | Mobilization starts. SOW final review and sign-off. Team kickoff. Open items log opened. Cloud vendor shortlist. |
| W2 | Jun 8 – Jun 14 | Voice AI vendor selected. Payment gateway selected. Shopify setup confirmed. API seam contracts signed. Kinloch delivers: questionnaire content, gram-equivalency rules, onboarding questions, bilingual copy plan. Cloud subscription provisioned (Kinloch account). |
| W3 | Jun 15 – Jun 21 | Development starts. Foundations: auth + API skeleton + CI/CD + bilingual framework + DB and object-storage provisioned. |
| W4 | Jun 22 – Jun 28 | Patient account creation + onboarding questionnaire. Kinloch Wheel scaffolding. NP Workbench shell. AI Intake Engine scaffolding. |
| W5 | Jun 29 – Jul 5 | Voice AI integration. Clinical summary pipeline (LLM). Shopify catalogue integration. Compliance audit trail baseline. |
| W6 | Jul 6 – Jul 12 | NP authorization workflow end-to-end. Medical Document Generator + e-signature. Cart + Checkout Gate + Authorization Status API. |
| W7 | Jul 13 – Jul 19 | Gram Equivalency Calculator. Cart Restoration flow. Regulatory modules (s.277 / s.297 CSV export / s.299). Amendment & Revocation engine. |
| W8 | Jul 20 – Jul 26 | NP Call Recording Upload. Callback Scheduler + missed-callback retry. Order Sync + Patient Dashboard. Practitioner License Verification. |
| W9 | Jul 27 – Aug 2 | Bilingual EN/FR rollout complete. A6 build: Document Upload Surface + Medical Document AI Pre-Fill + External Document Review NP case type (no auto-validation; NP confirms). End-to-end integration testing across all 16 flows. Performance tuning. |
| W10 | Aug 3 – Aug 9 | Stabilization. Bug bash. Beta-ready cut. Internal environment prepared with test data. |
| W11+ | Aug 10 onward | Internal Beta release. Kinloch team testing begins. Triage + weekly patches. |
| Workstream | Mobilization | Development | Beta | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| W1 Jun 1–7 |
W2 Jun 8–14 |
W3 Jun 15–21 |
W4 Jun 22–28 |
W5 Jun 29 – Jul 5 |
W6 Jul 6–12 |
W7 Jul 13–19 |
W8 Jul 20–26 |
W9 Jul 27 – Aug 2 |
W10 Aug 3–9 |
W11 Aug 10+ |
|
| Mobilization & Open Items | SOW sign-off, team kickoff | Vendor pick, Kinloch answers | |||||||||
| Cloud & Infrastructure | Cloud provisioning | CI/CD, envs, bilingual framework | |||||||||
| Platform API & Auth | Auth + skeleton | Account, registration | Commerce + auth status | Gram calc + NP workflow | Order & fulfillment | ||||||
| Patient Web App | Age gate, shell, i18n | Account + onboarding | Wheel + browse | Cart + checkout gate | Cart restoration | Dashboard + notifications | |||||
| NP Workbench | Shell + queue dashboard | Case review interface | Decision workflow + e-sig | Availability + dispatch | Call recording upload | ||||||
| AI Clinical Intake | Questionnaire engine | Voice AI + recording | LLM summary + flags | Callback scheduler | Missed-callback retry | Doc upload + AI pre-fill (A6) | |||||
| Compliance & Regulatory | Audit trail | Medical doc + Part 14 | s.277 / s.297 CSV / s.299 | Amendment & revocation | License verification | ||||||
| Integration & Beta Prep | E2E testing + perf tuning | Bug bash, beta cut | |||||||||
| Practitioner Onboarding (Kinloch) | Recruit 2–3 NPs | License + credentialing | Workbench training | Mock case rehearsal | Beta-ready NPs | ||||||
| Internal Beta Release | Kinloch internal testing | ||||||||||
| Week | Kinloch deliverables / inputs |
|---|---|
| W1 | Confirm SOW v1.9 is accurate. Nominate sign-off authority. Nominate clinical and commercial stakeholders. |
| W2 | Confirm vendor choices (Voice AI, payment gateway). Confirm gram-equivalency ruleset. Deliver onboarding-questionnaire content. Deliver clinical-questionnaire content. Start producing bilingual (EN/FR) copy. Open cloud account. |
| W5 | Deliver legal review of Part 14 medical document template. |
| W6 | Practitioner onboarding starts. Identify 2–3 NPs for V1 beta. Begin licensing / credentialing checks. |
| W7 | Confirm Health Canada CSV field list. Confirm Practitioner License Verification approach (full API or province-matching). |
| W8 | NP Workbench training sessions (Ad-Wise to deliver training; Kinloch to provide trainees). |
| W9 | UAT participation on core flows (Patient Journey, NP Authorization). Deliver remaining bilingual copy. Mock case rehearsals with onboarded NPs. |
| W10 | All 2–3 NPs verified, trained, and beta-ready. Internal-beta operating procedures signed off. |
| W11+ | NPs participate in internal beta clinical workflows. Internal beta testers online; file issues daily; attend weekly triage. |
Bottom line: 2 weeks mobilization + 8 weeks development + beta = internal testing starts ~Aug 10, with a buffer week already included for stabilization.