Skip to main content

Gig Domain Overview

What the Gig Domain Does

The Gig domain manages the end-to-end lifecycle of ad-hoc, short-term job fulfilment — from an employer posting a manpower need, to a talent completing the work and receiving payment.

A typical scenario: a McDonald's outlet needs 3 Service Crew workers for an 8-hour shift next Tuesday. The Gig domain handles posting that shift, matching it with suitable gig workers, tracking who shows up, recording their working hours, and ensuring they get paid.

What makes Gig different from Careers?

GigCareers
DurationSingle shift (typically 4–10 hours)Ongoing employment
FrequencyRecurring — same job, new shifts weeklyOne-time posting per opening
SelectionFast — ranked by algorithm, can auto-selectManual — employer reviews applications
AttendanceTracked per shift via QR clock-in/outNot tracked by platform
PaymentPer shift, calculated from hours workedNot handled by platform
CreditsConsumes gig credits from BillingConsumes placement credits from Billing

Fundamental Concepts

Job vs Shift

A Job is a long-lived definition of a manpower need. It describes the role, location, pay rate, description, and requirements. Jobs are not one-time postings — employers keep them active and add new Shifts over time.

Example: "Service Crew at McDonald's Orchard, $12/hr" is a Job that persists for months. The employer adds new Shifts to it whenever they need workers.

A Shift is a specific time window within a Job that needs workers. Each Shift has a start time, end time, and a headcount (how many workers are needed). Shifts own the fulfilment lifecycle — they are what gets posted, applied to, staffed, and completed.

Example: "Tuesday April 8, 9am–6pm, 3 workers needed" is a Shift under the McDonald's Service Crew Job.

important

The Shift is the primary lifecycle entity in the Gig domain, not the Job. Jobs are containers; Shifts are what gets fulfilled. All status tracking, application, assignment, attendance, and payment happen at the Shift level.

Application — The Recruiting Phase

An Application represents a talent's intent to work a specific shift — the talent shows they want to work that shift by applying, and the employer shows they want that talent to fulfil the manpower need by accepting.

The Application answers: "Who wants to work this shift, and do both parties agree?"

An Application goes through a double handshake:

  1. Talent applies — expresses interest in the Shift
  2. Employer accepts — selects this talent from the ranked applicant pool
  3. Talent confirms — acknowledges the selection and commits to showing up

Only when both parties have agreed does the system create an Assignment.

Assignment — The Operations Phase

An Assignment represents a confirmed work order — a specific talent committed to work a specific shift. This is the operational record that tracks attendance and working hours.

The Assignment answers: "Who is working, when did they start/stop, and how much do we pay them?"

The Three Definitions of Time

Every Assignment tracks time at two levels, with a third derived from the Shift:

