Skip to main content

Admin User Cases: Staffing & Assignment Management

Actors: Susanne (Admin/PM), Johan (Admin/PM + Crew) User Cases: UC-04, UC-05, UC-06


Overview​

This document covers the core staffing workflows for PBS:

  • UC-04: Send Assignment Offers (Standard + Direct Booking)
  • UC-05: Review Offer Responses & Negotiate
  • UC-06: Assignment Lifecycle Management

These workflows represent the heart of the PBS system - how admins find crew, make offers, handle responses, and manage the complete assignment lifecycle from confirmation to completion.


UC-04: Send Assignment Offers​

Goal: Susanne needs to fill required roles for a project by sending offers to crew members.

Actors: Susanne (Admin), Johan (Admin - can book himself directly)

Preconditions:

  • Project exists with status=draft or active
  • Project has at least one project_function defined (role needed)
  • Profiles exist in the staff directory

System: backend.pbs.com


Scenario A: Standard Offer Flow (Freelancers)​

Susanne is staffing "Champions League Final 2025" and needs an EVS Operator.

UI Journey​

Step 1: Navigate to Project Staffing

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ backend.pbs.com [Susanne β–Ό] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ← Projects β”‚
β”‚ β”‚
β”‚ Champions League Final 2025 β”‚
β”‚ ESC-2025-042 β€’ Active β€’ May 10-15, 2025 β€’ Madrid β”‚
β”‚ β”‚
β”‚ [Overview] [Staffing] [Travel] [Documents] [Reports] β”‚
β”‚ β”‚
β”‚ ═══ STAFFING ═══════════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ Required Roles β”‚
β”‚ β”‚
β”‚ EVS Operator (Instant Replay) [1/2] β”‚
β”‚ β€’ Work days: 3 β€’ Travel days: 2 β”‚
β”‚ β€’ Target rate: 5,500 SEK/day (work), 2,750 SEK/day (travel)β”‚
β”‚ β”‚
β”‚ Assignments: β”‚
β”‚ βœ“ Johan Andersson (confirmed) β”‚
β”‚ β—‹ [Empty slot] ← Fill this β”‚
β”‚ β”‚
β”‚ [+ Send Offer] [+ Book Directly] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Click "+ Send Offer" β†’ Search for Crew

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Send Offer: EVS Operator [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Search crew: [Lisa Berg ____________] πŸ” β”‚
β”‚ β”‚
β”‚ Filter by: β”‚
β”‚ β˜‘ Function: EVS Operator β”‚
β”‚ ☐ Location: Any β”‚
β”‚ ☐ Available May 10-15 β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ Results (3): β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ“· Lisa Berg 🟒 Available β”‚ β”‚
β”‚ β”‚ Senior EVS Operator β”‚ β”‚
β”‚ β”‚ Stockholm β€’ 6 years experience β”‚ β”‚
β”‚ β”‚ Last worked: Ice Hockey Finals (Feb 2025) β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ ⚠️ Conflict: May 12-14 (Football Match) β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Select Lisa] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ“· Anders Nilsson 🟒 Available β”‚ β”‚
β”‚ β”‚ Mid EVS Operator β”‚ β”‚
β”‚ β”‚ Gothenburg β€’ 4 years experience β”‚ β”‚
β”‚ β”‚ [Select Anders] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Conflict Warning: Lisa shows conflict (May 12-14), but Susanne decides she can still ask.

