Module — Recruitment¶
The full hiring lifecycle: raise and approve a Staff Requisition Form (SRF, the Job entity),
publish the announcement, collect and filter applicants, run technical / HR / other interviews with
weighted scoring, track recruitment progress, and drive the applicant vetting / compliance chain.
It also owns the reusable interview question bank and the staff Evaluation appraisal
sub-system.
Source: NKO.Main/NKO.Main/Controllers/{Jobs,Evaluation,QuestionAnswers}Controller.cs,
NKO.Main/NKO.Main/BAL/{BJobs,BEvaluation,BQuestionAnswer}.cs,
NKO.Lib/NKO.Shared/ViewModels/Job/JobEnums.cs.
Purpose & scope¶
- In scope: SRF creation and approval, the announcement, the applicant grid and its filters, interviews and scoring, recruitment trackers, the applicant vetting chain, the question bank, and competency / objective staff evaluations.
- Out of scope: creating the hired person's employee record (HR —
HumanResource/CreateEmployee), and the SRF / applicant approval chains themselves (documented as part of the generic engine in Procurement Cycle and Permissions). - Database:
NKO_DB(core), contextNKO_DBEntities1. (TheEvaluation*entities live inNKO_DBand are code-owned by this module even though they describe existing employees — hence the cross-reference from HR.)
Key features¶
- SRF creation for core vs project-funded posts (project posts carry
JobProjectswith LOE / budget line / project; core posts auto-setPeriodTo = PeriodFrom + 1 year). - Multi-step SRF approval — Requester → Budget Holder → Head of Department → HR → Finance →
Country Director → Announcement (
JobStatus), routed byNextUserHelper.GetSrfNextUser. - Per-job visibility — a
JobPermissionlist restricts who sees a job's applicants; plus project-scoped view rights and the globalSharedPermissions.SRFarea. - Custom questions — per-job questions (
JobQuestion+JobQuestionAnswer, drop-down or short answer, grouped) and position questions (JobPositionQuestion←PositionQuestion). - Applicant grid — ~20 filters (languages, MS-Office levels, degree, nationality, residence country, gender, DOB range, experience range, salary scale, custom answers, created-date range) with CSV / PDF export.
- Interview management —
TechnicalInterView+ApplicantTechnicalMark; weighted scoring viaJob.TechnicalPercent/HRPercent/OtherPercent; a grading-sheet export. - Recruitment tracker —
RecruitmentTracker+RecruitmentTrackerInterviewper job (recruiter, interview dates, priority, department, new / replacement flag, three interviewer assignments). - Applicant vetting chain — Requester → General Manager → Vetting → References → Compliance
Admin (
ApplicantsStatus). - Question-answer control panel — reusable answer options grouped by
QuestionGroup. - Evaluation — annual competency + objective appraisal; Officer → Manager → HR sign-off; 1–5 degree scoring on elements and objectives; performance level + career-development picklists.
Screens¶
Route = /{Controller}/{Action}; primary screens only. Full list in the Recruitment API reference.
JobsController — /Jobs/*¶
| Feature | Route | View | Permission key |
|---|---|---|---|
| Announced jobs | / |
Jobs/ |
Jobs |
| Staff requisition list | / |
SRF. |
Jobs |
| SRF create / edit / detail | /, /, / |
Create., SRFEdit., SRFDetails. |
Jobs, Jobs |
| Job detail (announcement) | / |
Details. |
Jobs |
| Applicants for a job / all applicants | /, / |
Applicants., All |
Jobs, Jobs |
| Interviews list / single | /, / |
Interviews., Interview. |
Jobs, Jobs |
| Technical interview | / |
Technical |
Jobs |
| Position questions | / |
Position |
Jobs |
| Recruitment tracker(s) | /, / |
Tracker., All |
Jobs, Jobs |
| Reference detail | / |
Reference |
Jobs |
| Grading-sheet / PDF export | /, / |
(files) | Jobs, Jobs |
EvaluationController — /Evaluation/*¶
| Feature | Route | View | Permission key |
|---|---|---|---|
| Evaluations list | / |
Evaluation/ |
Evaluation |
| Create / edit / detail | /, /, / |
Create., Edit, Details. |
Evaluation, Evaluation, Evaluation |
| Objectives / degree scoring | /, /, / |
_*. |
Evaluation |
| Evaluation elements / position elements | /, /, /, / |
*. |
Evaluation, Evaluation |
QuestionAnswerController — /QuestionAnswer/*¶
File name and class name disagree
The file is QuestionAnswers**Controller**.cs (plural) but the class inside it is
QuestionAnswer**Controller** (singular). MVC routes by class name, so the live prefix is
/QuestionAnswer, not /QuestionAnswers. EvidenceController.cs has the same mismatch in the
opposite direction — the class there is EvidencesController, so its routes are /Evidences/*.
| Feature | Route | Permission key |
|---|---|---|
| Answer-option bank (list / create / edit / delete / detail) | /, /, … |
Job |
Business logic¶
| Class | File | Responsibility & notable logic |
|---|---|---|
BJobs |
NKO. (~2690 ln — the largest recruitment BAL) |
Create / Edit — build a Job (Status, Next); non-core → rebuild Job; the Edit(Job, overload rebuilds Job. Get — visibility: global Common ⇒ all; else project-scoped App; else "my staff" + any role slot on the record. SRF workflow — Set (core → WaitingForHeadOfDept, non-core → WaitingForBudgetHolder), Set, Set, Set; each validates Next + the expected Status, sets the role's sign fields, computes the next user via _next, notifies + e-mails. Applicant vetting — Set, Set. Interviews — Create, Update, Get combines the three interviewer pools with Job. / HRPercent / Other. Trackers — Get, Get, Get. |
BEvaluation |
NKO. (~720 ln) |
Create(Evaluation, — Status, Next; seeds one Evaluations per applicable Evaluation (Level). Scoring — Edit writes Hr / Manager / Officer by Evaluation; Edit writes Manager / Emp. Objectives — Add / Edit / Remove (Evaluation ∈ Objective / PerformanceFactor / Goal / NextGoal). Picklists — Get, Get, Get, Get. Workflow — Set (Draft → WaitingForOfficer; requires ≥ 1 objective of each area + next dates + ≥ 1 career item), Set (every officer degree 1–5 → WaitingForManager), Set (→ WaitingForHR), Set (→ Completed). |
BQuestion |
NKO. (~135 ln) |
Reusable answer-option bank for job questions (Job). Paged, sortable, grouped by Question; Create / Edit / Delete over {Answer. |
Data¶
- Jobs / SRF:
Job(position, qty, gender, contract type, period, justification, salary / currency,IsCore, per-role sign fields,StatusId,NextUserId,TechnicalPercent/HRPercent/OtherPercent),JobProjects,JobPermission,JobQuestion,JobAnswers,JobQuestionAnswer,JobPositionQuestion,JobSalaryScale,PositionQuestion. - Applicants / interviews:
Applicants,ApplicantTechnicalMark,TechnicalInterView,RecruitmentTracker,RecruitmentTrackerInterview. - Evaluation:
Evaluation,EvaluationElement,EvaluationElementType,EvaluationExCareer,EvaluationObjective,EvaluationsDegree,EvaluationType. - Public entry: applicants and references can be submitted anonymously through
/Apps/ApplyJoband/Apps/ApplyReference.
Full column detail: Recruitment database.
Permissions¶
Distinct keys: JobsIndex, JobsInterview, JobsApplicants, JobsAllApplicants, JobsDetails,
JobsTracker, JobsAllTrackers, JobsSRF, JobsSRFDetails, JobsCreate, JobsDelete,
JobsDeleteQuestion, JobsAddComment, JobsExport, JobsCreateAttachment; EvaluationIndex,
EvaluationCreate, EvaluationEdit, EvaluationDetails, EvaluationDelete, EvaluationElement,
EvaluationAddElement; JobControlPanel. Data scoping: SharedPermissions.SRF = 7;
workflow areas Areas.{SRF = 14, JobApplication = 4, Evaluation = 13}.
Screenshots¶
Announcements / published jobs — /Jobs:

Staff Requisition Forms — /Jobs/SRF:

Applicant grid and its filter sidebar — /Jobs/Applicants?id={jobId} (applicant names masked):

Staff Evaluation requests — /Evaluation (no evaluation cycle open at capture time):

Related¶
- Permissions — how the SRF and applicant chains resolve each approver.
- HR module — the hired applicant becomes an employee;
Evaluation*describes existing staff. - Recruitment API · Recruitment database.