Skip to main content

Overview

ION Career is a Frappe application that extends ERPNext’s Human Resources module to add advanced job application management capabilities. It integrates seamlessly with ERPNext’s existing Job Opening and Job Applicant DocTypes while adding custom screening questions and automated scoring functionality.

Component Architecture

The application consists of several key components that work together:

Custom DocTypes

ION Career introduces three custom DocTypes that form the core of the questionnaire system:

Job Question Set

Container for job screening questions

Job Question

Individual questions within a question set

Job Applicant Question Answer

Stores applicant responses to questions

Custom Fields

The app extends ERPNext’s standard DocTypes with custom fields: Job Opening Extensions:
  • custom_job_question_set - Links a question set to a job opening
Job Applicant Extensions:
  • custom_score - Calculated score based on answers
  • custom_job_question_answers - JSON storage of raw answers
  • custom_question_answers - Table of structured answer records
  • custom_questions - Tab break for organizing questions UI

Hooks Configuration

ION Career uses Frappe’s hooks system to intercept document events:
hooks.py
doc_events = {
  "Job Applicant": {
    "after_insert": "ion_career.handlers.process_job_questions"
  }
}
This hook triggers automatically when a new Job Applicant is created, processing their question answers and calculating their score.

Event Handlers

The handlers.py module contains the business logic for processing applications:
  • process_job_questions() - Processes answers after applicant creation
  • validate() - Validates required questions are answered

Data Flow

1

Question Set Creation

Admin creates a Job Question Set with screening questions in the ERPNext desk.
2

Job Opening Configuration

When creating a Job Opening, admin links it to a Question Set via the custom_job_question_set field.
3

Application Submission

Applicant submits job application through Web Form with their answers stored as JSON in custom_job_question_answers.
4

Answer Processing

The after_insert hook triggers process_job_questions() handler which:
  • Parses the JSON answers
  • Creates structured answer records in custom_question_answers table
  • Calculates the applicant’s score
  • Saves the score to custom_score field
5

Review

HR team reviews applicants in ERPNext desk, sorted by score, with all answers visible in a dedicated tab.

Integration Points

Frappe Framework Integration

ION Career leverages core Frappe features:
  • DocType System - All custom entities are standard Frappe DocTypes
  • Hooks - Document event hooks for automated processing
  • Whitelisted APIs - @frappe.whitelist() decorator for web form integration
  • Fixtures - Exports custom fields, web forms, and scripts for installation

ERPNext HR Module Integration

The app extends existing ERPNext functionality:
  • Job Opening - Extended with question set field
  • Job Applicant - Extended with scoring and answers fields
  • Web Forms - Uses ERPNext’s web form system for public applications
ION Career doesn’t modify core ERPNext code. All extensions use Frappe’s customization framework (custom fields, hooks, and fixtures).

Application Structure

ion_career/
├── hooks.py                    # Frappe hooks configuration
├── handlers.py                 # Document event handlers
├── api.py                      # Whitelisted API methods
├── fixtures/                   # Installation fixtures
│   ├── custom_field.json      # Custom field definitions
│   ├── web_form.json          # Web form configuration
│   ├── client_script.json     # Frontend scripts
│   └── server_script.json     # Backend scripts
└── ion_career/
    └── doctype/               # Custom DocTypes
        ├── job_question_set/
        ├── job_question/
        └── job_applicant_question_answer/
The app requires ERPNext to be installed as it extends HR module DocTypes.

Build docs developers (and LLMs) love