Skip to main content

Recruitment Entity - Job Application with File Attachments

Description

This entity showcases a recruitment management pattern with file handling capabilities and JSON data storage. The Job Application entity demonstrates relationships between job postings and applicants, file upload fields for resumes, status tracking, and flexible JSON storage for screening question responses. This pattern is useful for any application that requires document management, application tracking, and dynamic form responses.

Use Case

Used in a landscape industry recruitment platform to manage job applications. Employers can post jobs, receive applications with cover letters and resumes, track application status through various stages (Submitted, Reviewed, Shortlisted, Rejected, Withdrawn), and store screening question answers in a flexible JSON format.

Key Features

  • Dual relationship structure (job posting and applicant)
  • File upload field with multiple file support and type restrictions
  • Status tracking with predefined workflow states
  • Multi-line text fields for cover letters and notes
  • JSON storage using MonacoEditorField for dynamic screening answers
  • Configurable file privacy settings (public/private)
  • Support for rejection tracking with reasons

JSON Definition

{
"head": {
"name": "Job application",
"key": "job_application",
"pluralisedName": "Job applications",
"allowComments": true,
"allowTasks": true,
"isActive": true
},
"fields": [
{
"label": "Job posting id",
"key": "job_posting_id",
"validateRules": {
"required": true
},
"behaviourOptions": {},
"relationshipOptions": {
"ref": "job_posting"
},
"typeOptions": {
"label": "title"
},
"type": "SingleDropDown"
},
{
"label": "Applicant id",
"key": "applicant_id",
"validateRules": {
"required": true
},
"behaviourOptions": {},
"relationshipOptions": {
"ref": "applicant"
},
"typeOptions": {
"label": "full_name"
},
"type": "SingleDropDown"
},
{
"label": "Status",
"key": "status",
"validateRules": {
"required": true
},
"behaviourOptions": {},
"typeOptions": {
"values": [
"Submitted",
"Reviewed",
"Shortlisted",
"Rejected",
"Withdrawn"
]
},
"type": "OptionSet"
},
{
"label": "Cover letter",
"key": "cover_letter",
"validateRules": {
"required": true
},
"behaviourOptions": {},
"typeOptions": {
"multiLine": true
},
"type": "TextField"
},
{
"label": "Resume",
"key": "resume",
"validateRules": {
"required": true
},
"behaviourOptions": {},
"typeOptions": {
"accept": ["application/pdf", "application/msword"],
"multiple": true,
"maxNumberFiles": 5,
"isPublic": false
},
"type": "FileField"
},
{
"label": "Employer notes",
"key": "employer_notes",
"validateRules": {
"required": false
},
"behaviourOptions": {},
"typeOptions": {
"multiLine": true
},
"type": "TextField"
},
{
"label": "Rejection reason",
"key": "rejection_reason",
"validateRules": {},
"behaviourOptions": {},
"typeOptions": {
"multiLine": true
},
"type": "TextField"
},
{
"label": "Screening answers",
"key": "screening_answers",
"validateRules": {
"required": true
},
"behaviourOptions": {},
"typeOptions": {
"language": "json"
},
"type": "MonacoEditorField"
}
],
"hooks": []
}

Notes

  • The FileField accepts specific MIME types for document security
  • Multiple file uploads are limited to 5 files to prevent abuse
  • The MonacoEditorField provides syntax highlighting and validation for JSON data
  • Files marked as isPublic: false require authentication to access
  • The entity supports both required and optional fields for flexible data collection
  • Multi-line text fields are used for longer text content
  • Status field provides a simple state machine without full workflow definition