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)β
- 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')
- 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}
)
- 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)β
- 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}
)
- 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'
)
- Link Offer to Assignment:
UPDATE assignment_offers
SET assignment_id = {new_assignment_id},
status = 'converted'
WHERE id = {offer_id}
- 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}
)
- 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=trueassignments(1 row): status=confirmedassignment_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)β
- 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}
- 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}
- When Susanne marks "Erik Accepted":
UPDATE assignment_offers
SET status = 'accepted'
WHERE id = {offer_id}
- Then same confirmation flow as Scenario A
Entities Created/Updatedβ
Acceptance Flow:
assignment_offers: status=accepted β status=convertedassignments: New row created (status=confirmed)assignment_status_logs: First entry (status=confirmed)
Negotiation Flow:
assignment_offers: status=negotiating β rates updated β status=accepted β status=convertedassignments: 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=contractassignment_status_logs(1 row): status=contract_sentassignments: current_status updated
Travel Phase:
travel_bookings(2 rows): outbound + return flightsassignment_status_logs(1 row): status=travel_bookedassignments: current_status updated
Hotel Phase:
hotel_bookings(1 row)assignment_status_logs(1 row): status=hotel_bookedassignments: current_status updated
Road Book Phase:
documents(1 row): type=road_book
Active Phase:
assignment_status_logs(1 row): status=activeassignments: current_status updated
Completion Phase:
projects: status=completed, financials_finalized=trueassignments: actual_* fields updated, adjustment_* fields setassignment_status_logs(1 row per assignment): status=completedassignments: 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β
- Dual workflow: Standard offers + Direct booking
- Conflict detection: Soft warnings with override
- Negotiation: External discussion, system tracks final agreed rate
- Structured travel/hotel data: Powers road book generation
- Financial completion: Track actual vs planned, adjustments, lock mechanism
- Status tracking: Complete audit trail via assignment_status_logs
Related Documentsβ
- 00-personas.md - Susanne, Johan personas
- 04-staff-workflows.md - Lisa's view (receiving/responding to offers)
- 03-admin-operations.md - Reports, project completion
- Database Schema - Complete schema documentation
- /reference/qa-answers - All MVP decisions
Database Tables Usedβ
assignment_offers- Offers sent to staffassignments- Confirmed bookingsassignment_status_logs- Lifecycle trackingtravel_bookings- Flight/train detailshotel_bookings- Hotel detailsdocuments- Contracts, road booksprojects- Financial finalizationprofiles- Staff directoryproject_functions- Required roles