Staff User Cases: Crew Portal Workflows
Actors: Lisa (EVS Operator, Freelancer), Johan (when acting as crew) User Cases: UC-11, UC-12, UC-13, UC-14, UC-15, UC-16
Overviewβ
This document covers the crew self-service portal workflows on crew.pbs.com:
- UC-11: Staff Registration (Invite-Only)
- UC-12: Account Setup & Login
- UC-13: Update Profile
- UC-14: Receive & Respond to Offers
- UC-15: Negotiate Rate
- UC-16: View Assignments & Documents
The crew portal is designed for mobile-first access, allowing freelancers like Lisa to manage their profile, respond to offers, and view assignments from their phone between takes.
UC-11: Staff Registration (Invite-Only)β
Goal: Lisa receives an invitation from Susanne and registers for the crew portal.
Actors: Lisa (New crew member)
Preconditions:
- Susanne has sent an invitation from backend.pbs.com
- Lisa received invitation email
System: crew.pbs.com
UI Journeyβ
Step 1: Lisa Receives Invitation Email
From: NCP via PBS <noreply@pbs.com>
To: lisa@example.com
Subject: Invitation to join NCP crew portal
ββββββββββββββββββββββββββββββββββββββββββββ
Hi Lisa,
Susanne from NCP (New Century Production) has invited you to join
their crew portal on PBS.
Complete your registration to:
β’ Update your profile and availability
β’ Receive job offers
β’ View your assignments
β’ Download contracts and travel documents
[Complete Registration]
This link expires in 14 days.
ββββββββββββββββββββββββββββββββββββββββββββ
Step 2: Lisa Clicks "Complete Registration" β Registration Form
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β crew.pbs.com β
β β
β Welcome to PBS! β
β Susanne invited you to join NCP crew portal β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Complete your profile β
β β
β βββ BASIC INFORMATION βββββββββββββββββββββββββββββββββββ β
β β
β First name * [Lisa__________] β
β Last name * [Berg__________] β
β β
β Email * [lisa@example.com] (pre-filled) β
β Phone * [+46 70 123 4567] β
β β
β βββ LOCATION & IDENTITY βββββββββββββββββββββββββββββββββ β
β β
β Home base city * [Stockholm_____] β
β Address [Storgatan 12, 114 51 Stockholm] β
β β
β Personal ID [850615-1234] (personnummer) β
β Nationality [SE - Sweden βΌ] β
β Passport number [12345678] β
β β
β βββ EMERGENCY CONTACT βββββββββββββββββββββββββββββββββββ β
β β
β Name * [Anna Berg_____] β
β Phone * [+46 70 987 6543] β
β Relation [Spouse βΌ] β
β β
β βββ PROFILE PHOTO (REQUIRED) ββββββββββββββββββββββββββββ β
β β
β Upload a clear photo for crew passes and ID badges β
β β
β ββββββββββββββββββ β
β β β β
β β [ π· ] β β
β β β β
β β Drag photo β β
β β or click β β
β β β β
β ββββββββββββββββββ β
β β
β [Upload Photo] β
β β
β βββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββ β
β β
β [Continue to Skills & Preferences] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Step 3: Click "Continue" β Skills & Preferences
βββββββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββ
β crew.pbs.com - Complete Profile (2/2) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββ YOUR SKILLS βββββββββββββββββββββββββββββββββββββββββ β
β β
β Select your functions/roles: * β
β β
β Search: [EVS___________] π β
β β
β Selected (2): β
β βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β β EVS Operator Seniority: [Senior βΌ] [β] β β
β β β VAR Operator Seniority: [Mid βΌ] [β] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [+ Add Another Function] β
β β
β βββ PREFERENCES βββββββββββββββββββββββββββββββββββββββββ β
β β
β Languages β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β’ Swedish (Native) [β] β β
β β β’ English (Fluent) [β] β β
β β β’ German (Basic) [β] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β [+ Add Language] β
β β
β Food Preferences β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [Vegetarian________________________________________] β β
β β [No shellfish (allergy)____________________________] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Clothing Sizes β
β Shirt: [M βΌ] Pants: [32 βΌ] Shoes: [39 EU βΌ] β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [β Back] [Submit Registration] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Step 4: Click "Submit Registration" β Review Confirmation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Registration submitted! β
β β
β Thank you, Lisa! β
β β
β Your profile has been submitted for review. β
β Susanne will review your information and approve your β
β account shortly. β
β β
β You'll receive an email when your account is ready. β
β β
β [Close] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
System Actionsβ
- Load invitation from token:
SELECT * FROM staff_invitations
WHERE token = {token_from_url}
AND status = 'pending'
AND (expires_at IS NULL OR expires_at > NOW())
- Mark invitation as opened:
UPDATE staff_invitations
SET status = 'opened',
opened_at = NOW()
WHERE id = {invitation_id}
- Create profile submission:
INSERT INTO profile_submissions (
company_id, staff_invitation_id,
data, -- JSON with all form fields
status, submitted_at
) VALUES (
{company_id}, {invitation_id},
'{
"first_name": "Lisa",
"last_name": "Berg",
"email": "lisa@example.com",
"phone": "+46 70 123 4567",
"home_base_city": "Stockholm",
"address": "Storgatan 12, 114 51 Stockholm",
"personal_id_number": "850615-1234",
"nationality": "SE",
"passport_number": "12345678",
"emergency_contact_name": "Anna Berg",
"emergency_contact_phone": "+46 70 987 6543",
"emergency_contact_relation": "spouse",
"photo_url": "s3://photos/lisa-berg.jpg",
"functions": [
{"id": "uuid-evs", "seniority": "senior"},
{"id": "uuid-var", "seniority": "mid"}
],
"languages": [
{"code": "sv", "proficiency": "native"},
{"code": "en", "proficiency": "fluent"},
{"code": "de", "proficiency": "basic"}
],
"food_preferences": ["Vegetarian", "No shellfish (allergy)"],
"clothing_sizes": {"shirt": "M", "pants": "32", "shoes": "39"}
}',
'pending',
NOW()
)
- Update invitation status:
UPDATE staff_invitations
SET status = 'completed',
completed_at = NOW(),
profile_submission_id = {submission_id}
WHERE id = {invitation_id}
UC-12: Account Setup & Loginβ
Goal: After Susanne approves Lisa's registration, Lisa receives login credentials and accesses the crew portal.
Actors: Lisa (Approved crew member)
Preconditions:
- Lisa's registration was approved by Susanne (UC-09 in admin workflows)
- Profile created, welcome email sent
System: crew.pbs.com
UI Journeyβ
Step 1: Lisa Receives Welcome Email
From: NCP via PBS <noreply@pbs.com>
To: lisa@example.com
Subject: Welcome to NCP crew portal - Your account is ready!
ββββββββββββββββ ββββββββββββββββββββββββββββ
Hi Lisa,
Great news! Susanne has approved your registration.
Your crew portal account is now active.
[Set Your Password]
ββββββββββββββββββββββββββββββββββββββββββββ
Step 2: Click "Set Your Password" β Password Setup
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β crew.pbs.com - Set Password β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Welcome, Lisa! β
β β
β Create a password to access your crew portal account β
β β
β Email: lisa@example.com β
β β
β Password: [β’β’β’β’β’β’β’β’β’β’β’β’β’β’] β
β Confirm password: [β’β’β’β’β’β’β’β’β’β’β’β’β’β’] β
β β
β β Remember me on this device β
β β
β [Create Password & Log In] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Step 3: Login β Dashboard (First Time)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β crew.pbs.com [Lisa βΌ] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Welcome, Lisa! π β
β β
β βββ YOUR ASSIGNMENTS ββββββββββββββββββββββββββββββββββββ β
β β
β No upcoming assignments yet. β
β β
β βββ PENDING OFFERS ββββββββββββββββββββββββββββββββββββββ β
β β
β No offers at the moment. β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β π± Mobile App Coming Soon β
β For now, bookmark this page on your phone for quick access β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [View My Profile] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
System Actionsβ
- When Susanne approves (happens in backend.pbs.com):
-- Create profile
INSERT INTO crew_profiles (
first_name, last_name, email, phone,
home_base_city, address,
personal_id_number, nationality, passport_number,
emergency_contact_name, emergency_contact_phone, emergency_contact_relation,
photo_url,
languages, food_preferences, clothing_sizes
)
SELECT
data->>'first_name', data->>'last_name', data->>'email', data->>'phone',
data->>'home_base_city', data->>'address',
data->>'personal_id_number', data->>'nationality', data->>'passport_number',
data->>'emergency_contact_name', data->>'emergency_contact_phone', data->>'emergency_contact_relation',
data->>'photo_url',
data->'languages', data->'food_preferences', data->'clothing_sizes'
FROM profile_submissions
WHERE id = {submission_id}
-- Create profile functions
INSERT INTO profile_functions (profile_id, function_id, seniority)
SELECT {new_profile_id}, func->>'id', func->>'seniority'
FROM profile_submissions,
jsonb_array_elements(data->'functions') AS func
WHERE id = {submission_id}
-- Create user account (CREW role)
INSERT INTO users (
company_id, email, name, role, profile_id
) VALUES (
{company_id},
'lisa@example.com',
'Lisa Berg',
'CREW',
{new_profile_id}
)
-- 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}
-- Send welcome email with password setup link
- When Lisa sets password:
UPDATE users
SET password = {hashed_password},
email_verified_at = NOW()
WHERE email = 'lisa@example.com'
UC-13: Update Profileβ
Goal: Lisa updates her profile information (skills, preferences, emergency contact, photo).
Actors: Lisa (Crew member)
Preconditions:
- Lisa has active account
- Logged in to crew.pbs.com
System: crew.pbs.com
UI Journeyβ
Step 1: Navigate to Profile
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β crew.pbs.com [Lisa βΌ] β
β β
β [Dashboard] [Assignments] [Profile] [Documents] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββ MY PROFILE ββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββ β
β β [Photo] β Lisa Berg β
β β β EVS Operator (Senior) β
β βββββββββββββ Stockholm, Sweden β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β CONTACT INFORMATION [Edit] β
β β’ Email: lisa@example.com β
β β’ Phone: +46 70 123 4567 β
β β’ Home base: Stockholm β
β β’ Address: Storgatan 12, 114 51 Stockholm β
β β
β EMERGENCY CONTACT [Edit] β
β β’ Anna Berg (Spouse) β
β β’ +46 70 987 6543 β
β β
β IDENTITY β
β β’ Personal ID: 850615-**** β
β β’ Nationality: Sweden β
β β’ Passport: 12345678 β
β β
β SKILLS & EXPERIENCE [Edit] β
β β’ EVS Operator (Senior) - 6 years β
β β’ VAR Operator (Mid) - 2 years β
β β
β LANGUAGES [Edit] β
β β’ Swedish (Native) β
β β’ English (Fluent) β
β β’ German (Basic) β
β β
β PREFERENCES [Edit] β
β β’ Food: Vegetarian, No shellfish (allergy) β
β β’ Clothing: Shirt M, Pants 32, Shoes 39 β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Step 2: Click [Edit] for Skills β Edit Form
Lisa learned VAR operations and wants to update seniority.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Edit Skills & Experience [β Close] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ βββββ€
β β
β Your functions: β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β EVS Operator Seniority: [Senior βΌ] [β] β β
β β β VAR Operator Seniority: [Senior βΌ] [β] β β β Changed from Mid
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [+ Add Another Function] β
β β
β Equipment you own: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [EVS XT3 workstation____________________________] β β
β β [Backup EVS system________________________________] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [Save Changes] [Cancel] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
System Actionsβ
-- Update profile function seniority
UPDATE profile_functions
SET seniority = 'senior' -- Changed from 'mid'
WHERE profile_id = {lisa_profile_id}
AND function_id = {var_operator_function_id}
-- Update profile
UPDATE crew_profiles
SET updated_at = NOW()
WHERE id = {lisa_profile_id}
UC-14: Receive & Respond to Offersβ
Goal: Lisa receives an offer from Susanne, views details, and accepts it.
Actors: Lisa (Crew member)
Preconditions:
- Susanne sent offer via backend.pbs.com (UC-04)
- Offer email sent to Lisa
System: crew.pbs.com
UI Journeyβ
Step 1: Lisa Receives Offer Email
From: Susanne via PBS <susanne@ncp.com>
To: lisa@example.com
Subject: New job offer: EVS Operator - Champions League Final
βββββββββββββ βββββββββββββββββββββββββββββββ
Hi Lisa,
Susanne has sent you an offer for:
Champions League Final 2025
Madrid, Spain β’ May 10-15, 2025
Role: EVS Operator
Rate: 22,000 SEK (3 work days + 2 travel days)
[View Offer]
Offer expires: May 5, 2025
βββββββββββββββββββββββββ βββββββββββββββββββ
Step 2: Click "View Offer" β Offer Details (Mobile View)
ββββββββββββββββββββββββββββββββββββββββ
β crew.pbs.com [Lisa βΌ] β
ββββββββββββββββββββββββββββββββββββββββ€
β β
β New Offer from Susanne β
β β
β βββ CHAMPIONS LEAGUE FINAL 2025 βββ β
β β
β π Madrid, Spain β
β ποΈ Estadio Santiago BernabΓ©u β
β π
May 10-15, 2025 β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β YOUR ROLE β
β EVS Operator (Instant Replay) β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β COMPENSATION β
β β
β β’ 3 work days @ 5,500 SEK β
β = 16,500 SEK β
β β
β β’ 2 travel days @ 2,750 SEK β
β = 5,500 SEK β
β β
β π° Total: 22,000 SEK β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β CLIENT: UEFA β
β DEPARTURE FROM: Stockholm β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β MESSAGE FROM SUSANNE: β
β ββββββββββββββββββββββββββββββββ β
β β 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 β β
β ββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β β οΈ You have a conflict: β
β Football Match (May 12-14) β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β Offer expires: May 5, 2025 β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β [β Accept] [β Decline] [π¬ Negotiate]β
β β
ββββββββββββββββββββββββββββββββββββββββ
Lisa decides she can make it work and accepts.
Step 3: Click "Accept" β Confirmation
ββββββββββββββββββββββββββββββββββββββββ
β β Offer accepted! β
β β
β Your acceptance has been sent to β
β Susanne. β
β β
β She'll review and confirm your β
β assignment shortly. β
β β
β You'll receive an email when your β
β assignment is confirmed. β
β β
β [View Dashboard] [Close] β
β β
βββββ βββββββββββββββββββββββββββββββββββ
Step 4: Dashboard Updated (Pending Confirmation)
ββββββββββββββββββββββββββββββββββββββββ
β crew.pbs.com [Lisa βΌ] β
ββββββββββββββββββββββββββββββββββββββββ€
β β
β Dashboard β
β β
β βββ PENDING CONFIRMATION βββββββ β
β β
β ββββββββββββββββββββββββββββββββββ β
β β β³ Awaiting Susanne's confirmationβ β
β β β β
β β Champions League Final 2025 β β
β β EVS Operator β’ May 10-15 β β
β β 22,000 SEK β β
β β β β
β β You accepted 10 minutes ago β β
β ββββββββββββββββββββββββββββββββββ β
β β
β βββ UPCOMING ASSIGNMENTS βββββββ β
β β
β ββββββββββββββββββββββββββββββββββ β
β β β Ice Hockey Finals β β
β β EVS Operator β’ March 15-20 β β
β β [View Details] β β
β ββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββ
System Actionsβ
- When Lisa views offer (click email link):
-- Fetch offer
SELECT
ao.*,
pf.work_days, pf.travel_days,
p.name AS project_name, p.location_city, p.location_venue,
p.start_date, p.end_date,
p.client_name,
f.name AS function_name
FROM assignment_offers ao
JOIN project_functions pf ON ao.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
JOIN functions_catalog f ON pf.function_id = f.id
WHERE ao.id = {offer_id}
AND ao.profile_id = {lisa_profile_id}
-- Check for conflicts
SELECT a.*, p.name AS conflicting_project
FROM assignments a
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
WHERE a.profile_id = {lisa_profile_id}
AND (a.start_date, a.end_date) OVERLAPS ('2025-05-10', '2025-05-15')
AND a.current_status NOT IN ('cancelled')
- When Lisa clicks "Accept":
UPDATE assignment_offers
SET status = 'accepted',
responded_at = NOW()
WHERE id = {offer_id}
- Dashboard query (pending confirmation):
SELECT * FROM assignment_offers
WHERE profile_id = {lisa_profile_id}
AND status = 'accepted'
ORDER BY responded_at DESC
UC-15: Negotiate Rateβ
Goal: Lisa wants to negotiate the rate on an offer before accepting.
Actors: Lisa (Crew member)
Preconditions:
- Lisa has received an offer
- Viewing offer in crew.pbs.com
System: crew.pbs.com
UI Journeyβ
Step 1: Viewing Offer (Different Project)
Lisa receives an offer for Ice Hockey Finals at 4,500 SEK/day, but her usual rate is 5,000 SEK.
Step 2: Click "π¬ Negotiate" β Negotiation Form
ββββββββββββββββββββββββββββββββββββββββ
β Negotiate Offer β
ββββββββββββββββββββββββββββββββββββββββ€
β β
β Ice Hockey Finals 2025 β
β Sound Mixer β’ March 15-20 β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β CURRENT OFFER: β
β β’ Work day: 4,500 SEK Γ 4 days β
β β’ Travel day: 2,250 SEK Γ 2 days β
β β’ Total: 22,500 SEK β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β WHAT'S YOUR RATE? β
β β
β Work day: [5000] SEK/day β
β Travel day: [2500] SEK/day β
β β
β New total: 25,000 SEK β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β MESSAGE TO SUSANNE (optional): β
β ββββββββββββββββββββββββββββββββ β
β β 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, β β
β β Lisa β β
β ββββββββββββββββββββββββββββββββ β
β β
β βΉοΈ Susanne will review your request β
β and get back to you. β
β β
β [Send Request] [Cancel] β
β β
βββββββββββββββββββββ βββββββββββββββββββ
Step 3: Click "Send Request" β Confirmation
ββββββββββββββββββββββββββββββββββββββββ
β β Negotiation request sent β
β β
β Susanne will review your rate and β
β get back to you. β
β β
β You'll receive an email when there's β
β an update. β
β β
β [Close] β
β β
ββββββββββββββββββββββββββββββββββββββββ
After this, Susanne discusses with Lisa externally (phone/email), they agree on a rate, and Susanne updates the offer in the backend (see UC-05).
System Actionsβ
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}
UC-16: View Assignments & Documentsβ
Goal: Lisa views her confirmed assignments, travel details, and downloads documents (contract, road book).
Actors: Lisa (Crew member)
Preconditions:
- Lisa has confirmed assignments
- Susanne has booked travel, generated contract and road book
System: crew.pbs.com
UI Journeyβ
Step 1: Dashboard β Upcoming Assignments
ββββββββββββββββββββββββββββββββββββββββ
β crew.pbs.com [Lisa βΌ] β
ββββββββββββββββββββββββββββββββββββββββ€
β β
β Dashboard β
β β
β βββ UPCOMING ASSIGNMENTS (2) βββ β
β β
β ββββββββββββββββββββββββββββββββββ β
β β β Champions League Final 2025 β β
β β EVS Operator β β
β β May 10-15 β’ Madrid β β
β β 22,000 SEK β β
β β β β
β β [View Details] β β
β ββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββ β
β β β Ice Hockey Finals β β
β β EVS Operator β β
β β March 15-20 β’ Helsinki β β
β β 28,000 SEK β β
β β β β
β β [View Details] β β
β ββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββ
Step 2: Click "View Details" β Assignment Details
ββββββββββββββββββββββββββββββββββββββββ
β Champions League Final 2025 β
β ESC-2025-042 β
ββββββββββββββββββββββββββββββββββββββββ€
β β
β [Overview] [Travel] [Documents] β
β β
β βββ ASSIGNMENT DETAILS βββββββββ β
β β
β YOUR ROLE: β
β EVS Operator (Instant Replay) β
β β
β DATES: β
β May 10-15, 2025 β
β β
β LOCATION: β
β Estadio Santiago BernabΓ©u β
β Av. de Concha Espina 1, Madrid β
β β
β CLIENT: β
β UEFA β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β COMPENSATION β
β β’ 3 work days @ 5,500 SEK β
β = 16,500 SEK β
β β’ 2 travel days @ 2,750 SEK β
β = 5,500 SEK β
β β’ Total: 22,000 SEK β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β JOB DETAILS β
β β’ Meals: β Included β
β β’ Parking: On-site available β
β β’ Dress code: Smart casual β
β β’ Equipment: Provided on site β
β β
β βββββββββββββββββββββββββββββββββ β
β β
β CONTACT: β
β Susanne (PM) β
β +46 70 123 4567 β
β susanne@ncp.com β
β β
ββββββββββββββββββββββββββββββββββββββββ
Step 3: Click "Travel" Tab
ββββββββββββββββββββββββββββββββββββββββ
β Champions League Final - Travel β
ββββββββββββββββββββββββββββββββββββββββ€
β β
β βββ OUTBOUND FLIGHT ββββββββββββ β
β β
β βοΈ SAS SK1234 β
β β
β π
May 10, 2025 β
β π« Stockholm ARN T5 β π¬ Madrid MAD T4β
β β
β Departure: 08:30 β
β Arrival: 12:45 β
β β
β Booking ref: ABC123 β
β β
β βββ HOTEL ββββββββββββββββββββββ β
β β
β π¨ Hotel Princesa Plaza β
β β
β π Calle de la Princesa 40, Madrid β
β βοΈ +34 91 234 5678 β
β β
β Check-in: May 10, 15:00 β
β Check-out: May 15, 11:00 β
β Nights: 5 β
β β
β Booking ref: HTL789 β
β β
β βββ RETURN FLIGHT βββββββββββββ β
β β
β βοΈ SAS SK1235 β
β β
β π
May 15, 2025 β
β π« Madrid MAD T4 β π¬ Stockholm ARN T5β
β β
β Departure: 18:00 β
β Arrival: 22:15 β
β β
β Booking ref: RTN456 β
β β
ββββββββββββββββββββββββββββββββββββββββ
Step 4: Click "Documents" Tab
ββββββββββββββββββββββββββββββββββββββββ
β Champions League Final - Documents β
ββββββββββββββββββββββββββββββββββββββββ€
β β
β βββ AVAILABLE DOCUMENTS βββββββ β
β β
β ββββββββββββββββββββββββββββββββββ β
β β π Contract β β
β β Service Agreement β β
β β Uploaded: May 3, 2025 β β
β β [Download PDF] β β
β ββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββ β
β β πΊοΈ Road Book β β
β β Travel & venue details β β
β β Generated: May 4, 2025 β β
β β [Download PDF] β β
β ββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββ βββββββββ β
β β π Other Documents β β
β β Upload signed contract β β
β β [Upload File] β β
β ββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββ
System Actionsβ
Dashboard query (upcoming assignments):
SELECT
a.*,
p.name AS project_name, p.location_city,
f.name AS function_name,
-- 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 project_functions pf ON a.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
JOIN functions_catalog f ON pf.function_id = f.id
WHERE a.profile_id = {lisa_profile_id}
AND a.current_status NOT IN ('cancelled', 'completed')
AND a.start_date >= CURRENT_DATE
ORDER BY a.start_date ASC
Assignment details query:
-- Same as above plus job details
SELECT
a.*,
a.meals_included, a.parking_info, a.dress_code,
a.equipment_needed, a.special_instructions,
p.name AS project_name, p.client_name,
p.location_venue, p.location_venue_address,
f.name AS function_name,
u.name AS pm_name, u.email AS pm_email, pr.phone AS pm_phone
FROM assignments a
JOIN project_functions pf ON a.project_function_id = pf.id
JOIN projects p ON pf.project_id = p.id
JOIN functions_catalog f ON pf.function_id = f.id
JOIN users u ON p.company_id = u.company_id AND u.role = 'ADMIN'
LEFT JOIN profiles pr ON u.profile_id = pr.id
WHERE a.id = {assignment_id}
Travel details query:
SELECT * FROM travel_bookings
WHERE assignment_id = {assignment_id}
ORDER BY departure_at ASC
SELECT * FROM hotel_bookings
WHERE assignment_id = {assignment_id}
ORDER BY check_in_date ASC
Documents query:
SELECT * FROM documents
WHERE documentable_type = 'Assignment'
AND documentable_id = {assignment_id}
ORDER BY created_at DESC
Summary: Staff Portal Workflowsβ
UC-11: Registration
βββ Receive invite β Complete registration form (with photo) β Submit for review
UC-12: Account Setup
βββ Approved by admin β Receive welcome email β Set password β Log in
UC-13: Update Profile
βββ Edit skills, preferences, emergency contact, photo β Save
UC-14: Respond to Offers
βββ Receive email β View offer details (role, dates, rates, message)
βββ Accept (one-click) β Awaiting admin confirmation
βββ Decline β Offer marked as declined
UC-15: Negotiate
βββ Click "Negotiate" β Enter desired rate + message β Admin reviews externally
UC-16: View Assignments
βββ Dashboard: See all upcoming assignments
βββ Details: Role, dates, location, compensation, job details
βββ Travel: Flights, hotel details
βββ Documents: Download contract, road book, upload signed docs
Key MVP Features Demonstratedβ
- Mobile-first design: All views optimized for phone access
- Simple one-click actions: Accept/Decline offers with single tap
- Complete transparency: See all details (rates, dates, job requirements)
- Photo required: Profile photo uploaded during registration
- Conflict visibility: System shows conflicting assignments when viewing offers
- Structured information: Travel and hotel details clearly organized
- Document access: Easy download of contracts and road books
Related Documentsβ
- 00-personas.md - Lisa's persona
- 02-admin-staffing.md - Susanne's view (sending offers)
- 03-admin-operations.md - Invitation & approval process
- Database Schema - Complete schema documentation
- /reference/qa-answers - All MVP decisions
Database Tables Usedβ
staff_invitations- Invite trackingprofile_submissions- Registration dataprofiles- Staff directoryusers- CREW role accountsprofile_functions- Skills/rolesassignment_offers- Offers receivedassignments- Confirmed bookingstravel_bookings- Flight/train detailshotel_bookings- Hotel detailsdocuments- Contracts, road books