Kinloch Platform Product V1 SOW Doc v1.9

C4 Architecture Model & Behavioral Flows & Delivery Timeline · Product V1 · SOW Doc v1.9 · May 2026

2
Actors
6
External Systems
7
Containers
38
Components
16
Flows

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).

System Context Diagram C4 Level 1

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

Container Diagram C4 Level 2

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

Patient Web Application — Components C4 Level 3

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

NP Workbench — Components C4 Level 3

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

Platform API — Components C4 Level 3

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

AI Clinical Intake Engine — Components C4 Level 3

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 Service — Components C4 Level 3

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

Patient Journey

1. End-to-End Patient Journey Patient Journey

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
  

Detailed Steps

  1. Patient arrives at Patient Web Application
  2. Age Verification Gate validates patient age for cannabis content access
  3. Patient completes Account Creation Flow and Onboarding Questionnaire
  4. Patient explores products via Kinloch Wheel and Product Browse Page with personalized recommendations
  5. Patient adds products to Shopping Cart and attempts checkout
  6. Gram Equivalency Calculator validates gram total against Cannabis Act limits
  7. Checkout Gate blocks purchase — no authorization
  8. Patient initiates AI voice clinical intake via Questionnaire Engine
  9. Clinical Summary Generator produces structured summary via AI / LLM Provider
  10. NP Workflow Service assigns case to available Nurse Practitioner
  11. Nurse Practitioner reviews case in Case Review Interface and approves via Decision Workflow
  12. Medical Document Generator produces Part 14 authorization document with e-signature
  13. Authorization Status API updates patient to active authorization with expiry date
  14. Patient receives authorization notification and returns to Shopping Cart
  15. Checkout Gate re-runs gram check and unlocks checkout
  16. Shopify processes payment via embedded buy flow and initiates fulfillment
  17. Patient Dashboard displays active authorization, order status, and tracking
  18. Compliance Audit Trail records full audit trail

2. Patient Registration & Account Setup Patient Journey

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
  

Detailed Steps

  1. Patient arrives at Patient Web Application and encounters Age Verification Gate
  2. Age Verification Gate validates patient meets age requirement for cannabis content
  3. Patient begins Account Creation Flow — 4-screen progressive form (identity + onboarding)
  4. Account Creation Flow collects identity fields required for registration
  5. Onboarding Questionnaire captures patient needs and preferences to seed personalized discovery
  6. Auth Service sends email verification and creates account in Application Database
  7. Patient confirms email and completes registration
  8. Patient Registration Engine generates internal patient identifier and stores registration in Application Database
  9. Patient sets up Two-Step Verification
    • if: SMS verification:
      1. Auth Service sends verification code via SMS Provider
      2. Patient enters SMS code to confirm
    • if: authenticator app:
      1. Auth Service generates QR code for authenticator app setup
      2. Patient scans QR and confirms with generated code
  10. Patient accesses Patient Dashboard showing account status, empty order history, and authorization state (none)
  11. Compliance Audit Trail records account creation and consent events

3. Patient Login & Session Patient Journey

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
  

Detailed Steps

  1. Patient opens Patient Web Application and navigates to Login & Session Management
  2. Patient enters email and password
  3. Auth Service validates credentials against Application Database
    • if: credentials valid:
      1. Auth Service prompts for Two-Step Verification
      2. Patient completes 2FA via SMS code or authenticator app
      3. Auth Service establishes persistent session
      4. Patient lands on Patient Dashboard with auth status and order history
    • if: credentials invalid:
      1. Auth Service increments failed attempt counter
      2. Login & Session Management displays error and allows retry
    • if: account locked:
      1. Auth Service blocks login after excessive failed attempts
      2. Login & Session Management displays lockout message with recovery options

4. Patient Discovery & Purchase Patient Journey

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
  

Detailed Steps

  1. Patient opens Patient Web Application and lands on the Kinloch Wheel
  2. Kinloch Wheel personalizes exploration using Onboarding Questionnaire responses captured during registration
  3. Discovery Service generates real-time product recommendations based on patient selections and onboarding preferences
  4. Patient browses recommended products on Product Browse Page with filters and detail pages
  5. Patient adds products to Shopping Cart
  6. Shopping Cart persists cart state via Commerce Service
  7. Patient proceeds to checkout, hitting the Checkout Gate
  8. Gram Equivalency Calculator validates cart gram-equivalent total against Cannabis Act per-order limits
    • if: within limit:
      1. Checkout Gate queries Authorization Status API for auth state
    • if: exceeds limit:
      1. Checkout Gate blocks purchase with clear gram-limit message and cart-adjustment prompt
  9. Checkout Gate evaluates authorization state
    • if: active authorization:
      1. Checkout Gate unlocks and redirects to Shopify embedded buy flow
      2. Shopify processes payment and initiates fulfillment (Kinloch-selected provider, integrated through Shopify)
      3. Order & Fulfillment Service retrieves order data from Shopify
      4. Patient Dashboard displays order status and tracking
    • if: no account or expired auth:
      1. Checkout Gate blocks purchase and prompts patient to register or complete clinical intake
      2. Shopping Cart preserves cart for restoration after authorization

