Admin User Cases: Operations & Reports
Actors: Susanne (Admin/PM) User Cases: UC-07, UC-08, UC-09, UC-10
Overviewâ
This document covers operational and reporting workflows:
- UC-07: Generate Reports (Crew List, Meal List, Budget)
- UC-08: Invite Staff to System
- UC-09: Review Staff Registrations
- UC-10: Handle Scheduling Conflicts
These workflows support day-to-day project operations, from bringing new crew into the system to generating client-ready reports.
UC-07: Generate Reportsâ
Goal: Susanne generates various reports for a project (crew list, meal list, clothing sizes, budget).
Actors: Susanne (Admin)
Preconditions:
- Project exists with confirmed assignments
- Some assignments have travel/hotel booked (for those reports)
System: backend.pbs.com
UI Journeyâ
Step 1: Navigate to Project Reports
ââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââ
â backend.pbs.com [Susanne âŒ] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â Projects â
â â
â Champions League Final 2025 â
â ESC-2025-042 ⢠Active ⢠May 10-15, 2025 ⢠Madrid â
â â
â [Overview] [Staffing] [Travel] [Documents] [Reports] â
â â
â âââ REPORTS âââââââââââââââââââââââââââââââââââââââââââââ â
â â
â Generate project reports for clients and operations â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â ð Crew List â â
â â All assignments with names, roles, contact info â â
â â [Generate PDF] [Generate Excel] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â ðœïž Meal List â â
â â Food preferences and dietary requirements â â
â â [Generate PDF] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â ð Clothing Sizes â â
â â Sizes for uniform/merchandise ordering â â
â â [Generate Excel] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â âââââââââââââââââââââââââââââââââââââââââââââ âââââââââââ â
â â ðš Hotel Bookings â â
â â All hotel reservations and check-in dates â â
â â [Generate PDF] [Generate Excel] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â ð° Budget Report â â
â â Planned vs actual costs â â
â â [Generate PDF] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â PREVIOUSLY GENERATED (3) â
â â
â ⢠Crew List PDF - May 4, 2025 14:30 [Download] â
â ⢠Meal List PDF - May 3, 2025 10:15 [Download] â
â ⢠Budget Report PDF - May 1, 2025 09:00 [Download] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 2: Click "Generate PDF" for Crew List â Preview
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Generate Crew List [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â Preview (5 crew members): â
â â
â âââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â CREW LIST â â
â â Champions League Final 2025 â â
â â Madrid, Spain ⢠May 10-15, 2025 â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â EVS OPERATORS (2) â â
â â â â
â â Lisa Berg â â
â â [Photo] â â
â â Phone: +46 70 123 4567 â â
â â Email: lisa@example.com â â
â â Departure: Stockholm â â
â â â â
â â Johan Andersson â â
â â [Photo] â â
â â Phone: +46 70 234 5678 â â
â â Email: johan@example.com â â
â â Departure: Stockholm â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â CAMERA OPERATORS (2) â â
â â [... continues for all roles ...] â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â CONTACT: â â
â â Project Manager: Susanne +46 70 123 4567 â â
â â Generated: May 5, 2025 10:30 â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Download PDF] [Send via Email] [Cancel] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 3: Click "Generate PDF" for Meal List
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Generate Meal List [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â Preview: â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â MEAL LIST â â
â â Champions League Final 2025 â â
â â May 10-15, 2025 ⢠5 crew members â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â DIETARY REQUIREMENTS SUMMARY â â
â â â â
â â ⢠Standard meals: 3 people â â
â â ⢠Vegetarian: 1 person (Lisa Berg) â â
â â - No shellfish (allergy) â â
â â ⢠Gluten-free: 1 person (Anders Svensson) â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â DETAILED LIST â â
â â â â
â â Lisa Berg â â
â â ⢠Vegetarian â â
â â ⢠No shellfish (allergy) â â
â â â â
â â Johan Andersson â â
â â ⢠No special requirements â â
â â â â
â â [... continues for all crew ...] â â
â â â â
â â For catering contact: Susanne +46 70 123 4567 â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Download PDF] [Send to Caterer] [Cancel] â
â â
âââââââââââââââââââââââ ââââââââââââââââââââââââââââââââââââââââ
Step 4: Budget Report (After Project Completion)
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Generate Budget Report [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â â ïž Note: Project not completed yet â
â This report shows planned costs. Generate again after â
â project completion for actual costs. â
â â
â Preview: â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â BUDGET REPORT â â
â â Champions League Final 2025 â â
â â â â
â â PROJECT BUDGET: 150,000 SEK â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â CREW COSTS (Planned) â â
â â â â
â â Lisa Berg (EVS Operator) â â
â â ⢠3 work days @ 5,500 SEK = 16,500 SEK â â
â â ⢠2 travel days @ 2,750 SEK = 5,500 SEK â â
â â ⢠Total: 22,000 SEK â â
â â â â
â â Johan Andersson (Multi-Cam Producer) â â
â â ⢠3 work days @ 7,500 SEK = 22,500 SEK â â
â â ⢠2 travel days @ 3,750 SEK = 7,500 SEK â â
â â ⢠Total: 30,000 SEK â â
â â â â
â â [... continues for all assignments ...] â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â TOTAL CREW COSTS: 110,000 SEK â â
â â â â
â â TRAVEL & HOTEL: 35,000 SEK â â
â â OTHER COSTS: 5,000 SEK â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââââââââ â â
â â TOTAL PROJECT COST: 150,000 SEK â â
â â Budget remaining: 0 SEK â â
â â Status: On budget â â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Download PDF] [Cancel] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
System Actionsâ
Crew List Generation:
-- Query assignments with profile details
SELECT
p.first_name, p.last_name, p.photo_url,
p.phone, p.email,
a.departure_city,
f.name AS function_name, f.department,
proj.name AS project_name, proj.location_city, proj.location_venue,
proj.start_date, proj.end_date
FROM assignments a
JOIN profiles p ON a.profile_id = p.id
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN projects proj ON pf.project_id = proj.id
JOIN functions_catalog f ON pf.function_id = f.id
WHERE proj.id = {project_id}
AND a.current_status NOT IN ('cancelled')
ORDER BY f.department, f.name, p.last_name
Meal List Generation:
-- Query food preferences
SELECT
p.first_name, p.last_name,
p.food_preferences
FROM assignments a
JOIN profiles p ON a.profile_id = p.id
JOIN project_functions pf ON a.project_function_id = pf.id
WHERE pf.project_id = {project_id}
AND a.current_status NOT IN ('cancelled')
ORDER BY p.last_name
Budget Report Generation:
-- For active project (planned costs)
SELECT
p.first_name || ' ' || p.last_name AS crew_name,
f.name AS function_name,
pf.work_days, pf.travel_days,
a.work_day_rate_cents, a.travel_day_rate_cents,
a.rate_currency,
-- Calculate total
(a.work_day_rate_cents * pf.work_days +
a.travel_day_rate_cents * pf.travel_days) AS total_cents
FROM assignments a
JOIN profiles p ON a.profile_id = p.id
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN functions_catalog f ON pf.function_id = f.id
WHERE pf.project_id = {project_id}
AND a.current_status NOT IN ('cancelled')
-- For completed project (actual costs)
SELECT
p.first_name || ' ' || p.last_name AS crew_name,
f.name AS function_name,
-- Planned
pf.work_days AS planned_work_days,
pf.travel_days AS planned_travel_days,
a.work_day_rate_cents AS planned_work_rate,
a.travel_day_rate_cents AS planned_travel_rate,
-- Actual
COALESCE(a.actual_work_days, pf.work_days) AS actual_work_days,
COALESCE(a.actual_travel_days, pf.travel_days) AS actual_travel_days,
COALESCE(a.actual_work_rate_cents, a.work_day_rate_cents) AS actual_work_rate,
COALESCE(a.actual_travel_rate_cents, a.travel_day_rate_cents) AS actual_travel_rate,
a.adjustment_amount_cents,
a.adjustment_reason,
-- Calculate totals
(a.work_day_rate_cents * pf.work_days +
a.travel_day_rate_cents * pf.travel_days) AS planned_total,
(COALESCE(a.actual_work_rate_cents, a.work_day_rate_cents) * COALESCE(a.actual_work_days, pf.work_days) +
COALESCE(a.actual_travel_rate_cents, a.travel_day_rate_cents) * COALESCE(a.actual_travel_days, pf.travel_days) +
a.adjustment_amount_cents) AS actual_total
FROM assignments a
JOIN profiles p ON a.profile_id = p.id
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN functions_catalog f ON pf.function_id = f.id
WHERE pf.project_id = {project_id}
AND a.current_status NOT IN ('cancelled')
Store Export Record:
INSERT INTO exports (
project_id, type, filters,
file_url, file_format,
generated_by_user_id, generated_at
) VALUES (
{project_id},
'crew_list', -- or 'meal_list', 'budget_report', etc.
'{"include_photos": true, "format": "standard"}',
's3://exports/crew-list-2025-05-05.pdf',
'pdf',
{susanne_user_id},
NOW()
)
UC-08: Invite Staff to Systemâ
Goal: Susanne invites new crew members to register on the crew portal.
Actors: Susanne (Admin)
Preconditions:
- Susanne has email addresses of crew to invite
System: backend.pbs.com
UI Journeyâ
Step 1: Navigate to Staff Directory
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â backend.pbs.com [Susanne âŒ] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â Staff Directory â
â â
â [All Staff] [Pending Invitations] [Pending Registrations] â
â â
â âââ ALL CREW (24) âââââââââââââââââââââââââââââââââââââââ â
â â
â Search: [____________] ð â
â Filter: [All Functions âŒ] [All Locations âŒ] â
â â
â [+ Invite New Crew] â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â ð· Lisa Berg ð¢ Available â â
â â EVS Operator (Senior) ⢠Stockholm â â
â â [View Profile] [Send Offer] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â [... more staff members ...] â
â â
ââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââ
Step 2: Click "+ Invite New Crew" â Invitation Form
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Invite New Crew Members [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â Send invitations to crew members to join your portal â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â EMAIL ADDRESSES (one per line): â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â anders@example.com â â
â â maria@example.com â â
â â erik@example.com â â
â â â â
â âââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â INVITATION SETTINGS â
â â
â â Auto-approve registrations â
â (skip manual review, create profile immediately) â
â â
â Invitation expires in: [14 days âŒ] â
â â
â ââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââ â
â â
â [Send 3 Invitations] [Cancel] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 3: Click "Send 3 Invitations" â Confirmation
ââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââ
â â Invitations sent! â
â â
â 3 invitation emails have been sent: â
â ⢠anders@example.com â
â ⢠maria@example.com â
â ⢠erik@example.com â
â â
â They'll receive an email with a registration link. â
â â
â Track invitations in: [Pending Invitations] â
â â
â [Close] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 4: View Pending Invitations
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Staff Directory - Pending Invitations â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â [All Staff] [Pending Invitations] [Pending Registrations] â
â â
â âââ PENDING INVITATIONS (3) âââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â anders@example.com â â
â â Sent: May 5, 2025 10:00 â â
â â Status: Pending (not opened yet) â â
â â Expires: May 19, 2025 â â
â â â â
â â [Resend Email] [Cancel Invitation] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â maria@example.com â â
â â Sent: May 5, 2025 10:00 â â
â â Status: Opened (May 5, 11:30) â â
â â Registration: In progress â â
â â â â
â â [View Status] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â erik@example.com â â
â â Sent: May 5, 2025 10:00 â â
â â Status: Completed! â â
â â Registration submitted: May 5, 14:00 â â
â â â â
â â [Review Registration â] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
System Actionsâ
Create Invitations:
-- For each email address
INSERT INTO staff_invitations (
company_id, email, token,
auto_approve, status,
sent_at, expires_at,
invited_by_user_id
) VALUES (
{company_id},
'anders@example.com',
uuid_generate_v4(), -- Unique token for URL
false, -- Manual review required
'pending',
NOW(),
NOW() + INTERVAL '14 days',
{susanne_user_id}
)
Send Invitation Email (external service):
To: anders@example.com
Subject: Invitation to join NCP crew portal
Hi,
Susanne from NCP has invited you to join their crew portal on PBS.
[Complete Registration]
(Link: crew.pbs.com/register/{token})
This link expires in 14 days.
Track Invitation Status:
-- When recipient clicks link
UPDATE staff_invitations
SET status = 'opened',
opened_at = NOW()
WHERE token = {token_from_url}
-- When registration submitted
UPDATE staff_invitations
SET status = 'completed',
completed_at = NOW()
WHERE token = {token_from_url}
UC-09: Review Staff Registrationsâ
Goal: Susanne reviews completed registrations and approves/rejects them.
Actors: Susanne (Admin)
Preconditions:
- Staff have completed registration forms (UC-11)
- Submissions awaiting review
System: backend.pbs.com
UI Journeyâ
Step 1: Navigate to Pending Registrations
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Staff Directory - Pending Registrations â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â [All Staff] [Pending Invitations] [Pending Registrations] â
â â
â âââ PENDING REGISTRATIONS (2) âââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â ð· Erik Johansson â â
â â Sound Mixer (Senior) â â
â â Gothenburg, Sweden â â
â â â â
â â Submitted: May 5, 2025 14:00 â â
â â From invitation: erik@example.com â â
â â â â
â â [Review Registration] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â ð· Maria Lindqvist â â
â â Graphics Operator (Mid) â â
â â Malmö, Sweden â â
â â â â
â â Submitted: May 4, 2025 16:30 â â
â â From invitation: maria@example.com â â
â â â â
â â [Review Registration] â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 2: Click "Review Registration" for Erik â Review Screen
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Review Registration: Erik Johansson [â Close] â
âââââââââââââââââââââââââââââââââââââââââââ ââââââââââââââââââââ€
â â
â âââââââââââââ â
â â [Photo] â Erik Johansson â
â â â erik@example.com â
â âââââââââââââ +46 70 234 5678 â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â BASIC INFORMATION â
â ⢠Name: Erik Johansson â
â ⢠Email: erik@example.com â
â ⢠Phone: +46 70 234 5678 â
â ⢠Home base: Gothenburg â
â ⢠Address: Kungsgatan 45, 411 15 Gothenburg â
â â
â IDENTITY â
â ⢠Personal ID: 900312-5678 â
â ⢠Nationality: Sweden â
â ⢠Passport: 87654321 â
â â
â EMERGENCY CONTACT â
â ⢠Name: Sara Johansson (Spouse) â
â ⢠Phone: +46 70 345 6789 â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â SKILLS & EXPERIENCE â
â ⢠Sound Mixer (Senior) â
â ⢠Audio Engineer (Mid) â
â â
â LANGUAGES â
â ⢠Swedish (Native) â
â ⢠English (Fluent) â
â â
â PREFERENCES â
â ⢠Food: No special requirements â
â ⢠Clothing: Shirt L, Pants 34, Shoes 43 â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â â All required fields completed â
â â Photo uploaded â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ACTIONS â
â â
â [â Approve & Create Profile] â
â [â Reject] â
â [ð¬ Request More Info] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 3: Click "Approve & Create Profile" â Confirmation
ââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââ
â â Registration approved! â
â â
â Profile created for Erik Johansson â
â â
â Welcome email sent with login link. â
â â
â Erik can now: â
â ⢠Set his password â
â ⢠Log in to crew.pbs.com â
â ⢠Receive offers from you â
â â
â [View Erik's Profile] [Close] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 4: Request More Info Scenario
If something is missing or unclear, Susanne clicks "Request More Info":
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Request More Information [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â What additional information do you need from Erik? â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Hi Erik, â â
â â â â
â â Thanks for registering! Could you please provide: â â
â â â â
â â ⢠Your company/VAT number (if you have one) â â
â â ⢠References from recent projects â â
â â â â
â â Reply to this email with the details. â â
â â â â
â â Thanks, â â
â â Susanne â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Send Request] [Cancel] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 5: Reject Scenario
If email was wrong or person not suitable:
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Reject Registration [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â Are you sure you want to reject this registration? â
â â
â Reason (internal note, not sent to applicant): â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Wrong email - invited erik@company.com but registered â â
â â with personal email erik@gmail.com â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Confirm Rejection] [Cancel] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
System Actionsâ
Approve Registration:
-- See UC-12 for complete profile creation SQL
-- Update submission
UPDATE profile_submissions
SET status = 'approved',
approved_profile_id = {new_profile_id},
reviewed_by_user_id = {susanne_user_id},
reviewed_at = NOW()
WHERE id = {submission_id}
-- Update invitation
UPDATE staff_invitations
SET approved_profile_id = {new_profile_id}
WHERE profile_submission_id = {submission_id}
Request More Info:
UPDATE profile_submissions
SET status = 'more_info_requested'
WHERE id = {submission_id}
-- Send email to applicant with Susanne's message
Reject Registration:
UPDATE profile_submissions
SET status = 'rejected',
rejection_reason = 'Wrong email - invited erik@company.com...',
reviewed_by_user_id = {susanne_user_id},
reviewed_at = NOW()
WHERE id = {submission_id}
UC-10: Handle Scheduling Conflictsâ
Goal: Susanne identifies and resolves scheduling conflicts when staff are double-booked or offers overlap.
Actors: Susanne (Admin)
Preconditions:
- Multiple projects with overlapping dates
- Attempting to send offer or book directly
System: backend.pbs.com
UI Journeyâ
Scenario A: Conflict Warning When Sending Offer
(Already shown in UC-04, repeated here for completeness)
Susanne tries to send offer to Lisa for May 10-15, but Lisa has assignment May 12-14.
âââââââââââââââââââââââââââââââââââââââââ ââââââââââââââââââââââ
â Create Offer for Lisa Berg [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â â ïž Conflict Warning â
â Lisa has an existing assignment May 12-14 (Football Match). â
â Continue anyway? [Yes, send offer] [Cancel] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Scenario B: View All Conflicts for a Person
Susanne clicks on Lisa's profile to see her schedule:
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Lisa Berg - Schedule & Availability â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â âââ MAY 2025 CALENDAR âââââââââââââââââââââââââââââââââââ â
â â
â Mon Tue Wed Thu Fri Sat Sun â
â 1 2 3 4 5 â
â 6 7 8 9 [10] [11] [12] â
â [13] [14] [15] 16 17 18 19 â
â 20 21 22 23 24 25 26 â
â 27 28 29 30 31 â
â â
â Legend: â
â [XX] Confirmed assignment â
â (XX) Pending offer â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â CONFIRMED ASSIGNMENTS (2) â
â â
â ⢠Football Match - May 12-14 (EVS Operator) â
â Status: Confirmed â
â â
â ⢠Champions League Final - May 10-15 (EVS Operator) â
â Status: Confirmed â
â â ïž OVERLAPS with Football Match â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â PENDING OFFERS (1) â
â â
â ⢠Ice Hockey Finals - May 8-10 (EVS Operator) â
â Status: Awaiting Lisa's response â
â â ïž OVERLAPS with Champions League (if accepted) â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â ACTIONS â
â â
â [Resolve Conflicts] [Contact Lisa] [View Projects] â
â â
âââââââââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââ
Scenario C: Conflict Resolution Options
Susanne clicks "Resolve Conflicts":
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Resolve Scheduling Conflicts [â Close] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â Lisa Berg has overlapping assignments: â
â â
â CONFLICT 1: â
â ⢠Champions League Final: May 10-15 â
â ⢠Football Match: May 12-14 â
â ⢠Overlap: May 12-14 (3 days) â
â â
â Resolution options: â
â â Contact Lisa to choose one project â
â â Cancel Football Match assignment â
â â Cancel Champions League assignment â
â â Leave as-is (Lisa will handle it) â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Send Message to Lisa] [Cancel Assignment] [Mark Resolved] â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
System Actionsâ
Conflict Detection Query (run when sending offer or viewing schedule):
SELECT
a1.*,
p1.name AS project1_name,
a2.*,
p2.name AS project2_name,
-- Calculate overlap
GREATEST(a1.start_date, a2.start_date) AS overlap_start,
LEAST(a1.end_date, a2.end_date) AS overlap_end,
(LEAST(a1.end_date, a2.end_date) - GREATEST(a1.start_date, a2.start_date) + 1) AS overlap_days
FROM assignments a1
JOIN project_functions pf1 ON a1.project_function_id = pf1.id
JOIN projects p1 ON pf1.project_id = p1.id,
assignments a2
JOIN project_functions pf2 ON a2.project_function_id = pf2.id
JOIN projects p2 ON pf2.project_id = p2.id
WHERE a1.profile_id = {lisa_profile_id}
AND a2.profile_id = {lisa_profile_id}
AND a1.id != a2.id
AND (a1.start_date, a1.end_date) OVERLAPS (a2.start_date, a2.end_date)
AND a1.current_status NOT IN ('cancelled')
AND a2.current_status NOT IN ('cancelled')
ORDER BY a1.start_date
Include Pending Offers in Conflict Check:
-- Check both confirmed assignments AND pending offers
SELECT * FROM assignment_offers
WHERE profile_id = {lisa_profile_id}
AND status IN ('pending', 'accepted', 'negotiating')
AND EXISTS (
SELECT 1 FROM project_functions pf
JOIN projects p ON pf.project_id = p.id
WHERE pf.id = assignment_offers.project_function_id
AND (p.start_date, p.end_date) OVERLAPS ({new_offer_start}, {new_offer_end})
)
Summary: Operations & Reportsâ
UC-07: Generate Reports
âââ Crew List: Names, roles, contact info, photos
âââ Meal List: Food preferences for catering
âââ Clothing Sizes: For uniform ordering
âââ Hotel Bookings: All reservations
âââ Budget Report: Planned vs actual costs (post-completion)
UC-08: Invite Staff
âââ Enter email addresses
âââ Set auto-approve or manual review
âââ System sends invitation emails with registration links
UC-09: Review Registrations
âââ View pending submissions
âââ Review all details (profile, photo, skills)
âââ Approve â Create profile + send welcome email
âââ Request More Info â Ask for clarification
âââ Reject â Mark rejected (for wrong email cases)
UC-10: Handle Conflicts
âââ Soft warnings when sending offers
âââ View crew schedule with conflict highlights
âââ Resolution options: Contact crew, cancel assignment, or leave as-is
Key MVP Features Demonstratedâ
- Fixed report templates: No customization for MVP, keeps it simple
- Company-wide report access: All admins can generate/view reports
- Invite-only registration: No public forms, controlled onboarding
- Manual review by default: Susanne controls who gets approved
- Soft conflict detection: Warnings, not hard blocks
- Budget tracking foundation: Tracks planned vs actual for future invoicing
Related Documentsâ
- 00-personas.md - Susanne persona
- 02-admin-staffing.md - UC-06 (project completion & finalization)
- 04-staff-workflows.md - UC-11, UC-12 (staff registration from crew side)
- Database Schema - Complete schema documentation
- /reference/qa-answers - All MVP decisions
Database Tables Usedâ
exports- Generated reportsstaff_invitations- Invitation trackingprofile_submissions- Registration dataprofiles- Staff directoryusers- Account creationassignments- For conflict detection, budget reportsprojects- Project data, financial finalizationtravel_bookings- For travel reportshotel_bookings- For hotel reports