Overview
After installation, ION Career requires minimal configuration. The app automatically installs custom fields, web forms, and scripts through fixtures. This guide covers how to verify and customize these configurations.Module Information
App Name
ion_careerModule
ION Career
Publisher
ARD
License
MIT
Automatic Fixtures
ION Career uses Frappe’s fixture system to automatically install configurations. These are defined inhooks.py:19-36:
Fixtures are automatically installed during
bench install-app ion_career. You don’t need to manually configure these unless customizing the app.Custom Fields Configuration
The app adds custom fields to two core ERPNext doctypes:Job Opening Fields
Links to a Job Question Set doctype. This field is required when creating job openings.Properties:
- Inserted after:
designation - Link to:
Job Question Set - Module:
ION Career
Job Applicant Fields
Creates a dedicated “Questions” tab in the Job Applicant formProperties:
- Inserted after:
upper_range - Label: “Questions”
Displays the calculated applicant score (0-10 scale)Properties:
- Read-only: Yes
- Inserted after:
applicant_rating - Calculated automatically by
handlers.py:process_job_questions
Stores raw JSON of applicant answers (hidden field)Properties:
- Hidden: Yes
- Used by:
handlers.pyto process answers
Child table showing structured question-answer pairsProperties:
- Child DocType:
Job Applicant Question Answer - Shows: question, fieldname, answer, job_opening
HTML field for custom question rendering in forms
Document Event Hooks
The app registers a document event hook inhooks.py:13-17:
How It Works
Processing
The
process_job_questions handler:- Reads answers from
custom_job_question_answersJSON field - Fetches the associated Job Question Set
- Creates child table entries in
custom_question_answers - Calculates the applicant score
API Endpoints
The app exposes one whitelisted API endpoint for web form integration:get_job_questions
File: api.py:2-18
DocType Configurations
Job Question Set
File:ion_career/doctype/job_question_set/job_question_set.json
Automatically names documents using the title field
Question sets can be renamed after creation
title(Data, unique): Display name of the question setquestions(Table): Child table of Job Question records
- System Manager: Full access (create, read, write, delete)
Job Question
File:ion_career/doctype/job_question/job_question.json
Child table doctype (cannot exist independently)
Allows inline editing in the parent form
question(Data, required): The screening question textfieldname(Data, hidden): Auto-generated field identifierinput_type(Select, default=“Select”): Input type (Checkbox/Select)required(Check, default=0): Whether answer is mandatoryorder(Int): Display order in forms
Job Applicant Question Answer
File:ion_career/doctype/job_applicant_question_answer/
Child table storing individual answers:
Fields:
question(Data): Copy of the question textfieldname(Data): Field identifier from Job Questionanswer(Text): Applicant’s answerjob_opening(Link): Reference to Job Opening
Web Form Configuration
The app includes a web form fixture for public job applications: Name: ION Job ApplicationConfigure settings
- DocType: Job Applicant
- Route:
/ion-job-application(or customize) - Login Required: No (for public applications)
- Allow Edit: No
The web form uses the
get_job_questions API to dynamically load questions based on the selected job opening.Score Calculation Details
The scoring system is implemented inhandlers.py:23-40:
- Each “Yes” answer counts as 1 point
- Total points are normalized to a 0-10 scale
- Formula:
(number_of_yes_answers / total_questions) * 10
- Question Set: 5 questions
- Applicant answers “Yes” to 3 questions
- Score:
(3 / 5) * 10 = 6.0
Validation Rules
The app includes answer validation inhandlers.py:43-62:
This validation function is defined but not currently hooked in
hooks.py. To enable validation, add it to the doc_events configuration:Customization Examples
Custom Scoring Logic
To implement weighted scoring, edithandlers.py:37-38:
Adding Question Types
Extend theinput_type options in job_question.json:36:
handlers.py to handle new types.
Troubleshooting Configuration
Fixtures not applying
Fixtures not applying
Manually reimport fixtures:
Custom fields missing
Custom fields missing
Check module assignment:
- Go to Customize Form
- Select Job Opening or Job Applicant
- Verify custom fields have “ION Career” as module
- Clear cache:
bench --site your-site clear-cache
Scores not calculating
Scores not calculating
Verify:
- Document event hook is registered in
hooks.py:13-17 custom_job_question_answersfield contains valid JSON- Job Opening has a linked Question Set
- Check Error Log for exceptions in
handlers.py
API endpoint not found
API endpoint not found
Ensure:
api.pyhas@frappe.whitelist()decorator- App is properly installed and migrated
- User has permissions to access Job Opening doctype
- Call path is
ion_career.api.get_job_questions(not/api/method/...)
Next Steps
Create Question Sets
Start building screening questions for your job openings
Customize Scoring
Implement weighted or custom scoring algorithms
Extend Fields
Add custom fields or modify existing configurations
API Integration
Build external integrations using the API endpoints