TimeWhat it recordsWho sets itMutable?
Scheduled TimeWhen the shift is supposed to happenDerived from Gig::Shift.starts_at / ends_atNo (it's on the Shift)
Actual TimeWhen the worker physically clocked in/outSystem (QR scan timestamp)Never — this is the immutable audit record
Billable TimeThe hours the employer agrees to pay forEmployer (defaults to actual, can override)Yes, until the verification deadline

Example: A shift runs 9am–6pm (scheduled). The worker scans QR at 9:02am and 6:01pm (actual). The employer confirms 9:00am–6:00pm with a 60-minute paid break (billable). The worker is paid for 8 hours.

This separation is critical for:

  • Audit trails — actual times are never lost, even when billable times are adjusted
  • Dispute resolution — "the QR says 9:02am but I started working at 9:00am" is handled by the employer adjusting billable time
  • The forgotten QR code scenario — employer generates QR late, worker started earlier. Actual time says 9:30am (when QR was scanned), but employer adjusts billable time to 9:00am

Settlement Window

After a worker clocks out, the employer has until 9:00am the next day to adjust billable times. During this window:

  • The employer can modify billable_clock_in, billable_clock_out, and billable_break_minutes
  • Each change is recorded in an adjustment log for audit
  • After the deadline, billable times are locked and Payment is generated

Payment — Wage Disbursement

A Payment tracks the wage owed to a talent for a completed Assignment and its disbursement status. It is created after billable times are locked (the Assignment is "verified").

Payment represents the Jod → Talent money flow. The Employer → Jod money flow (gig credit consumption) is handled by the Billing domain.

Headcount — Derived Staffing State

Each Shift specifies a headcount — how many workers are needed. The staffing level is derived by counting confirmed Assignments against the headcount, not stored as a status.

Filled / HeadcountWhat the employer sees
0 / 3"3 positions open"
1 / 3"1 confirmed, 2 positions open"
3 / 3"Fully staffed"

The Shift stays open regardless of how many positions are filled. It stops accepting new applications when the headcount is met or the application cutoff time passes.


Domain Models

ModelPurposeLifecycle
Gig::JobLong-lived manpower need (outlet, role, description)activearchived
Gig::ShiftSpecific time window needing workersdraftpending_approvalopenactivepending_verificationcompleted (+ cancelled, expired)
Gig::ApplicationTalent's intent + mutual selection processpendingacceptedconfirmed (+ rejected, withdrawn, expired, cancelled)
Gig::AssignmentConfirmed work order with attendance trackingconfirmedclocked_inclocked_outverified (+ cancelled, no_show)
Gig::AssignmentAdjustmentAppend-only audit log of billable time changesImmutable (event record)
Gig::PaymentWage disbursement trackingpendingprocessingpaid
Gig::QrCodeClock-in/out QR codes with expiryGenerated per shift, expires after configured duration

The Gig Business Process

Phase 1: Posting

  1. Employer creates a Gig::Job (or reuses an existing one) defining the role, location, pay rate, and requirements
  2. Employer adds a Gig::Shift (to a Gig::Job) specifying start time, end time, and headcount
  3. If the employer's company requires approval, the Shift enters pending_approval until an approver publishes it
  4. Once approved (or immediately if no approval required), the Shift becomes open and is visible to talent on the marketplace

Phase 2: Matching and Selection

  1. Talent browse open Shifts (via Listings::Job) and apply — creating a Gig::Application in pending status
  2. System ranks all applicants for the Shift using a scoring algorithm based on: show-up reliability, cancellation history, category experience, and employer ratings
  3. Employer reviews ranked applicants and accepts one or more — each Application that the employer accepts moves to accepted
  4. Auto-selection (if enabled for the outlet/location): If the employer hasn't selected anyone by the cutoff time, the system auto-selects the top-ranked applicant(s) up to headcount. Some clients prefer to disable auto-selection — this is a per-location configuration.
  5. Selected talent receives a notification and must confirm — Application moves to confirmed
  6. Upon confirmation, the system creates a Gig::Assignment linking the talent to the shift

Phase 3: Attendance

  1. When the shift start time arrives, the Shift transitions to active
  2. Employer generates a clock-in Gig::QrCode for the Shift
  3. Talent scans the QR code to clock in — Assignment moves to clocked_in, actual_clock_in is recorded
  4. Talent works the shift
  5. Employer generates a clock-out QR code and fills in the initial time confirmation form
  6. Talent scans the QR code to clock out — Assignment moves to clocked_out, actual_clock_out recorded, billable_* fields set from the employer's form

Phase 4: Verification and Payment

  1. The settlement window opens — employer can adjust billable times until 9:00am the next day
  2. Each adjustment creates an immutable Gig::AssignmentAdjustment record capturing old values, new values, reason, and who made the change
  3. At the deadline (or earlier if employer explicitly locks), billable times are finalised — Assignment moves to verified
  4. System creates a Gig::Payment calculated from verified billable hours × hourly rate
  5. System triggers Billing domain to consume gig credits from the employer's entitlement lots (FIFO allocation across lots)
  6. Payment tracks disbursement status: pendingprocessing (included in bank instruction file) → paid (confirmed)

Phase 5: Completion

  1. When all Assignments for a Shift reach a terminal state (verified, cancelled, or no_show), the Shift transitions to completed
  2. The Job remains active — employer continues adding new Shifts as needed

Key Business Rules

Talent Cancellation Policy

A talent can cancel at different points in the flow, with increasing consequences as the shift approaches. Cancellation reasons are mandatory for post-selection cancellations (via Taxonomy::GigStatusReason).

Before selection (Application in pending): Talent can withdraw at any time. No penalty, no document required. Application moves to withdrawn.

After selection (Application in accepted or confirmed, or Assignment exists):

WindowRequirementsPenaltyShift impact
>48 hours before shiftCancellation reason requiredNo penaltyAssignment cancelled, shift headcount reopens for new applicants
3–48 hours before shiftCancellation reason requiredEnters progressive suspension disciplineAssignment cancelled, shift headcount reopens
0–3 hours before shiftCancellation reason + supporting document required (urgent cancellation)Enters progressive suspension disciplineAssignment cancelled, shift headcount reopens if >30min before start
After shift startsCancellation blockedTreated as no-show (see Suspension Policy)

Cancellation is blocked when: the talent has already clocked in, or the shift has already started (treated as no-show).

No explicit reposting mechanism. When an Assignment is cancelled, the shift's filled count decreases. If the shift is still open (before the application cutoff time), it naturally accepts new applicants — there is no need to create a new shift.

Employer Cancellation Policy

When an employer cancels a confirmed Assignment (talent has already confirmed), gig credits are deducted proportional to how late the cancellation is. This discourages disruptive last-minute cancellations that waste talent's time and availability.

WindowCredit deduction
>48 hours before shiftNo deduction
24–48 hoursProgressive deduction (low)
12–24 hoursProgressive deduction (moderate)
3–12 hoursProgressive deduction (high)
0–3 hoursProgressive deduction (very high)
After shift startsFull shift value consumed

Specific deduction percentages per window are a configuration decision. Cancellation reasons are mandatory (via Taxonomy::GigStatusReason) to enable future policy refinement based on data.

note

When an employer cancels a clocked_in Assignment (talent has already started working), the payment for hours already worked is an open question — see Gig::Payment model spec.

Suspension Policy

Suspension is a progressive discipline system for talent who no-show or cancel late (within 48 hours of shift start).

Triggers:

  • Talent cancels a confirmed Assignment within 48 hours of shift start
  • Talent does not clock in for an assigned shift (no-show, detected by system)

Progressive tiers:

TierOffensePenaltyAppeal window
Warning1stWarning notification only. No suspension. Incident recorded.N/A
Short suspension2nd7-day suspension24 hours pre-suspension
Medium suspension3rd30-day suspension24 hours pre-suspension
Long suspension4th+90-day suspension24 hours pre-suspension

Appeal mechanism:

When a suspension is triggered (2nd offense and above), the system creates a pending suspension state. The talent has 24 hours to submit an appeal with a supporting document (e.g., MC) via the app.

During the 24-hour appeal window:

  • Talent cannot apply to new shifts
  • Existing confirmed Assignments are preserved (employers are not disrupted)
  • Talent can still work their confirmed shifts

After the appeal window:

  • If appeal submitted: Ops reviews (typical turnaround: same business day). If approved, penalty is cleared and full access is restored. If rejected, suspension takes effect.
  • If no appeal: Suspension takes effect automatically.

When suspension takes effect:

  • Talent cannot apply to new shifts
  • Assignments within the suspension period are cancelled
  • Assignments scheduled after the suspension ends are preserved
  • Talent can still log in and view profile/history (read-only)
  • Suspension lifts automatically when the period expires

Auto-Selection Timing

Auto-selection is a per-location configuration — some clients prefer manual selection only. When enabled, if the employer has not selected any applicants by the auto-select deadline:

  • AM shifts (starting 00:00–11:59): auto-select runs at 9:00am the previous day
  • PM shifts (starting 12:00–23:59): auto-select runs at 5:00pm the previous day

The system selects the top-ranked applicant(s) up to the shift's headcount.

No-Show Handling

If a talent does not clock in within a configured window after the shift starts:

  • Assignment is marked no_show
  • Talent enters the progressive suspension discipline (see Suspension Policy above)
  • No Payment is generated for this Assignment

Shift Expiration

If a shift reaches its cutoff time with no applicants or no selections:

  • Shift transitions to expired
  • All remaining pending Applications are closed

Time Overlap Prevention

When a talent is confirmed for a shift, the system checks for time conflicts with other shifts the talent has applied to. Conflicting Applications are automatically rejected to prevent double-booking.


Cross-Domain Interactions

DomainInteraction
BillingWhen an Assignment is verified, the Gig domain triggers credit consumption from the employer's gig entitlement lots. The consumed amount equals the billable wage. Reservation may happen at shift posting time to prevent overspend.
OrgGig::Job belongs to Org::Company. Employer actions are performed by Org::UserProfile. Role definitions come from Org::JobRoleVersion.
TalentGig::Application and Gig::Assignment reference Talent::Profile. Ranking algorithm uses talent's historical gig performance.
ListingsGig::Job with its open shifts are synced to Listings::Job for the public marketplace. Talent discovers shifts through Listings search.
TaxonomyTaxonomy::GigStatusReason provides the canonical list of cancellation and rejection reasons.
External IntegrationsShifts can originate from external workforce management systems (e.g., UKG). The integration layer maps external shifts to Gig::Shift records and syncs selection/attendance data back. Designed to support multiple integration providers.

Glossary

TermDefinition
JobLong-lived definition of a manpower need — the role, location, pay rate, and description. Not a one-time posting.
ShiftA specific time window within a Job that needs workers. The primary lifecycle entity in the Gig domain.
ApplicationA talent's expression of interest in working a shift, combined with the mutual selection process.
AssignmentA confirmed work order — a talent committed to work a specific shift. The operational record for attendance.
HeadcountNumber of workers needed for a shift. Staffing level is derived by counting Assignments against headcount.
Actual TimeThe immutable, system-recorded timestamp when a QR code was scanned. Used for audit.
Billable TimeThe employer-confirmed working hours used to calculate payment. Defaults to actual time, can be adjusted during the settlement window.
Settlement WindowThe period after clock-out (until 9:00am next day) during which the employer can adjust billable times.
VerificationThe act of locking billable times — either by the deadline passing or the employer explicitly confirming. Triggers Payment creation.
Double HandshakeThe mutual agreement process: employer accepts an applicant, then the talent confirms. Both must agree before an Assignment is created.
Auto-SelectionSystem automatically selects the top-ranked applicant(s) if the employer hasn't made a selection by the cutoff time.
RankingScoring algorithm that ranks applicants based on: show-up reliability (30%), cancellation history (25%), category experience (25%), and employer ratings (20%).
No-ShowWhen a confirmed talent fails to clock in for their assigned shift. Enters progressive suspension discipline.
Pending SuspensionA temporary state after a suspension is triggered, giving the talent 24 hours to appeal with a supporting document before the suspension takes effect.
AppealA talent's submission of a supporting document (e.g., MC) to contest a pending suspension. Reviewed by ops.

Open Questions

  1. Approval hierarchy: The pending_approval flow for shifts requires defining who can approve shift postings. This depends on Org::UserProfile role/permission design which is not yet defined.
  2. Billing reservation timing: Should gig credits be reserved when the Shift is posted (to prevent overspend), or when the Assignment is created (to avoid locking credits for unfilled positions)? See Billing domain documentation for reservation mechanics.
  3. QR code scope: Should QR codes be generated per-shift (all workers scan the same code) or per-assignment (each worker gets their own)? Legacy supports both — per-shift with reuse within expiry window.
  4. Auto-selection with headcount > 1: When auto-selecting multiple workers, should the system select all at once or stagger selections to give each talent time to confirm?
  5. Shift active trigger: Recommended as time-based (shift transitions to active at starts_at), but could also be event-based (first clock-in). Time-based enables no-show detection before anyone clocks in.
  6. Employer cancellation of clocked-in Assignment: When an employer cancels a clocked_in Assignment, the talent has already worked some hours. How should payment be handled? See Gig::Payment model spec.
  7. Employer credit deduction percentages: The principle of time-windowed progressive deduction is established. Specific percentages per window (e.g., 25%, 50%, 75%, 100%) are a configuration decision to be determined.
  8. No-show vs late cancel severity: Currently treated the same in the progressive discipline. Future consideration: should no-shows skip the warning tier and start at short suspension?
  9. Loyalty program integration: A future loyalty program (points per hour worked, redeemable for vouchers) may interact with the suspension policy. Design as an extension point — appeal document submission should support future integration with loyalty tracking.