Step 3: Click "Select Lisa" β†’ Offer Details Form

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Create Offer for Lisa Berg [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ⚠️ Conflict Warning β”‚
β”‚ Lisa has an existing assignment May 12-14 (Football Match). β”‚
β”‚ Continue anyway? [Yes, send offer] [Cancel] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ Role: EVS Operator β”‚
β”‚ Project: Champions League Final 2025 β”‚
β”‚ Dates: May 10-15, 2025 (3 work + 2 travel = 5 days) β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ RATES β”‚
β”‚ β”‚
β”‚ Work day rate: [5500] SEK/day (3 days) β”‚
β”‚ Travel day rate: [2750] SEK/day (2 days) β”‚
β”‚ β”‚
β”‚ Total estimate: 22,000 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ TRAVEL β”‚
β”‚ β”‚
β”‚ Departure city: [Stockholm β–Ό] (from Lisa's profile) β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ PERSONAL MESSAGE (shown to Lisa) β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Hi Lisa! β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ We'd love to have you as EVS Operator for the β”‚ β”‚
β”‚ β”‚ Champions League Final in Madrid, May 10-15. β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ I know you have the Football Match May 12-14, but β”‚ β”‚
β”‚ β”‚ could you make it work? This is a big one! β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Let me know! β”‚ β”‚
β”‚ β”‚ - Susanne β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ INTERNAL NOTES (not visible to Lisa) β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Lisa is our best EVS op. Worth asking despite conflict.β”‚ β”‚
β”‚ β”‚ If she declines, go with Anders. β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ Offer valid until: [May 5, 2025 β–Ό] (soft deadline) β”‚
β”‚ β”‚
β”‚ [Create Offer] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 4: Click "Create Offer" β†’ Offer Created

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ Offer created successfully β”‚
β”‚ β”‚
β”‚ Next step: Send offer email to Lisa β”‚
β”‚ β”‚
β”‚ [Send Email Now] [Send Later] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Susanne clicks "Send Email Now" β†’ System sends email to Lisa with link to crew.pbs.com

Step 5: Offers Dashboard Updated

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ backend.pbs.com - Offers Dashboard β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Pending Offers (4) β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Lisa Berg β€’ EVS Operator β”‚ β”‚
β”‚ β”‚ Champions League Final β€’ May 10-15 β”‚ β”‚
β”‚ β”‚ 22,000 SEK β€’ Sent today β€’ Expires May 5 β”‚ β”‚
β”‚ β”‚ Status: Pending β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [View Details] [Withdraw Offer] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions (Standard Offer)​

  1. Conflict Detection Query:
SELECT * FROM assignments
WHERE profile_id = {lisa_id}
AND (start_date, end_date) OVERLAPS ('2025-05-10', '2025-05-15')
AND current_status NOT IN ('cancelled')
  1. Create Offer:
INSERT INTO assignment_offers (
id, project_function_id, profile_id,
is_direct_booking, -- false
work_day_rate_cents, travel_day_rate_cents, rate_currency,
departure_city, status,
personal_message, pm_notes,
expires_at,
created_by_user_id
) VALUES (
uuid_generate_v4(),
{project_function_id},
{lisa_profile_id},
false, -- Standard offer flow
550000, -- 5,500 SEK in cents
275000, -- 2,750 SEK in cents
'SEK',
'Stockholm',
'pending',
'Hi Lisa! We'd love to have you...',
'Lisa is our best EVS op...',
'2025-05-05',
{susanne_user_id}
)
  1. Send Email (manual trigger):
UPDATE assignment_offers
SET sent_at = NOW()
WHERE id = {offer_id}

Email to Lisa contains:

  • Project name, dates, location
  • Role description
  • Rate breakdown (work/travel days)
  • Total estimate
  • Personal message from Susanne
  • Link: crew.pbs.com/offers/{offer_id}
  • Expires: May 5, 2025 (soft deadline)

Scenario B: Direct Booking (No Offer Flow)​

Johan needs to book himself for a project he's managing.

UI Journey​

Step 1: Same staffing view, but clicks "+ Book Directly"

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Direct Booking: Multi-Camera Producer [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Search crew: [Johan ____________] πŸ” β”‚
β”‚ β”‚
β”‚ Results: β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ“· Johan Andersson (You) 🟒 Available β”‚ β”‚
β”‚ β”‚ Multi-Camera Producer β”‚ β”‚
β”‚ β”‚ Stockholm β€’ 15 years experience β”‚ β”‚
β”‚ β”‚ [Select Johan] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Select Johan β†’ Direct Booking Form

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Direct Booking: Johan Andersson [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ℹ️ Direct booking - No offer/approval needed β”‚
β”‚ Assignment will be created immediately. β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ Role: Multi-Camera Producer β”‚
β”‚ Project: Sports Gala 2025 β”‚
β”‚ Dates: June 1-5, 2025 (3 work + 2 travel = 5 days) β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ RATES β”‚
β”‚ β”‚
β”‚ Work day rate: [7500] SEK/day (3 days) β”‚
β”‚ Travel day rate: [3750] SEK/day (2 days) β”‚
β”‚ β”‚
β”‚ Total: 30,000 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ JOB DETAILS β”‚
β”‚ β”‚
β”‚ Meals included: β˜‘ Yes β”‚
β”‚ Parking: [On-site parking available] β”‚
β”‚ Dress code: [Smart casual] β”‚
β”‚ Equipment needed: [Headset will be provided] β”‚
β”‚ Special instructions: [____________________________] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ [Book Now] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Click "Book Now" β†’ Assignment Created Immediately

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ Assignment created successfully β”‚
β”‚ β”‚
β”‚ Johan Andersson booked as Multi-Camera Producer β”‚
β”‚ Confirmation email sent to johan@example.com β”‚
β”‚ β”‚
β”‚ [View Assignment] [Close] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions (Direct Booking)​

  1. Create Offer (marked as direct booking):
INSERT INTO assignment_offers (
id, project_function_id, profile_id,
is_direct_booking, -- true
work_day_rate_cents, travel_day_rate_cents, rate_currency,
status, -- will be 'converted' immediately
created_by_user_id
) VALUES (
uuid_generate_v4(),
{project_function_id},
{johan_profile_id},
true, -- Direct booking flag
750000, 375000, 'SEK',
'converted',
{johan_user_id}
)
  1. Create Assignment Immediately:
INSERT INTO assignments (
id, project_function_id, profile_id,
work_day_rate_cents, travel_day_rate_cents, rate_currency,
planned_work_days, planned_travel_days,
meals_included, parking_info, dress_code, equipment_needed,
start_date, end_date,
current_status
) VALUES (
uuid_generate_v4(),
{project_function_id},
{johan_profile_id},
750000, 375000, 'SEK',
3, 2, -- planned days
true, 'On-site parking available', 'Smart casual', 'Headset will be provided',
'2025-06-01', '2025-06-05',
'confirmed'
)
  1. Link Offer to Assignment:
UPDATE assignment_offers
SET assignment_id = {new_assignment_id},
status = 'converted'
WHERE id = {offer_id}
  1. Create Status Log:
INSERT INTO assignment_status_logs (
assignment_id, status, note, changed_by_user_id
) VALUES (
{assignment_id},
'confirmed',
'Direct booking (no offer flow)',
{johan_user_id}
)
  1. Send Confirmation Email to Johan (crew@example.com):
  • "You've been booked for Sports Gala 2025"
  • Dates, role, rate breakdown
  • Job details (meals, parking, etc.)
  • Link to view assignment in crew.pbs.com

Entities Created/Updated​

Standard Offer Flow:

  • assignment_offers (1 row): status=pending, is_direct_booking=false
  • Email sent (external system)

Direct Booking Flow:

  • assignment_offers (1 row): status=converted, is_direct_booking=true
  • assignments (1 row): status=confirmed
  • assignment_status_logs (1 row): status=confirmed
  • Confirmation email sent

UC-05: Review Offer Responses & Negotiate​

Goal: Susanne reviews staff responses to offers, handles negotiations, and confirms assignments.

Actors: Susanne (Admin)

Preconditions:

  • Offers have been sent (UC-04)
  • Staff have responded via crew.pbs.com

System: backend.pbs.com


Scenario A: Simple Acceptance (v4.7 - Manual PM Confirmation)​

Lisa accepted Susanne's offer (one-click from crew portal). PM must now manually confirm the booking before assignment is created.

UI Journey​

Step 1: Dashboard Shows Notification

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ backend.pbs.com [Susanne β–Ό] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Dashboard β”‚
β”‚ β”‚
β”‚ ═══ RECENT ACTIVITY ════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ Needs Confirmation - 2 ⚠️ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ ⚠️ Lisa Berg ACCEPTED (needs confirmation) β”‚ β”‚
β”‚ β”‚ EVS Operator β€’ Champions League Final β”‚ β”‚
β”‚ β”‚ 22,000 SEK β€’ Accepted 2 hours ago β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Confirm Booking] [View Details] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ ⚠️ Anders Svensson ACCEPTED (needs confirmation) β”‚ β”‚
β”‚ β”‚ Camera Operator β€’ Corporate Event β”‚ β”‚
β”‚ β”‚ 18,500 SEK β€’ Accepted yesterday β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Confirm Booking] [View Details] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ Negotiating - 1 β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ πŸ’¬ Erik Johansson wants to negotiate β”‚ β”‚
β”‚ β”‚ Sound Mixer β€’ Ice Hockey Finals β”‚ β”‚
β”‚ β”‚ Original: 4,500 SEK β€’ Requested: 5,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Review Request] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ Declined - 1 β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ βœ— Maria Lindqvist declined β”‚ β”‚
β”‚ β”‚ Graphics Operator β€’ Summer Festival β”‚ β”‚
β”‚ β”‚ Reason: "Unavailable those dates" β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Send to Someone Else] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Click "Confirm Booking" or "View Details"

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Confirm Booking: Lisa Berg [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ⚠️ CREW ACCEPTED - NEEDS YOUR CONFIRMATION β”‚
β”‚ Lisa accepted this offer: May 3, 2025 14:30 β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ PROJECT: Champions League Final 2025 β”‚
β”‚ ROLE: EVS Operator β”‚
β”‚ DATES: May 10-15, 2025 (3 work + 2 travel days) β”‚
β”‚ β”‚
β”‚ RATES: β”‚
β”‚ β€’ Work day: 5,500 SEK Γ— 3 days = 16,500 SEK β”‚
β”‚ β€’ Travel day: 2,750 SEK Γ— 2 days = 5,500 SEK β”‚
β”‚ β€’ Total: 22,000 SEK β”‚
β”‚ β”‚
β”‚ DEPARTURE: Stockholm β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ ⚠️ CONFLICT WARNING: β”‚
β”‚ Lisa has an existing assignment May 12-14 (Football Match). β”‚
β”‚ Review before confirming. β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ INTERNAL NOTE (optional): β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Verified with Lisa - she can do both projects. β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ [βœ“ Confirm & Create Assignment] [Edit Offer] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Click "Confirm & Create Assignment" β†’ Assignment Created

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ Booking Confirmed Successfully β”‚
β”‚ β”‚
β”‚ Lisa Berg confirmed as EVS Operator β”‚
β”‚ Assignment created β€’ Confirmation email sent β”‚
β”‚ β”‚
β”‚ NEXT STEPS: β”‚
β”‚ ☐ Book travel β”‚
β”‚ ☐ Book hotel β”‚
β”‚ ☐ Send road book β”‚
β”‚ β”‚
β”‚ [View Assignment] [Book Travel] [Close] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions (Manual Confirmation - v4.7)​

When Lisa clicked "Accept" in crew.pbs.com, the system:

-- 1. Update offer status to 'accepted' (NOT confirmed yet!)
UPDATE assignment_offers
SET status = 'accepted',
responded_at = NOW()
WHERE id = {offer_id};

-- 2. Log activity
INSERT INTO project_activity_logs (
project_id, event_type, entity_type, entity_id,
description, crew_profile_id
) VALUES (
{project_id},
'offer_accepted',
'assignment_offer',
{offer_id},
'Lisa Berg accepted offer for EVS Operator - PM confirmation needed',
{lisa_profile_id}
);

-- 3. Send notifications
-- - Email to Lisa: "We received your acceptance - PM will confirm shortly"
-- - Email/notification to Susanne: "Lisa accepted your offer - confirm booking"

When PM clicks "Confirm & Create Assignment", the system:

-- 1. Update offer status to 'confirmed'
UPDATE assignment_offers
SET status = 'confirmed'
WHERE id = {offer_id};

-- 2. Create assignment
INSERT INTO assignments (
id, project_function_id, crew_profile_id,
work_day_rate_cents, travel_day_rate_cents, rate_currency,
planned_work_days, planned_travel_days,
departure_city,
start_date, end_date,
current_status
) VALUES (
uuid_generate_v4(),
{project_function_id},
{lisa_profile_id},
550000, 275000, 'SEK',
3, 2,
'Stockholm',
'2025-05-10', '2025-05-15',
'confirmed'
);

-- 3. Link assignment back to project function
UPDATE project_functions
SET assignment_id = {new_assignment_id}
WHERE id = {project_function_id};

-- 4. Link offer to assignment
UPDATE assignment_offers
SET assignment_id = {new_assignment_id}
WHERE id = {offer_id};

-- 5. Create status log
INSERT INTO assignment_status_logs (
assignment_id, status, note, changed_by_user_id
) VALUES (
{assignment_id},
'confirmed',
'PM confirmed crew acceptance',
{susanne_user_id}
);

-- 6. Log activity
INSERT INTO project_activity_logs (
project_id, event_type, entity_type, entity_id,
description, crew_profile_id
) VALUES (
{project_id},
'assignment_confirmed',
'assignment',
{new_assignment_id},
'Susanne confirmed Lisa Berg for EVS Operator',
{lisa_profile_id}
);

Then automatically:

  • Send confirmation email to Lisa: "Your booking is confirmed!"
  • Update project grid view (shows status='confirmed', βœ… Green)

Scenario B: Negotiation​

Erik wants to negotiate his rate from 4,500 SEK to 5,000 SEK/day.

UI Journey​

Step 1: Dashboard Shows "Negotiating" Status

(See previous dashboard view - Erik shows as "wants to negotiate")

Step 2: Click "Review Request" for Erik

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Negotiation Request: Erik Johansson [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ πŸ’¬ Erik wants to negotiate the rate β”‚
β”‚ β”‚
β”‚ PROJECT: Ice Hockey Finals 2025 β”‚
β”‚ ROLE: Sound Mixer β”‚
β”‚ DATES: March 15-20, 2025 (4 work + 2 travel days) β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ YOUR ORIGINAL OFFER: β”‚
β”‚ β€’ Work day: 4,500 SEK Γ— 4 days = 18,000 SEK β”‚
β”‚ β€’ Travel day: 2,250 SEK Γ— 2 days = 4,500 SEK β”‚
β”‚ β€’ Total: 22,500 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ ERIK'S MESSAGE: β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Hi Susanne, β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Thanks for the offer! I'd love to work on this β”‚ β”‚
β”‚ β”‚ project, but my current rate for finals is 5,000 SEK. β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Can we match that? β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Thanks, β”‚ β”‚
β”‚ β”‚ Erik β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ERIK'S COUNTER-OFFER: β”‚
β”‚ β€’ Work day: 5,000 SEK Γ— 4 days = 20,000 SEK β”‚
β”‚ β€’ Travel day: 2,500 SEK Γ— 2 days = 5,000 SEK β”‚
β”‚ β€’ Total: 25,000 SEK (+2,500 SEK) β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ YOUR OPTIONS: β”‚
β”‚ β”‚
β”‚ [Accept Erik's Rate] [Update Offer] [Decline] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Susanne's Decision: She'll meet him halfway at 4,750 SEK.

Step 3: Click "Update Offer" β†’ Edit Rates

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Update Offer: Erik Johansson [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Update your offer and discuss with Erik outside the system β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ NEW RATES β”‚
β”‚ β”‚
β”‚ Work day rate: [4750] SEK/day (4 days) β”‚
β”‚ Travel day rate: [2375] SEK/day (2 days) β”‚
β”‚ β”‚
β”‚ New total: 23,750 SEK β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ INTERNAL NOTE β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Agreed 4,750 SEK via phone call. Erik accepted. β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ ℹ️ Note: Have the rate discussion with Erik via phone/email β”‚
β”‚ Then update the offer here with the agreed rate. β”‚
β”‚ β”‚
β”‚ [Save Updated Offer] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 4: After External Discussion, Update Status

After Susanne calls Erik and they agree on 4,750 SEK:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Update Offer Status: Erik Johansson [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Offer updated to 4,750 SEK/day β”‚
β”‚ β”‚
β”‚ Did Erik accept the updated rate? β”‚
β”‚ β”‚
β”‚ [Yes, Erik Accepted] [Still Negotiating] [Erik Declined] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 5: Click "Yes, Erik Accepted" β†’ Same Confirmation Flow as Scenario A


System Actions (Negotiation)​

  1. When Erik clicked "Negotiate" (in crew.pbs.com):
UPDATE assignment_offers
SET status = 'negotiating',
staff_response = 'Thanks for the offer! I'd love to work...',
counter_work_rate_cents = 500000, -- 5,000 SEK
counter_travel_rate_cents = 250000, -- 2,500 SEK
responded_at = NOW()
WHERE id = {offer_id}
  1. When Susanne updates the offer:
UPDATE assignment_offers
SET work_day_rate_cents = 475000, -- 4,750 SEK (new agreed rate)
travel_day_rate_cents = 237500, -- 2,375 SEK
pm_notes = CONCAT(pm_notes, '\n\nAgreed 4,750 SEK via phone call.')
WHERE id = {offer_id}
  1. When Susanne marks "Erik Accepted":
UPDATE assignment_offers
SET status = 'accepted'
WHERE id = {offer_id}
  1. Then same confirmation flow as Scenario A

Entities Created/Updated​

Acceptance Flow:

  • assignment_offers: status=accepted β†’ status=converted
  • assignments: New row created (status=confirmed)
  • assignment_status_logs: First entry (status=confirmed)

Negotiation Flow:

  • assignment_offers: status=negotiating β†’ rates updated β†’ status=accepted β†’ status=converted
  • assignments: New row created (status=confirmed)
  • assignment_status_logs: First entry (status=confirmed)

UC-06: Assignment Lifecycle Management​

Goal: Susanne manages an assignment through its complete lifecycle from confirmation to project completion and financial finalization.

Actors: Susanne (Admin)

Preconditions:

  • Assignment exists (created via UC-05)
  • Project is active

System: backend.pbs.com


Lifecycle Stages​

confirmed β†’ contract_sent β†’ contract_signed β†’ travel_booked β†’
hotel_booked β†’ active β†’ completed β†’ [financial finalization]

Stage 1: Post-Confirmation Tasks​

After Lisa's assignment is confirmed, Susanne needs to handle travel, contract, hotel.

UI Journey​

Step 1: View Assignment Details

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Assignment: Lisa Berg β”‚
β”‚ EVS Operator β€’ Champions League Final 2025 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ [Overview] [Travel] [Hotel] [Documents] [Status] β”‚
β”‚ β”‚
β”‚ ═══ OVERVIEW ═══════════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ STATUS: βœ“ Confirmed β”‚
β”‚ β”‚
β”‚ Timeline: β”‚
β”‚ βœ“ Confirmed May 3, 14:45 (by Susanne) β”‚
β”‚ β—‹ Contract sent β”‚
β”‚ β—‹ Travel booked β”‚
β”‚ β—‹ Hotel booked β”‚
β”‚ β—‹ Active β”‚
β”‚ β—‹ Completed β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ ASSIGNMENT DETAILS β”‚
β”‚ β”‚
β”‚ Dates: May 10-15, 2025 β”‚
β”‚ Work days: 3 days @ 5,500 SEK = 16,500 SEK β”‚
β”‚ Travel days: 2 days @ 2,750 SEK = 5,500 SEK β”‚
β”‚ Total: 22,000 SEK β”‚
β”‚ β”‚
β”‚ Departure: Stockholm β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ NEXT ACTIONS β”‚
β”‚ β”‚
β”‚ ☐ Generate contract β”‚
β”‚ ☐ Book travel from Stockholm β”‚
β”‚ ☐ Book hotel in Madrid β”‚
β”‚ β”‚
β”‚ [Generate Contract] [Book Travel] [Book Hotel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Generate Contract

Click "Generate Contract" β†’ System generates PDF from template

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Generate Contract [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Contract preview: β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ SERVICE AGREEMENT β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Between: NCP (New Century Production) β”‚ β”‚
β”‚ β”‚ And: Lisa Berg (personnummer: XXX) β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Project: Champions League Final 2025 β”‚ β”‚
β”‚ β”‚ Role: EVS Operator β”‚ β”‚
β”‚ β”‚ Dates: May 10-15, 2025 β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Compensation: β”‚ β”‚
β”‚ β”‚ - Work days: 3 Γ— 5,500 SEK = 16,500 SEK β”‚ β”‚
β”‚ β”‚ - Travel days: 2 Γ— 2,750 SEK = 5,500 SEK β”‚ β”‚
β”‚ β”‚ - Total: 22,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Standard terms and conditions...] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [Edit Contract] [Download PDF] [Send to Lisa] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Click "Send to Lisa" β†’ PDF sent via email + stored in documents table


Stage 2: Book Travel​

Step 1: Click "Travel" Tab

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Assignment: Lisa Berg - Travel β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ═══ TRAVEL BOOKINGS ═════════════════════════════════════ β”‚
β”‚ β”‚
β”‚ No travel booked yet. β”‚
β”‚ β”‚
β”‚ [+ Add Outbound Travel] [+ Add Return Travel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Click "+ Add Outbound Travel"

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Add Travel Booking [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ TYPE: [Flight β–Ό] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ FROM β”‚
β”‚ City: [Stockholm] β”‚
β”‚ Airport: [ARN - Arlanda β–Ό] β”‚
β”‚ Terminal: [5] β”‚
β”‚ β”‚
β”‚ TO β”‚
β”‚ City: [Madrid] β”‚
β”‚ Airport: [MAD - Barajas β–Ό] β”‚
β”‚ Terminal: [4] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ FLIGHT DETAILS β”‚
β”‚ β”‚
β”‚ Departure: [May 10, 2025] [08:30] β”‚
β”‚ Arrival: [May 10, 2025] [12:45] β”‚
β”‚ β”‚
β”‚ Flight number: [SK1234] β”‚
β”‚ Carrier: [SAS] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ BOOKING β”‚
β”‚ β”‚
β”‚ Reference: [ABC123] β”‚
β”‚ Cost: [3500] SEK β”‚
β”‚ β”‚
β”‚ Notes: β”‚
β”‚ [_____________________________________________] β”‚
β”‚ β”‚
β”‚ [Save Travel Booking] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

After saving, same form for return flight.


Stage 3: Book Hotel​

Similar structured form for hotel booking (hotel name, address, check-in/out dates + times, booking reference, cost).


Stage 4: Generate Road Book​

After travel + hotel are entered, Susanne can generate road book.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Generate Road Book [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Road book will include: β”‚
β”‚ β”‚
β”‚ βœ“ Project details (Champions League Final, Madrid) β”‚
β”‚ βœ“ Venue address (Estadio Santiago BernabΓ©u) β”‚
β”‚ βœ“ Outbound flight (SAS SK1234, May 10, 08:30) β”‚
β”‚ βœ“ Return flight (SAS SK1235, May 15, 18:00) β”‚
β”‚ βœ“ Hotel (Hotel Princesa Plaza, check-in May 10 15:00) β”‚
β”‚ βœ“ Contact numbers (Susanne, venue coordinator) β”‚
β”‚ β”‚
β”‚ Preview: β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ ROAD BOOK β”‚ β”‚
β”‚ β”‚ Champions League Final 2025 β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ CREW MEMBER β”‚ β”‚
β”‚ β”‚ Lisa Berg β€’ EVS Operator β”‚ β”‚
β”‚ β”‚ [Photo] β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ OUTBOUND TRAVEL - May 10, 2025 β”‚ β”‚
β”‚ β”‚ Flight: SAS SK1234 β”‚ β”‚
β”‚ β”‚ Stockholm ARN Terminal 5 β†’ Madrid MAD Terminal 4 β”‚ β”‚
β”‚ β”‚ Departure: 08:30 | Arrival: 12:45 β”‚ β”‚
β”‚ β”‚ Booking ref: ABC123 β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ HOTEL β”‚ β”‚
β”‚ β”‚ Hotel Princesa Plaza β”‚ β”‚
β”‚ β”‚ Address: Calle de la Princesa 40, Madrid β”‚ β”‚
β”‚ β”‚ Check-in: May 10, 15:00 | Check-out: May 15, 11:00 β”‚ β”‚
β”‚ β”‚ Booking ref: HTL789 β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ VENUE β”‚ β”‚
β”‚ β”‚ Estadio Santiago BernabΓ©u β”‚ β”‚
β”‚ β”‚ Av. de Concha Espina 1, Madrid β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ CONTACTS β”‚ β”‚
β”‚ β”‚ Susanne (PM): +46 70 123 4567 β”‚ β”‚
β”‚ β”‚ Venue coordinator: +34 91 234 5678 β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ RETURN TRAVEL - May 15, 2025 β”‚ β”‚
β”‚ β”‚ Flight: SAS SK1235 β”‚ β”‚
β”‚ β”‚ Madrid MAD Terminal 4 β†’ Stockholm ARN Terminal 5 β”‚ β”‚
β”‚ β”‚ Departure: 18:00 | Arrival: 22:15 β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [Generate PDF] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Road book generated from structured data + stored in documents table + sent to Lisa.


Stage 5: During Project (Active Status)​

When project start date arrives, Susanne can mark assignment as "active".

Simple status update: Assignment details β†’ "Mark as Active" button


Stage 6: Project Completion & Financial Finalization​

Most critical for MVP invoicing foundation.

UI Journey​

Step 1: Mark Project as Completed

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Project: Champions League Final 2025 β”‚
β”‚ Status: Active β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Project finished? Mark as completed to review assignments β”‚
β”‚ and finalize financials. β”‚
β”‚ β”‚
β”‚ [Mark Project as Completed] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Click "Mark as Completed" β†’ Completion Review Screen

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Complete Project: Champions League Final 2025 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Review each assignment and adjust actual days/rates β”‚
β”‚ β”‚
β”‚ ═══ ASSIGNMENTS (5 total) ═══════════════════════════════ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Lisa Berg β€’ EVS Operator β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ ORIGINAL BOOKING: β”‚ β”‚
β”‚ β”‚ β€’ 3 work days @ 5,500 SEK = 16,500 SEK β”‚ β”‚
β”‚ β”‚ β€’ 2 travel days @ 2,750 SEK = 5,500 SEK β”‚ β”‚
β”‚ β”‚ β€’ Total: 22,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ ACTUAL COMPLETION: β”‚ β”‚
β”‚ β”‚ Work days: [2] (Lisa left 1 day early) β”‚ β”‚
β”‚ β”‚ Travel days: [2] β”‚ β”‚
β”‚ β”‚ Work rate: [5500] SEK/day β”‚ β”‚
β”‚ β”‚ Travel rate: [2750] SEK/day β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Adjustment: [0] SEK β”‚ β”‚
β”‚ β”‚ Reason: [Left May 14 due to family emergency] β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ NEW TOTAL: 16,500 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Save] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Johan Andersson β€’ Multi-Camera Producer β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ ORIGINAL BOOKING: β”‚ β”‚
β”‚ β”‚ β€’ 3 work days @ 7,500 SEK = 22,500 SEK β”‚ β”‚
β”‚ β”‚ β€’ 2 travel days @ 3,750 SEK = 7,500 SEK β”‚ β”‚
β”‚ β”‚ β€’ Total: 30,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ ACTUAL COMPLETION: β”‚ β”‚
β”‚ β”‚ Work days: [5] (arrived 2 days early for prep) β”‚ β”‚
β”‚ β”‚ Travel days: [2] β”‚ β”‚
β”‚ β”‚ Work rate: [7500] SEK/day β”‚ β”‚
β”‚ β”‚ Travel rate: [3750] SEK/day β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Adjustment: [+5000] SEK (bonus) β”‚ β”‚
β”‚ β”‚ Reason: [Extra prep days + excellent work] β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ NEW TOTAL: 50,000 SEK β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Save] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ [Continue with 3 more assignments...] β”‚
β”‚ β”‚
β”‚ ───────────────────────────────────────────────────────── β”‚
β”‚ β”‚
β”‚ After reviewing all assignments: β”‚
β”‚ β”‚
β”‚ [Finalize Financials] (locks all assignments) β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Click "Finalize Financials"

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Finalize Financials [βœ• Close] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ ⚠️ Are you sure? β”‚
β”‚ β”‚
β”‚ Finalizing will: β”‚
β”‚ β€’ Lock all assignment amounts β”‚
β”‚ β€’ Prevent further edits to days/rates/adjustments β”‚
β”‚ β€’ Prepare data for future invoicing β”‚
β”‚ β”‚
β”‚ Original project budget: 150,000 SEK β”‚
β”‚ Final actual cost: 148,500 SEK β”‚
β”‚ Under budget: 1,500 SEK βœ“ β”‚
β”‚ β”‚
β”‚ [Yes, Finalize] [Cancel] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 4: Click "Yes, Finalize" β†’ Project Locked

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ Financials finalized β”‚
β”‚ β”‚
β”‚ All assignments locked. Ready for invoicing. β”‚
β”‚ β”‚
β”‚ [View Final Budget Report] [Close] β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Actions (Lifecycle Management)​

Contract Sent:

-- Generate contract PDF (external service)
-- Store in documents table
INSERT INTO documents (
documentable_type, documentable_id,
doc_type, file_url, file_name,
uploaded_by_user_id
) VALUES (
'Assignment', {assignment_id},
'contract', 's3://contracts/lisa-berg-cl-final.pdf', 'Contract - Lisa Berg.pdf',
{susanne_user_id}
)

-- Update status
INSERT INTO assignment_status_logs (
assignment_id, status, changed_by_user_id
) VALUES ({assignment_id}, 'contract_sent', {susanne_user_id})

UPDATE assignments SET current_status = 'contract_sent' WHERE id = {assignment_id}

Travel Booked:

INSERT INTO travel_bookings (
assignment_id, type,
from_city, from_airport_code, from_terminal,
to_city, to_airport_code, to_terminal,
departure_at, arrival_at,
flight_number, carrier,
booking_reference, cost_cents, cost_currency
) VALUES (
{assignment_id}, 'flight',
'Stockholm', 'ARN', '5',
'Madrid', 'MAD', '4',
'2025-05-10 08:30', '2025-05-10 12:45',
'SK1234', 'SAS',
'ABC123', 350000, 'SEK'
)

-- Same for return flight

-- Update status
INSERT INTO assignment_status_logs (
assignment_id, status, changed_by_user_id
) VALUES ({assignment_id}, 'travel_booked', {susanne_user_id})

UPDATE assignments SET current_status = 'travel_booked' WHERE id = {assignment_id}

Hotel Booked:

INSERT INTO hotel_bookings (
assignment_id,
hotel_name, hotel_address, hotel_phone,
check_in_date, check_in_time, check_out_date, check_out_time,
nights, booking_reference,
total_cost_cents, cost_currency
) VALUES (
{assignment_id},
'Hotel Princesa Plaza', 'Calle de la Princesa 40, Madrid', '+34 91 234 5678',
'2025-05-10', '15:00', '2025-05-15', '11:00',
5, 'HTL789',
500000, 'SEK'
)

-- Update status
INSERT INTO assignment_status_logs (
assignment_id, status, changed_by_user_id
) VALUES ({assignment_id}, 'hotel_booked', {susanne_user_id})

UPDATE assignments SET current_status = 'hotel_booked' WHERE id = {assignment_id}

Road Book Generated:

-- Generate PDF from:
-- - projects table (venue name, address)
-- - travel_bookings (flight details)
-- - hotel_bookings (hotel details)
-- - crew_profiles.photo_url (Lisa's photo)

-- Store in documents
INSERT INTO documents (
documentable_type, documentable_id,
doc_type, file_url, file_name,
uploaded_by_user_id
) VALUES (
'Assignment', {assignment_id},
'road_book', 's3://roadbooks/lisa-berg-cl-final.pdf', 'Road Book - Lisa Berg.pdf',
{susanne_user_id}
)

Project Completion & Financial Finalization:

-- Mark project as completed
UPDATE projects
SET status = 'completed'
WHERE id = {project_id}

-- Update Lisa's assignment (left early)
UPDATE assignments
SET actual_work_days = 2, -- Was 3, now 2
actual_travel_days = 2, -- Same
actual_work_rate_cents = 550000, -- Same rate
actual_travel_rate_cents = 275000, -- Same rate
adjustment_amount_cents = 0,
adjustment_reason = 'Left May 14 due to family emergency'
WHERE id = {lisa_assignment_id}

-- Update Johan's assignment (worked extra days + bonus)
UPDATE assignments
SET actual_work_days = 5, -- Was 3, now 5
actual_travel_days = 2, -- Same
actual_work_rate_cents = 750000, -- Same rate
actual_travel_rate_cents = 375000, -- Same rate
adjustment_amount_cents = 500000, -- +5,000 SEK bonus
adjustment_reason = 'Extra prep days + excellent work'
WHERE id = {johan_assignment_id}

-- Finalize project financials (LOCK)
UPDATE projects
SET financials_finalized = true,
financials_finalized_at = NOW(),
financials_finalized_by_user_id = {susanne_user_id}
WHERE id = {project_id}

-- Mark all assignments as completed
INSERT INTO assignment_status_logs (
assignment_id, status, note, changed_by_user_id
)
SELECT id, 'completed', 'Project completed and financials finalized', {susanne_user_id}
FROM assignments
WHERE project_function_id IN (
SELECT id FROM project_functions WHERE project_id = {project_id}
)

UPDATE assignments
SET current_status = 'completed'
WHERE project_function_id IN (
SELECT id FROM project_functions WHERE project_id = {project_id}
)

Entities Created/Updated (Complete Lifecycle)​

Contract Phase:

  • documents (1 row): type=contract
  • assignment_status_logs (1 row): status=contract_sent
  • assignments: current_status updated

Travel Phase:

  • travel_bookings (2 rows): outbound + return flights
  • assignment_status_logs (1 row): status=travel_booked
  • assignments: current_status updated

Hotel Phase:

  • hotel_bookings (1 row)
  • assignment_status_logs (1 row): status=hotel_booked
  • assignments: current_status updated

Road Book Phase:

  • documents (1 row): type=road_book

Active Phase:

  • assignment_status_logs (1 row): status=active
  • assignments: current_status updated

Completion Phase:

  • projects: status=completed, financials_finalized=true
  • assignments: actual_* fields updated, adjustment_* fields set
  • assignment_status_logs (1 row per assignment): status=completed
  • assignments: current_status=completed

Summary: Complete Staffing Flow​

UC-04: Send Offers
β”œβ”€β†’ Standard Offer: Create offer β†’ Manual email β†’ Wait for response
└─→ Direct Booking: Create offer + assignment immediately

UC-05: Review Responses
β”œβ”€β†’ Accepted: Susanne confirms β†’ Assignment created
β”œβ”€β†’ Negotiating: Discuss externally β†’ Update rate β†’ Confirm
└─→ Declined: Send offer to someone else

UC-06: Manage Assignment
β”œβ”€β†’ Contract: Generate β†’ Send β†’ Mark as sent
β”œβ”€β†’ Travel: Book flights β†’ Mark as booked
β”œβ”€β†’ Hotel: Book hotel β†’ Mark as booked
β”œβ”€β†’ Road Book: Generate from structured data
β”œβ”€β†’ Active: Project starts
└─→ Completed: Review actual days/rates β†’ Adjust β†’ Finalize financials (LOCK)

Key MVP Features Demonstrated​

  1. Dual workflow: Standard offers + Direct booking
  2. Conflict detection: Soft warnings with override
  3. Negotiation: External discussion, system tracks final agreed rate
  4. Structured travel/hotel data: Powers road book generation
  5. Financial completion: Track actual vs planned, adjustments, lock mechanism
  6. Status tracking: Complete audit trail via assignment_status_logs


Database Tables Used​

  • assignment_offers - Offers sent to staff
  • assignments - Confirmed bookings
  • assignment_status_logs - Lifecycle tracking
  • travel_bookings - Flight/train details
  • hotel_bookings - Hotel details
  • documents - Contracts, road books
  • projects - Financial finalization
  • profiles - Staff directory
  • project_functions - Required roles