5. Cart Restoration After Authorization Patient Journey

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
  

Detailed Steps

  1. Patient had items in Shopping Cart but was blocked by Checkout Gate due to missing authorization
  2. Commerce Service persists cart state in Application Database tied to patient account
  3. Patient completes clinical intake and receives NP authorization
  4. Authorization Status API confirms active authorization status
  5. Patient returns to Patient Web Application
  6. Shopping Cart restores previously saved cart items via Commerce Service
  7. Gram Equivalency Calculator re-validates gram total against Cannabis Act limits
  8. Checkout Gate confirms active authorization and unlocks checkout
  9. Patient proceeds to Shopify embedded buy flow to complete purchase

Clinical Intake & Authorization

6. AI Clinical Intake Clinical Intake & Authorization

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
  

Detailed Steps

  1. Patient initiates clinical intake from Patient Web Application
  2. Platform API routes intake request to AI Clinical Intake Engine
  3. Questionnaire Engine schedules voice intake and presents the clinical questionnaire in the correct sequence
  4. Patient selects preferred callback window
  5. Callback Scheduler schedules callback and confirms via SMS through SMS Provider
  6. Voice AI Platform initiates voice intake call at scheduled time
  7. Voice Recording Manager captures voice recording and generates transcript
  8. Voice Recording Manager stores encrypted recording in Object Storage
  9. Clinical Summary Generator sends intake data to AI / LLM Provider for processing
  10. AI / LLM Provider returns structured clinical summary with contraindication flags and completeness score
  11. Clinical Summary Generator stores summary in Application Database and marks case ready for NP review
  12. Compliance Audit Trail records intake consent and handoff event

7. Missed Callback & Retry Clinical Intake & Authorization

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
  

Detailed Steps

  1. Callback Scheduler triggers callback at patient-selected time via Voice AI Platform
  2. Voice AI Platform attempts to reach Patient — call goes unanswered
  3. Callback Scheduler records missed callback in Application Database
  4. Callback Scheduler waits 1 hour and initiates retry via Voice AI Platform
  5. Voice AI Platform attempts second call to Patient
    • if: patient answers:
      1. Voice Recording Manager begins voice intake recording
      2. Questionnaire Engine continues intake from where patient left off
    • if: missed again:
      1. Callback Scheduler sends SMS fallback via SMS Provider with link to reschedule
      2. Patient receives SMS and can reschedule the voice intake

8. NP Dispatch & Case Assignment Clinical Intake & Authorization

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
  

Detailed Steps

  1. Clinical Summary Generator marks intake case as ready for NP review
  2. NP Workflow Service checks NP Availability Management for online NPs with capacity
  3. NP Dispatch & Notification assigns case to best-match NP and opens claim window
  4. NP Dispatch & Notification sends push/SMS notification to assigned NP via SMS Provider
  5. Nurse Practitioner receives notification
    • if: NP claims within window:
      1. NP Workflow Service locks case to claiming NP
      2. Case Queue Dashboard updates queue to reflect claimed case
    • if: claim window expires:
      1. NP Dispatch & Notification triggers escalation logic
      2. NP Workflow Service reassigns case to next available NP
      3. NP Dispatch & Notification sends notification to newly assigned NP

9. NP Authorization Workflow Clinical Intake & Authorization

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"])
  

Detailed Steps

  1. NP Workflow Service assigns new case and sends notification to available Nurse Practitioner via SMS Provider
  2. Nurse Practitioner opens NP Workbench and views Case Queue Dashboard
  3. Case Queue Dashboard displays queue with case filters, risk levels, and wait times
  4. Nurse Practitioner claims a case and opens Case Review Interface
  5. Case Review Interface displays three-column view: clinical summary, contraindication panel, and medication review
  6. Nurse Practitioner reviews AI-generated summary, transcript, and contraindication flags
  7. Nurse Practitioner submits decision via Decision Workflow
    • if: approved:
      1. Medical Document Generator produces authorization document under Part 14
      2. Nurse Practitioner applies e-signature to medical document
      3. Authorization Status API updates patient status to active with expiry date
      4. Patient receives notification that authorization is active
    • if: declined:
      1. Decision Workflow records refusal reason
      2. Amendment & Revocation Engine initiates refusal workflow under ss.137-139
      3. Patient receives notification of decline with explanation
    • if: flagged for review:
      1. Decision Workflow flags case with notes for escalation
      2. NP Dispatch & Notification escalates to senior NP
  8. Compliance Audit Trail records decision, document generation, and handoff events

