Brainstorm Session 5: Multi-Industry Design¶
Date: 2026-04-15 Objective: Design how one codebase serves 10+ industries with depth in each Depends on: Sessions 1-4 (Elixir, 20 OTP apps, agent system, data model)
⚠️ KeyPay references superseded — 2026-04-18. §Pillar 3: Award Engine, Insight 4, and the "Evaluate KeyPay API for Phase 1 integration" action item predate the decision to drop KeyPay. Phase 1 now ports the 10–20 active ASG Central v2 Modern Awards into Finnest tables via Strangler Fig; Phase 2 builds a native Elixir engine over the Fair Work Commission Modern Awards Pay Database (MAPD) API. See
adrs/adr-016-F-award-interpretation-native-with-fwc-mapd.mdfor the authoritative direction. The brainstorm body below is preserved unchanged for historical context per BMAD convention.
Techniques Used¶
- SCAMPER — Challenge assumptions about multi-industry design
- Mind Mapping — The compliance engine and relationships
- Six Thinking Hats — Examine from all perspectives
Core Principle: Industries as Configuration, Not Code¶
Adding a new industry = adding rows to configuration tables and JSON profile files, not writing code. The compliance engine is a generic rules processor. Industry knowledge lives in data.
Three Pillars of Multi-Industry¶
Pillar 1: Credential Registry¶
Schema: compliance.credential_types
CREATE TABLE compliance.credential_types (
id UUID PRIMARY KEY,
parent_id UUID REFERENCES compliance.credential_types(id), -- hierarchy
code VARCHAR UNIQUE NOT NULL, -- e.g., "hrwl_forklift"
name VARCHAR NOT NULL, -- "Forklift Operation License"
category VARCHAR NOT NULL, -- high_risk_work/construction/mining/etc.
nationally_recognized BOOLEAN DEFAULT false,
issuing_jurisdictions JSONB, -- ["NSW","VIC","QLD",...]
mutual_recognition BOOLEAN DEFAULT true,
renewal_period_months INTEGER, -- null = no expiry
prerequisites JSONB DEFAULT '[]', -- [credential_type_ids]
industries JSONB DEFAULT '[]', -- ["construction","mining",...]
verification_method VARCHAR, -- document/api/manual/self_declared
document_templates JSONB, -- expected fields per doc type
metadata JSONB DEFAULT '{}'
);
Key properties: - Hierarchical (Forklift → High Risk Work License) - Prerequisites (Site Induction requires White Card) - Multi-industry (Forklift used in construction, logistics, mining, retail) - Lifecycle: discovered → submitted → verifying → verified → expiring → expired → renewed → revoked - ~100+ credential types seeded across all industries
Seed data by industry: - Construction: white_card, EWP, telehandler, crane, rigging, scaffolding, dogging, asbestos, confined_space, height_safety, site_induction - Mining: standard_11, coal_board_medical, drug_alcohol_clear, underground_induction, surface_induction, shot_firer - Logistics: driver_license_c/hc/mc/hr, fatigue_management, dangerous_goods, forklift - Defence: baseline_clearance, nv1, nv2, pv, disp_registration - Retail: rsa, rcg, food_safety, barista_cert - Traffic: traffic_controller, traffic_management_implementer, tmd, road_safety_audit - General: first_aid, cpr, manual_handling, working_at_heights, wwcc, police_check, right_to_work
Pillar 2: Industry Profiles¶
Schema: compliance.industry_profiles
CREATE TABLE compliance.industry_profiles (
id UUID PRIMARY KEY,
slug VARCHAR UNIQUE NOT NULL, -- "construction", "mining"
display_name VARCHAR NOT NULL, -- "Construction & Building"
description TEXT,
required_credential_types JSONB, -- [credential_type_ids]
recommended_credential_types JSONB,
enabled_modules JSONB, -- ["safety","fatigue","clearance"]
onboarding_steps JSONB, -- ordered list of onboarding requirements
compliance_rules JSONB, -- industry-specific compliance checks
terminology JSONB, -- {"worker":"operative","shift":"deployment"}
dashboard_config JSONB, -- widgets, default views
report_templates JSONB, -- industry-specific reports
metadata JSONB DEFAULT '{}'
);
CREATE TABLE compliance.org_industry_profiles (
org_id UUID NOT NULL REFERENCES public.organisations(id),
industry_profile_id UUID NOT NULL REFERENCES compliance.industry_profiles(id),
activated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
custom_overrides JSONB DEFAULT '{}', -- org-specific tweaks
PRIMARY KEY (org_id, industry_profile_id)
);
Composable profiles: - Orgs activate MULTIPLE profiles (labour_hire + construction + mining) - Required credentials = UNION of all profile requirements - Enabled modules = UNION of all profile modules - Terminology = MERGE (later profile overrides earlier) - Dashboard = COMBINE widgets from all profiles - Onboarding = UNION of steps, ordered by priority
10 industry profiles: 1. labour_hire — meta-industry, usually combined with others 2. construction — white_card, SWMS, site inductions 3. mining — drug tests, medicals, FIFO, fatigue management 4. logistics — driver licenses, fatigue, CoR 5. defence — security clearances, DISP, need-to-know 6. retail — award compliance, penalty rates, junior rates 7. white_collar — ATS/CRM-heavy, fewer compliance requirements 8. traffic — TC/TMI certifications, site plans, equipment tracking 9. civil — project-based, environmental compliance 10. engineering — professional registration, CPD tracking
Pillar 3: Award Engine¶
Phase 1 (Launch): Integrate with KeyPay - Finnest sends: hours, classification, date, state, award_code - KeyPay returns: base_rate, penalties, allowances, super, tax - Cost: ~$5-10/employee/month - Coverage: 120+ Modern Awards immediately
Phase 2 (6-12 months): Top 15 Awards Native - Build rules engine for awards covering ~80% of placements - Rules stored in compliance.awards + compliance.award_rates - KeyPay as fallback for long tail - Reduces per-employee cost for common awards to ~$0
Phase 3 (12-24 months): Full Native (if ROI justifies) - All 120+ Awards native - Enterprise Agreement support - Automated rate updates from Fair Work data
Schema for native engine:
CREATE TABLE compliance.awards (
id UUID PRIMARY KEY,
code VARCHAR UNIQUE NOT NULL,
name VARCHAR NOT NULL,
effective_date DATE NOT NULL,
supersedes_id UUID REFERENCES compliance.awards(id),
metadata JSONB
);
CREATE TABLE compliance.award_classifications (
id UUID PRIMARY KEY,
award_id UUID NOT NULL REFERENCES compliance.awards(id),
level VARCHAR NOT NULL,
description TEXT
);
CREATE TABLE compliance.award_rates (
id UUID PRIMARY KEY,
classification_id UUID NOT NULL REFERENCES compliance.award_classifications(id),
rate_type VARCHAR NOT NULL, -- base/casual_loading/penalty/allowance
rate DECIMAL(10,4) NOT NULL,
conditions JSONB, -- {day: "saturday", hours: "after_12pm"}
effective_from DATE NOT NULL,
effective_to DATE
);
How Industry Profiles Drive the Platform¶
| Module | What Industry Profile Drives |
|---|---|
| People | Which credential fields appear on employee records |
| Recruit | Which credentials to check when matching candidates to jobs |
| Onboard | Which onboarding steps are generated (industry-specific workflow) |
| Roster | Pre-shift credential validation (block non-compliant assignment) |
| Timekeep | Which award/classification to apply for rate calculation |
| Payroll | Which award engine to call, which rates to expect |
| Safety | Which safety checks, SWMS requirements, incident types |
| Clients | Rate card templates based on award + classification |
| Agents | Compliance agent knows what to check per industry |
| Web UI | Terminology, dashboard widgets, navigation, report templates |
| Fatigue | Only enabled if logistics/mining profile active |
| Clearance | Only enabled if defence profile active |
Compliance Score (Killer UX Feature)¶
Per-worker, per-industry compliance scoring:
Worker: John Smith
Overall: 78%
Construction: 90% ✓
✓ White Card (verified, no expiry)
✓ Site Induction — Minchinbury (completed 2026-03-01)
⚠ First Aid (expires 2026-06-15 — 2 months)
✓ Working at Heights (verified)
Mining: 45% ✗
✓ White Card
✗ Standard 11 Induction (not started)
✗ Coal Board Medical (not started)
⚠ Drug & Alcohol Clear (expires 2026-05-01 — 1 month)
Logistics: 100% ✓
✓ HR Driver License (verified, expires 2028)
✓ Fatigue Management (verified)
Drives: placement eligibility, onboarding priorities, dashboard alerts, agent recommendations, roster assignment validation.
Pay Rate Resolution¶
Pay rate is NOT on the employee. It's at the intersection:
Employee × Client × Award × Classification = Rate
people.contracts:
{ employee: "John", client: "Woolworths", award: "retail_award", class: "level_3" }
{ employee: "John", client: "DHL", award: "warehouse_award", class: "level_2" }
Roster assignment for Monday at Woolworths → retail_award level_3 rates
Roster assignment for Tuesday at DHL → warehouse_award level_2 rates
The roster.shift_assignment determines which contract (and rate) applies.
Key Insights¶
Insight 1: Industries as Configuration Plugins, Not Code¶
Each industry is a JSON config package. Compliance engine is generic processor. Adding industry = adding config rows. Non-developers manage via admin UI. Impact: High | Effort: Medium
Insight 2: Composable Profiles for Multi-Industry Organisations¶
Orgs activate multiple profiles. Requirements = UNION. A labour hire firm serving construction + mining + logistics gets combined credentials, modules, rules. Impact: High | Effort: Low
Insight 3: Hierarchical Credential Registry¶
Parent-child (Forklift → HRWL) + prerequisites (Induction requires White Card). Enables smart queries and prerequisite validation. Impact: High | Effort: Medium
Insight 4: Award Engine — Integrate First, Build Later¶
KeyPay for 120+ Awards at launch. Native engine for top 15 in Phase 2. Full native only if ROI justifies. Avoids $500K+ upfront. Impact: High | Effort: Low
Insight 5: Compliance Score Is the Killer UX Feature¶
Per-worker per-industry score drives every interaction. Nobody else offers cross-industry compliance visibility. Impact: High | Effort: Medium
Insight 6: Pay Rate at Employee × Client × Award × Classification¶
Not on employee record. Roster assignment resolves contract, which resolves award and rate. How Australian labour hire actually works. Impact: High | Effort: Medium
Statistics¶
- Total ideas: 30+
- Categories: 4 (Credential Registry, Industry Profiles, Award Engine, Platform Integration)
- Key insights: 6
- Techniques applied: 3
- Credential types: ~100+
- Industry profiles: 10
- Award strategy: 3-phase
Recommended Next Steps¶
→ Session 6: IRAP Strategy (defence profile + clearance module + deployment architecture) → Seed compliance.credential_types with full Australian credential catalogue → Design admin UI for industry profile management → Evaluate KeyPay API for Phase 1 integration
Generated by BMAD Method v6 - Creative Intelligence