Skip to content

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.md for the authoritative direction. The brainstorm body below is preserved unchanged for historical context per BMAD convention.

Techniques Used

  1. SCAMPER — Challenge assumptions about multi-industry design
  2. Mind Mapping — The compliance engine and relationships
  3. 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

→ 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