10. Authorization Amendment & Revocation Clinical Intake & Authorization

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
  

Detailed Steps

  1. Nurse Practitioner initiates amendment or revocation from NP Workbench
  2. Amendment & Revocation Engine loads active authorization from Application Database
  3. Nurse Practitioner selects action type
    • if: amendment:
      1. Amendment & Revocation Engine records amendment details (dosage, product, duration changes)
      2. Medical Document Generator produces amended authorization document
      3. Authorization Status API updates authorization with amended terms
    • if: revocation:
      1. Amendment & Revocation Engine records revocation reason under ss.137-139
      2. Authorization Status API sets patient status to expired immediately
      3. Checkout Gate blocks future purchases for this patient
  4. Patient receives notification of authorization change via Patient Dashboard
  5. Compliance Audit Trail records amendment or revocation event
  6. Licensing Notice Module sends templated notice under s.277 if required

11. NP Call Recording Upload Clinical Intake & Authorization

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
  

Detailed Steps

  1. Nurse Practitioner holds a voice call with the Patient outside the AI intake (clarification, follow-up, etc.) and records it locally per Kinloch's clinical protocol
  2. Nurse Practitioner opens Call Recording Upload in NP Workbench and selects the patient and case
  3. Nurse Practitioner uploads the audio recording and optional notes
  4. Call Recording Upload transmits the file to Platform API via authenticated REST endpoint
  5. Platform API stores the audio encrypted in Object Storage and creates a record in Application Database linking the recording to the patient, case, and NP
  6. Compliance Audit Trail records the upload event (NP, patient, case, timestamp, file hash)
  7. Nurse Practitioner sees the recording in the patient case view for future reference

Commerce & Fulfillment

12. Shopify Order Status Sync Commerce & Fulfillment

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
  

Detailed Steps

  1. Shopify updates order status (confirmed, shipped, delivered) via Kinloch-selected fulfillment provider
  2. Order & Fulfillment Service detects status change from Shopify via API polling or webhook
  3. Order & Fulfillment Service stores updated order data in Application Database
  4. Patient opens Patient Dashboard and views current order status and tracking
  5. Patient Dashboard displays order history with fulfillment details from Shopify

Compliance & Regulatory

13. Practitioner License Verification Compliance & Regulatory

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"])
  

Detailed Steps

  1. NP Workflow Service prepares to assign case to Nurse Practitioner
  2. Practitioner License Verification queries Provincial College Registry for NP license status
    • if: license active:
      1. Practitioner License Verification confirms license validity and stores result
      2. NP Workflow Service proceeds with case assignment
    • if: license not found or expired:
      1. Practitioner License Verification flags NP for manual review
      2. NP Availability Management sets NP status to offline pending verification
    • if: unsupported province:
      1. Practitioner License Verification falls back to manual verification process
      2. NP Workflow Service holds case assignment until manual check completes
  3. Compliance Audit Trail records license verification event

14. Health Canada Monthly Reporting (CSV Export) Compliance & Regulatory

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
  

Detailed Steps

  1. Kinloch Admin requests a Health Canada report for a date range from Compliance & Regulatory Service
  2. Health Canada CSV Export queries Application Database for authorization events in the requested period
  3. Health Canada CSV Export generates a CSV file with the fields required for s.297 submission
  4. Kinloch Admin downloads the CSV file
  5. Kinloch Admin submits the report manually to Health Canada through Kinloch's existing regulatory channel
  6. Compliance Audit Trail records the export event with timestamp, date range, and operator

15. Provincial Authority Disclosure Compliance & Regulatory

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
  

Detailed Steps

  1. Provincial Disclosure Module identifies disclosure obligation for a patient's province
  2. Provincial Disclosure Module queries Application Database for relevant authorization records
  3. Provincial Disclosure Module assembles scoped disclosure pack under s.299
  4. Provincial Disclosure Module transmits pack via secure channel
  5. Provincial Disclosure Module logs transmission in secure transmission log
  6. Compliance Audit Trail records disclosure event

Kinloch V1 — Delivery Timeline

Mobilization → 8-week Development → Internal Beta · v1.3

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 Overview

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.

Weekly Milestones

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.

Parallel Workstreams (Gantt)

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

Kinloch Responsibilities by Week

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.

Critical Path & Risks


Bottom line: 2 weeks mobilization + 8 weeks development + beta = internal testing starts ~Aug 10, with a buffer week already included for stabilization.