Roadmap ¶
Current State (Q1) ¶
- Shifts originate in core and are published to WhenIWork upon manual trigger
- Shift changes are pulled in batch from WhenIWork upon manual trigger
- Location, position, employee, and site changes are pulled in batch from WhenIWork upon manual trigger
graph LR
subgraph "When I Work"
WIW[fa:fa-calendar When I Work API]
click WIW "https://dev.wheniwork.com/"
end
subgraph Intuit
QB[fa:fa-dollar QuickBooks Online API]
click QB "https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/customer"
end
subgraph IndeVets
CORE{fa:fa-sun Core}
PG[("PostgreSQL<br>Database")]
PG === CORE
CORE --> |"Publish shifts<br>{ site, employee, location, position,<br>start_time, end_time, color, notes, published, is_open }"| WIW
WIW --> |"Pull shifts<br>{ customer, creator, employee, location, position, site,<br>start_time, end_time, color, notes, alerted, published,<br>notified, acknowledegd, is_open, is_overnight }"| CORE
WIW --> |"Pull locations<br>{ account, place, name, region, postal_code, sort, is_deleted }"| CORE
WIW --> |"Pull positions<br>{ name, color, sort, is_private }"| CORE
WIW --> |"Pull employees<br>{ email, first/last name, phone, hourly_rate, position_rates,<br>activated, is_hidden, is_private, is_deleted, is_active, avatar }"| CORE
WIW --> |"Pull sites<br>{ location, customer, name, color,<br>description, address, lat/lon, deleted_at }"| CORE
QB --> |"Pull customers<br>{ parent, company_name, is_parent, is_child,<br>is_subcustomer, bill_with_parent, is_invoicable, is_office,<br>is_site, is_active, is_indie_corp }"| CORE
CORE --> |"Create customer<br>{ first/last name, display name, company name,<br>check name, primary email, notes, billing address }"| QB
end
RESTIC[/Restic Repository\]
WIW --> |Hourly unstructured snapshot| RESTIC
PG --> |Hourly structured snapshot| RESTIC
RESTIC -.-> CLOUD1[/GCP Cloud Storage\]
RESTIC -.-> OFFCLOUD1[\Off-cloud storage/]
WhenIWork Transitional State (Q2-Q3) ¶
- Q2: Phase-out use of manually-triggered batch pulls of WIW entity properties
- Q2: Phase-in narrow reactions to specific WhenIWork change events
- Q2: We will err on the side of keeping records managed in WhenIWork to maximize focus on doctor workflow R&D
- Q2: Core data models extended and added to support new features, update from WhenIWork change events
- Q3: Phase out doing any records management in WhenIWork, provide full management in Core and push changes into WhenIWork
- Q3: Monitor WhenIWork Audit Flow Dashboard
- Q3: Wind-down doctor use of WhenIWork: no new vets onboarded, user accounts gradually deactivated, notifications switched over
- Q3: Payroll and other business reporting migrated over to Core
graph LR
subgraph IndeVets
CORE{fa:fa-sun Core}
WIW-MIRRORfa:fa-camera-retro WhenIWork<br>Structured<br>Data Mirror
WIW-OBSERVERfa:fa-eye WhenIWork<br>Observer
WIW-FLOWDASH["fa:fa-bar-chart WhenIWork<br>Audit Flow<br>Dashboard"]
PG[(PostgreSQL)]
PG === CORE
end
subgraph Intuit
QB[fa:fa-dollar QuickBooks Online API]
click QB "https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/customer"
QB --> |Pull customers| CORE
CORE --> |Create customer| QB
end
subgraph "When I Work"
WIW[fa:fa-calendar When I Work API]
click WIW "https://dev.wheniwork.com/"
CORE --> |Publish shift| WIW
CORE --> |Take shift| WIW
CORE --> |Core-managed entity updates| WIW
WIW ==> |Hourly structured snapshot of all entities| WIW-MIRROR
WIW --> |Minutely structured snapshot of current shifts| WIW-MIRROR
WIW-MIRROR -.-> |Audit logs| CORE
WIW-MIRROR -.-> |Audit events| WIW-OBSERVER
WIW-OBSERVER -.-> |Shift taken| CORE
WIW-OBSERVER -.-> |WIW-managed entity updates| CORE
WIW-MIRROR --- WIW-FLOWDASH
end
subgraph Backups
RESTIC[/Restic Repository\]
PG --> |Hourly structured snapshot| RESTIC
RESTIC -.-> CLOUD1[/GCP Cloud Storage\]
RESTIC -.-> OFFCLOUD1[\Off-cloud storage/]
end
Post-WhenIWork State (Q4) ¶
- All records managed in Core
- WhenIWork no longer updated or used in the field
- Automation of payroll and other business processes driven by Core recordkeeping
graph LR
subgraph Intuit
QB[fa:fa-dollar QuickBooks Online API]
end
subgraph IndeVets
CORE{fa:fa-sun Core}
PG[(PostgreSQL)]
PG === CORE
CORE --> |Create customer| QB
CORE --> |Create invoice| QB
QB --> |Invoice status| CORE
end
RESTIC[/Restic Repository\]
PG --> |Hourly structured snapshot| RESTIC
RESTIC -.-> CLOUD1[/GCP Cloud Storage\]
RESTIC -.-> OFFCLOUD1[\Off-cloud storage/]
RESTIC -.-> OFFCLOUD2[\IndeVets Office/]