Epic 03: Candidates Selection & Offer Sending¶
Overview¶
The Candidates Selection & Offer Sending Epic enables clients to efficiently find and review matched flexworkers and send formal job offers. This epic implements the core hiring workflow where clients evaluate candidates based on matching scores, review detailed profiles, make selection decisions, and send offers through the platform. The system provides ranked candidate lists with transparent scoring, allowing clients to quickly identify suitable flexworkers. The offer workflow is integrated with MySolution for placement contract generation and digital signing, ensuring compliance while maintaining a smooth user experience.
Business Value¶
- Reduce time-to-hire by presenting pre-qualified, ranked candidates Streamline application processing with organized workflow tabs Enable proactive candidate discovery through matching algorithms Provide flexible access to the entire talent pool Facilitate communication and offer management Build trust through transparent review systems Ensure compliance through MySolution integration
Solution Concept¶
The solution provides multiple pathways for clients to find and hire flexworkers. Clients can process incoming applications through organized workflow tabs, proactively search for matching candidates who haven't applied, or browse the entire candidate database. Each pathway leads to detailed candidate profiles with skills, documents, availability and reviews. The integrated messaging system enables direct communication, while the offer workflow handles formal job proposals through MySolution integration. The matching engine ensures relevant candidates are surfaced based on job requirements, while the review system builds trust and accountability.
Features and User Stories¶
3.1 Process Applications Workflow¶
3.1 Process Applications Workflow To Do Preview¶
User Story:
As a client user I want to process applications for my job postings through an organized workflow So that I efficiently move candidates through the hiring pipeline from application to placement
Описание: The Process Applications Workflow feature provides a structured path for managing candidates who have applied to specific job postings. Applications are organized into four tabs representing different stages of the hiring process, allowing managers to track progress and take appropriate actions at each stage.
Критерии приёмки: - Access Point: - Navigate to specific Job Posting page - Click "Applications" tab (if in Job Overview tab) - Tab Structure: - Unprocessed: - New applications requiring initial review - On-Going: - Applications under active consideration (with at least 1 message sent, and/or offer received) - Hired: - Successfully placed candidates (offer sent and accepted) - Declined: - Rejected applications - Each tab shows count - Unprocessed Tab displays: - List of candidates who applied but no action was taken on them - For each candidate shows: - Profile photo/avatar and name - Rating and reviews count → full review modal - Application date/time - Match score percentage - Location (city/region if in NL, country if outside NL) - Distance to the job location (in km) - “Already in NL” badge if applicable - Onboarding status badge - Onboarded (has BSN, housing and bank account set up) - Onboarding (needs help with setting up BSN, housing and back account) - Quick actions: - Message → Message screen - View Profile → Full Candidate Profile (with job context) - Send Offer → Send Offer modal - Decline (job context depended) → confirmation dialog decline note with “Cancel” and “Decline” buttons - Sort by: - Application date (newest first) by default - On-Going Tab shows: - Candidates in active consideration/negotiation (at least 1 message sent and/or offer received) - Same candidate information as in Unprocessed - Actions available based on current offer status: - "Edit Offer" with expiry countdown badge → opens offer edit mode - “Renew Offer” with offer expired date badge → opens offer edit mode - Hired Tab contains: - Successfully placed candidates - Buttons: - View Profile - Message - Leave Review (after job start date) - nice to have, - End Placement (the latter shows message “Contact Cruits for further assistance” on click - for MVP) - nice to have - Declined Tab lists: - All declined applications - “Declined on dd.mm.yyyy” with a decline note on hover - Buttons: - Message - View Profile - Reconsider → moves a candidate back to Ongoing - Application Processing Flow: - Unprocessed → On-Going (once manager opens the chat) - Unprocessed → Declined (once manager declines) - Decline button opens a pop-up : “Are you sure you would like to decline this application? - Send a message with the reason for decline (optional)” with “Cancel” and “Decline” buttons - On-Going → Hired (when offer accepted) - On-Going → Declined (if Decline button was clicked) - Declined → Ongoing (if Reconsider button was clicked) - Applications move between tabs automatically based on actions - Tab counts update in real-time as applications are processed
3.1.1 (не MVP)¶
3.2 Matching Candidates List¶
3.2 Matching Candidates List To Do Preview (не MVP)¶
User Story:
As a client user I want to view all candidates who match my job postings, both those who have applied and those who haven't So that I can proactively reach out to suitable candidates
Описание: The Matching Candidates List provides a comprehensive view of all flexworkers who match the requirements of the manager's job postings. This proactive recruitment tool shows candidates ranked by match percentage, regardless of whether they have applied.
Критерии приёмки: - Access Points: - “Find More Candidates” button on a job posting - Left navigation panel → "Candidates" → "Job ID - Job Title" - “Candidates” opens All Candidates view by default - Candidate List displays: - All candidates matching selected job(s) - Don’t show the candidates already placed (are in “Hired” section of that job posting) - Ranked by match percentage (highest first) - For each candidate: - Profile photo/avatar - Rating with reviews count → full review modal - Match percentage with visual indicator (like 98%) - Location (city / region in in NL, or country + city if outside NL)) - Distance from job site (in km) - “Already in NL” badge if applicable - Onboarding status badge TMR-217: - Change the names of Onboarding Status Badges In Review Preview - Onboarded (has BSN, housing and bank account set up) - Onboarding (needs help with setting up BSN, housing and back account) - Rating and reviews count (if any) - Application timestamp, if applied (like “Applied at: - Jan 27, 2026 at 10:34”) - Info box “Worked with you before: [time range]” (if applicable) - Actions: - Message, View Details, Send Offer - Filtering Options: - Minimum Matching Score (slider with %) - Application Status: - All/Applied/Not Applied - Onboarding Status: - All / Onboarded / Onboarding - Distance Range (km) - Availability status (All / Open to Work / On Assignment / Unavailable) - Already in NL (on/off toggle switch) - Empty States: - No matches: "No candidates match the selected criteria" - Pagination: as usual OR lazy loading - Real-time updates when new candidates match - nice to have - 3.2.1. - NOT MVP - Profile photo/avatar and name are clickable → Candidate Profile page - Additional Filters - Minimum rating - Text search (name, skills) - Explanation text on hover / click on status badge - Application Status: - Applied - “This candidate has already applied” - Onboarding Status: - Onboarded - “This candidate is ready to start working, as they are fully onboarded and have BSN, housing and bank account in NL” - Onboarding - “This candidate does not have BSN, housing and/or bank account in NL” - Availability status: - Open to Work - “This candidate is actively seeking a new placement” - On Assignment - “This candidate is currently on assignment, but may still be considering new placement” - Unavailable - “This candidate is not seeking a new placement as for now” - Already in NL - “This candidate is in the Netherlands already”
3.3 All Candidates List¶
User Story:
As a client user I want to browse all available candidates on the platform and initiate actions after selecting a relevant job posting So that I can discover talents beyond automatic matching
Описание: The All Candidates List provides access to the entire flexworker database, ranked by overall rating. This view enables discovery of candidates who might not match current postings but could be suitable for future opportunities.
Критерии приёмки: - Access Point: - Left panel → Candidates → "All Candidates" tab/view - Separate from Matching Candidates view - List Display: - All candidates on platform - Default sort: - Rating (highest first) - For each candidate shows: - Profile photo/avatar - Overall rating with review count → full review modal - Location (city / region in in NL, or country + city if outside NL)) - “Already in NL” badge if applicable - Status badges: - Applied (if applicable) - Onboarded / Onboarding - Message, Send Offer and View Profile buttons - If offer was sent: “Send Offer” button becomes disabled, has text on hover and on click “You have already sent the offer. - Please find this candidate in On-going tab of the job posting” - for the Demo #2 - No matching scores shown - No distance shown (no job context) - Job Selection Dialog : - Triggered by clicking Message/Send Offer buttons from this page - Modal with: - Title and explanation text - Dropdown of active job postings - "Create New Job Posting" button → Create Job Request page - Once selected, if Message button was clicked, Confirm -> messaging page with the job info card - Once selected, if Send Offer button was clicked, Confirm → send offer modal with the job info card - Filters: - Availability status (All / Open to Work / On Assignment / Unavailable) - Onboarding Status: (All / Onboarded / Onboarding) - Already in NL (on/off toggle switch) - Pagination: as usual OR lazy loading
3.1 (не MVP)¶
3.4 Candidate Profile¶
3.4 Candidate Profile To Do Preview¶
User Story:
As a client user I want to view comprehensive information about a candidate including their skills, experience and documents So that I can make informed and effective hiring decisions
Описание: The Candidate Profile page provides all relevant information about a flexworker in an organized layout. The page adapts based on context (whether viewing from job applications, matching list, or all candidates) . Acceptance Criteria for Candidate Page: Page Header: Large profile photo or avatar Full name Location (city / region in in NL, or country + city if outside NL) Distance from job location (km) Overall rating with review count → full review modal Possible status badges: Match percentage (if job context exists) - for full Candidate Profile Application status (“Applied”, if applicable) - for full Candidate Profile “Already in NL” (if applicable) - for cards only Current availability (Open to Work / On Assignment / Unavailable) - for all cards, full and simplified candidate profiles Onboarding status (Onboarded / Onboarding) - for all cards, full and simplified candidate profiles Action buttons (context-dependent): Message Send Offer Decline (if candidate applied) Reconsider (if a candidate applied has been declined) Job info card with Job Start and End dates (if job context exists) Overview Tab: Match Score Section: Overall match percentage with visual gauge Skill name and worker’s skill levels in the left column “Needed: [skill level]” and importance badge (Nice to Have / Important / Must Have) - the job information - on the right column Breakdown by sections: Matched Skills - worker’s skill levels meet / exceed the needed levels Skills Needing Improvement - worker’s skill levels are below the needed levels Missing Skills - worker has no such skills disclosed Boolean skills (with no levels) have no secondary text displayed Work Experience Section Only the most recent work entry shown Either parsed from CV or added as text sections by a worker “View More” button to
Критерии приёмки: - for Candidate Page: - Page Header: - Large profile photo or avatar - Full name - Location (city / region in in NL, or country + city if outside NL) - Distance from job location (km) - Overall rating with review count → full review modal - Possible status badges: - Match percentage (if job context exists) - for full Candidate Profile - Application status (“Applied”, if applicable) - for full Candidate Profile - “Already in NL” (if applicable) - for cards only - Current availability (Open to Work / On Assignment / Unavailable) - for all cards, full and simplified candidate profiles - Onboarding status (Onboarded / Onboarding) - for all cards, full and simplified candidate profiles - Action buttons (context-dependent): - Message - Send Offer - Decline (if candidate applied) - Reconsider (if a candidate applied has been declined) - Job info card with Job Start and End dates (if job context exists) - Overview Tab: - Match Score Section: - Overall match percentage with visual gauge - Skill name and worker’s skill levels in the left column - “Needed: [skill level]” and importance badge (Nice to Have / Important / Must Have) - the job information - on the right column - Breakdown by sections: - Matched Skills - worker’s skill levels meet / exceed the needed levels - Skills Needing Improvement - worker’s skill levels are below the needed levels - Missing Skills - worker has no such skills disclosed - Boolean skills (with no levels) have no secondary text displayed - Work Experience Section - Only the most recent work entry shown - Either parsed from CV or added as text sections by a worker - “View More” button to expand all work experience in a modal - No Skill Badges for MVP - Education Section - Only the most recent education entry shown - Either parsed from CV or added as text sections by a worker - “View More” button to expand all education history in a modal - Availability Section: - “Available from: date” OR “Not Available” - Preferred Shifts (indicate all out of 4 options that apply) - Ok/Not Ok with variable shifts badge - Contact Information - shown if only there is a placement for this candidate - Phone number - Certificate Tab: - Uploaded certificates - Certificate name - Issued date - View button - Download button - File formats: - PDF, PNG, JPG - Acceptance Criteria for Simplified Candidate Page: - Same as above, but there is no distance, no Match Score - Instead of Matched Skills, there is Skills section with skill levels - This simplified version is accessed only from “All Candidates” page - BlinkSoftware [HF] [Main] - Job Selection Modal: - Triggered by clicking Message/Send Offer buttons from this page - Modal with: - "Select a job posting to continue" - Explanation text - Dropdown of active job postings - "Create New Job Posting" button → Create Job Request page - Once selected, if Message button was clicked, Confirm -> messaging page with the job info card - Once selected, if Send Offer button was clicked, Confirm → send offer modal with the job info card - Inactive Worker Page - same as Simplified Candidate Profile - Added “Worked with you before - [month year - month year]” info card - No onboarding status (Onboarding / Onboarded) - not relevant - Only Availability Status (Open to Work / On Assignment / Unavailable)
3.4.1 (не MVP)¶
3.5 Candidate Reviews¶
3.5 Candidate Reviews To Do Preview¶
User Story:
As a client user I want to view reviews from previous employers and leave my own review after a placement So that I can make informed decisions based on past performance
Описание: The review system provides transparency into flexworker performance through ratings and feedback from previous employers. Managers can view historical reviews and contribute their own after job completion.
Критерии приёмки: - Reviews List: - Triggered by clicking rating stars or "View Reviews" link - Shows all reviews in reverse chronological order (newest to oldest) - For each review: - Reviewer name and company - Position candidate held - Date range of placement - Date of review - Overall rating (1-5 stars) - Written feedback text - Empty State: - If a manager has no active placement / placement in the past: - Explanation text in the center “There are no reviews yet. - Please note that only employers may leave the reviews” - No buttons (or “Leave Review” button is not active) - If a manager has an active placement / placement in the past: - Explanation text in the center “There are no reviews yet. - Please leave the first review” - “Leave Review” button is active - Leave Review functionality: - Available only when: - Candidate worked for the company (offer sent and accepted, for MVP) - Job start date has passed - No existing review for this placement - Manager chooses the placement of this worker from the dropdown - "Leave a Review" button in: - View Reviews modal - Active Worker Page - Inactive Workers page - Review Form includes: - Overall rating (1-5 stars, required) - Written feedback (50-2000 chars) - Min 50 characters - Max 2000 characters - Review Submission: - Can edit / delete after submission - Success confirmation pop-up “Your review was successfully posted!” - Updates candidate's average rating immediately - Review Display Rules: - Show all reviews to logged-in clients - Anonymous reviews not allowed - Inappropriate content flagged/filtered - nice to have - Empty State: - "No reviews yet" with explanation “No reviews for this candidate. - Still, that does not mean they are not great!” - Modal has close button and closes on outside click - Reviews load progressively if many (10 initial, then load more)
3.5.1 (не MVP)¶
3.6 Message Candidate Us¶
3.6 Message Candidate To Do Preview¶
User Story:
As a client user I want to communicate directly with candidates through the platform So that I can discuss opportunities and coordinate next steps while maintaining a record of all communications
Описание: The built-in messaging system enables secure, tracked communication between clients and candidates without exposing personal contact information before an offer is accepted.
Критерии приёмки: - Message Interface Access: - Clicking "Message" button anywhere in the Candidate card / profile - Conversation Header shows: - Candidate photo and name - Application status badge (Applied, if applicable) and onboarding status badge (Onboarded / Onboarding) - Job ID and Job Role with Job Start/End Dates info card - Online status indicator - nice to have - Typing indicator - nice to have - Message Thread displays: - All messages in chronological order (newest last) - Clear visual distinction: - Sent messages (right, colored) - Received messages (left, gray) - For each message: - Sender picture - Timestamp - Message delivery confirmed / read with checkmarks - nice to have - Auto-scroll to newest - Message Composition: - Text input field at bottom - Character limit: 2000 - Send button (disabled when empty) - Typing indicator when candidate types - nice to have - Enter to send, Shift+Enter for new line - Conversation Organization: - One thread per candidate per job - Thread continues through all stages - Search within conversation - nice to have - Additional Features: - Unread message count badge - Email notification for new messages (if a message haven’t been read in 1 hour) - nice to have - Add to Task Center - Attach a file option: - Attach icon → Attach a file → browser window to choose a file - Auto-save draft messages - nice to have
3.6.1 (не MVP)¶
3.7 Send Offer Use¶
3.7 Send Offer To Do Preview¶
User Story:
As a client user I want to create and send formal job offers with all necessary details and documents So that candidates receive professional offers integrated with our HR systems
Описание: The Send Offer feature provides a guided workflow for creating comprehensive job offers including terms, scheduling, required documents, and integration with MySolution for placement generation.
Критерии приёмки: - Offer Initiation: - "Send Offer" button available from: - Applications list - Candidate Profile - Matching candidates list - All Candidates list (with additional Choose Job Posting dialog) - Offer Details, once “Send Offer” is clicked: - Header shows: - Candidate photo and name (read-only) - Application status badge (Applied, if applicable) and onboarding status badge (Onboarded / Onboarding) - Job ID, Job Role and Job Start/End Dates info card (read-only) - If a candidate has “Onboarding” status: - Add additional text section “Please note: - This candidate is not yet fully onboarded with Cruits. - Before starting, their contract needs to be arranged with us. - This is a standard process and usually completed quickly. - The proposed start date is pro forma — final confirmation depends on completing these steps. - Please make sure to align with the candidate on this.” - Offer Message: - Simple text box - 1500 character limit (20 minimum) - Employment Terms: - Start date - required, populated from job start date, is editable - End date (optional) - populated from job end date (if any), is editable - Offer Expiration (days) - %i nonzero value - Cancel button - Send Offer button → Offer sent to a candidate immediately - MySolution Integration: - Offer details sent to MySolution on the moment it is accepted - Post-Send: - Pop-up success confirmation message “Your offer has been successfully sent to the candidate. - You will be notified once they respond” - Return to previous page (candidates list / candidate profile / etc) - Candidate status update emails (offer accepted / rejected) - nice to have - Offer Tracking: - In On-going Applications tab in Job Posting “Send Offer” button changes to “Edit Offer” button, and allows to edit and resend an offer - If offer has expired, “Edit Offer” button changes to “Renew Offer”, that allows to edit and resent an offer - Monitor acceptance status - notify once accepted / rejected in Notifications - Expiration countdown info card in On-Going Applications - Validation on click on “Send Offer” button - prevents common errors (start date in the past, end date before start date, etc.)
3.7.1 (не MVP)¶
Описание: Default templates for offers Unique offer tracking number added Add a new offer to “Offer list” Email copy to manager once offer is sent Task Center in Dashboard: %i offers pending → Jobs Page %i offers accepted → Jobs Page %i offers rejected → Jobs Page
3.8 Active Worker Internal Page User¶
3.8 Active Worker Internal Page To Do Preview¶
User Story:
As a client user I want to view detailed information about my active workers So that I can manage current placements and maintain oversight of my workforce
Описание: The Active Worker page provides comprehensive information about a flexworker currently on assignment, similar to the Candidate Profile page but with employment-specific information and without matching scores.
Критерии приёмки: - Access Point: - "Active Workers" section in main navigation - List of current workers - Click worker name or “View Profile” menu button to open details - Page Header: - Same as in simplified candidate profile, but no onboarding status badge (not relevant anymore) - Overview Tab: - Same as in simplified candidate profile but includes: - Job ID, Job Role and Working Dates info card - Action buttons: - Message Worker button → open text conversation - View Placement → pop-up message “Contact Cruits for further assistance” as for MVP - Leave Review → open create review form - Extend Placement → pop-up message “Contact Cruits for further assistance” - End Placement → pop-up message “Contact Cruits for further assistance” - Certificates Tab: - All certificates available - No matching score section (not relevant), just Skills section - Inactive Worker Page - same as Simplified Candidate Profile - Added “Worked with you before - [month year - month year]” info card - Removed onboarding status (not relevant)
3.8.1 (не MVP)¶
3.9 Matching Engine User S¶
3.9 Matching Engine To Do Preview tory: As a system I want to automatically match job requirements with flexworker profiles¶
Описание: The matching engine calculates compatibility between job postings and flexworker profiles using configurable weighted factors. This system runs automatically when jobs are posted or candidate profiles are updated. Google Restricted content You'll need to request access or try a different account to view this preview. Try another account
Критерии приёмки: - Matching Factors: - Skills + Language Match (70% default weight): - Required skills vs candidate skills - Proficiency level consideration - Related skills partial credit - Non-Skill Match (70% default weight): - Industry Match (20% of non-skill match share) - Hours per Week (30%) - Prefferred Position (20%) - Shift Matching (10%) - Availability (10%) - Location/Distance (10%) - Scoring Algorithm: - Each factor scored 0-100 - Weighted average calculation - Final score 0-100% - Real-time calculation - Hard Requirements: - Certain criteria can be mandatory - Missing mandatory = 0% match - Examples: - Must have technical skills - Minimum language level - Configuration Options: - Job-level weight adjustments - Update Triggers: - New job posting - Job requirement changes - Candidate profile updates - Bulk recalculation option - Performance Requirements: - Match calculation < 100ms per candidate - Batch processing for bulk updates - Caching for repeated queries - Transparency: - Score breakdown available - Factor contribution visible - Explanation for low scores - Match scores update within 5 minutes of changes
3.9.1 (не MVP)¶
3.10 MySolution Integration User S¶
3.10 MySolution Integration To Do Preview tory: As a system I want to integrate with MySolution to synchronize candidate data (не MVP)¶
Описание: The MySolution integration handles bi-directional data synchronization for candidates, contracts, and documents. This ensures Cruits remains the user-friendly front-end while MySolution manages back-office compliance.
Критерии приёмки: - Candidate Data Sync TO MySolution: - Personal information: - Full name - Date of birth - Contact details - Address - Skills and certifications - Work experience and education - Placement details - Candidate Data Sync FROM MySolution: - MySolution person ID - Verification status - Placement history - Payroll information - Offer/Contract Flow: - Cruits → MySolution: - Offer details (once offer accepted, no “Offer expiration”) - Start/end dates - Job description - Special terms - MySolution → Cruits: - Placement ID - Placement status - Field Mapping: - Cruits fields → MySolution fields - Data transformation rules? - Default value handling? - Required field validation? - Error Handling: - Failed sync retry logic - Error logging and alerts - Manual sync option - Validation error display - Full audit trail of all sync operations? - Technical Considerations - Performance Requirements - Candidate list load time < 2 seconds for up to 100 candidates - Match score calculation < 200ms per candidate - Filter/sort response < 500ms - Message delivery < 1 second - Support for 10,000+ candidates in database - Lazy loading for large result sets - Data Integration - Real-time sync with MySolution for offers/contracts - Webhook endpoints for MySolution status updates - Document storage service integration - Email/push notification service integration - not MVP - Security & Access Control - Company-scoped data isolation - Audit logging for all job modifications - Browser Compatibility - Edge (latest 2 versions) - Chrome (latest 2 versions) - Safari (latest 2 versions) - Mobile browsers (iOS Safari, Chrome Mobile) - not MVP - Related content - More info - g(p.length) css-6cu6fo" role=listitem> - Job Application, Offer and Placement - Job Application, Offer and Placement - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Candidate Profile and Job Discovery - Candidate Profile and Job Discovery - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Applications, Offers, Placements and Chats - Applications, Offers, Placements and Chats - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - 2 Job Request Viewing, Drafting and Posting - 2 Job Request Viewing, Drafting and Posting - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Worker Registration and Onboarding - Worker Registration and Onboarding - Nadia Albul - g(p.length) css-6cu6fo" role=listitem> - Notifications and Messaging - Notifications and Messaging - Nadia Albul