You've already forked HR-atlase-vertesana
Import UAPF package
Import UAPF package: HR-atlase-vertesana-ProcessGit-v0.1.1.uapf
This commit is contained in:
87
algorithms/candidate-profiler.card.yaml
Normal file
87
algorithms/candidate-profiler.card.yaml
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
kind: uapf.algorithm.card
|
||||||
|
id: algo.openhr.candidate_profiler
|
||||||
|
version: "0.1.0"
|
||||||
|
name: "OpenHR kandidāta daudzdimensionālais profilētājs"
|
||||||
|
intent: >-
|
||||||
|
Izvērtēt tikai ar amatu saistītus kandidāta pierādījumus un izveidot
|
||||||
|
profesionālo, prasmju, darba uzvedības un riska profilu HR speciālista
|
||||||
|
strukturētai pārskatīšanai. Algoritms nepieņem nodarbinātības lēmumu.
|
||||||
|
algorithm_kind: classifier
|
||||||
|
determinism: learned
|
||||||
|
side_effects: external_call
|
||||||
|
|
||||||
|
io:
|
||||||
|
inputs:
|
||||||
|
- id: vacancy_profile
|
||||||
|
type: object
|
||||||
|
schema: schemas/vacancy-profile.schema.json
|
||||||
|
- id: pseudonymous_candidate_id
|
||||||
|
type: string
|
||||||
|
- id: redacted_cv_text
|
||||||
|
type: string
|
||||||
|
- id: structured_questionnaire
|
||||||
|
type: object
|
||||||
|
outputs:
|
||||||
|
- id: candidate_profile
|
||||||
|
type: object
|
||||||
|
schema: schemas/candidate-profile-output.schema.json
|
||||||
|
|
||||||
|
implementation:
|
||||||
|
type: external
|
||||||
|
medium: http_api
|
||||||
|
uri: "processgit://AI_Sandbox/HR-atlase-vertesana/services/candidate-profiler/v1"
|
||||||
|
hash: "sha256:0000000000000000000000000000000000000000000000000000000000000000"
|
||||||
|
runtime:
|
||||||
|
method: POST
|
||||||
|
path: /evaluate
|
||||||
|
timeoutSeconds: 90
|
||||||
|
contentType: application/json
|
||||||
|
|
||||||
|
owners:
|
||||||
|
- type: organization
|
||||||
|
id: algomation-ai
|
||||||
|
contact: info@algomation.io
|
||||||
|
|
||||||
|
lifecycle:
|
||||||
|
status: draft
|
||||||
|
maturity: proof-of-concept
|
||||||
|
|
||||||
|
confidence:
|
||||||
|
type: probability
|
||||||
|
threshold: 0.70
|
||||||
|
below_threshold: enhanced_human_review
|
||||||
|
|
||||||
|
failure_mode:
|
||||||
|
action: stop_and_request_human_review
|
||||||
|
retryable: true
|
||||||
|
maximumRetries: 1
|
||||||
|
|
||||||
|
limitations:
|
||||||
|
- "Rezultāts ir atkarīgs no iesniegto pierādījumu pilnīguma un kvalitātes."
|
||||||
|
- "Darba uzvedības profils nav personības, psiholoģisks vai medicīnisks novērtējums."
|
||||||
|
- "Algoritms nedrīkst izmantot aizsargātas vai darbam nebūtiskas pazīmes."
|
||||||
|
- "Algoritms nedrīkst pieņemt galīgo atlases lēmumu."
|
||||||
|
|
||||||
|
validation:
|
||||||
|
last_validated: "2026-07-24"
|
||||||
|
methodology: "POC schema, deterministic fixtures and mandatory human review"
|
||||||
|
test_suite: tests/candidate-profiler-tests.yaml
|
||||||
|
metrics:
|
||||||
|
schemaValidityTarget: 1.0
|
||||||
|
evidenceCoverageTarget: 0.85
|
||||||
|
|
||||||
|
audit:
|
||||||
|
log_inputs: metadata_only
|
||||||
|
log_outputs: true
|
||||||
|
retention: P5Y
|
||||||
|
|
||||||
|
privacy:
|
||||||
|
personalData: true
|
||||||
|
technique: pseudonymisation_and_redaction
|
||||||
|
reIdentificationRisk: low
|
||||||
|
|
||||||
|
risk:
|
||||||
|
aiActRiskClass: high
|
||||||
|
domain: employment
|
||||||
|
humanOversight: mandatory
|
||||||
|
consequentialDecisionAllowed: false
|
||||||
111
bpmn/candidate-selection-evaluation.bpmn
Normal file
111
bpmn/candidate-selection-evaluation.bpmn
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
|
||||||
|
xmlns:uapf="https://uapf.dev/bpmn/v2.4"
|
||||||
|
id="Definitions_OpenHR_CandidateEvaluation"
|
||||||
|
targetNamespace="https://processgit.org/AI_Sandbox/HR-atlase-vertesana">
|
||||||
|
<bpmn:process id="Process_CandidateSelectionEvaluation"
|
||||||
|
name="Candidate selection evaluation"
|
||||||
|
isExecutable="true">
|
||||||
|
<bpmn:startEvent id="Start_ApplicationReceived" name="Application received">
|
||||||
|
<bpmn:outgoing>Flow_01</bpmn:outgoing>
|
||||||
|
</bpmn:startEvent>
|
||||||
|
|
||||||
|
<bpmn:userTask id="Task_RegisterApplication" name="Register application">
|
||||||
|
<bpmn:incoming>Flow_01</bpmn:incoming><bpmn:outgoing>Flow_02</bpmn:outgoing>
|
||||||
|
</bpmn:userTask>
|
||||||
|
|
||||||
|
<bpmn:serviceTask id="Task_RedactInput" name="Prepare pseudonymous evaluation input">
|
||||||
|
<bpmn:incoming>Flow_02</bpmn:incoming><bpmn:outgoing>Flow_03</bpmn:outgoing>
|
||||||
|
</bpmn:serviceTask>
|
||||||
|
|
||||||
|
<bpmn:businessRuleTask id="Task_InputAdmissibility" name="DMN: Check input admissibility">
|
||||||
|
<bpmn:incoming>Flow_03</bpmn:incoming><bpmn:outgoing>Flow_04</bpmn:outgoing>
|
||||||
|
</bpmn:businessRuleTask>
|
||||||
|
|
||||||
|
<bpmn:exclusiveGateway id="Gateway_Admissibility" name="Input admissible?">
|
||||||
|
<bpmn:incoming>Flow_04</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_Profile</bpmn:outgoing>
|
||||||
|
<bpmn:outgoing>Flow_RequestInfo</bpmn:outgoing>
|
||||||
|
<bpmn:outgoing>Flow_ManualOnly</bpmn:outgoing>
|
||||||
|
</bpmn:exclusiveGateway>
|
||||||
|
|
||||||
|
<bpmn:userTask id="Task_RequestInformation" name="Request missing information">
|
||||||
|
<bpmn:incoming>Flow_RequestInfo</bpmn:incoming><bpmn:outgoing>Flow_EndInfo</bpmn:outgoing>
|
||||||
|
</bpmn:userTask>
|
||||||
|
<bpmn:endEvent id="End_WaitingInformation" name="Waiting for information">
|
||||||
|
<bpmn:incoming>Flow_EndInfo</bpmn:incoming>
|
||||||
|
</bpmn:endEvent>
|
||||||
|
|
||||||
|
<bpmn:userTask id="Task_DataProtectionReview" name="Manual data protection review">
|
||||||
|
<bpmn:incoming>Flow_ManualOnly</bpmn:incoming><bpmn:outgoing>Flow_ToHumanReview</bpmn:outgoing>
|
||||||
|
</bpmn:userTask>
|
||||||
|
|
||||||
|
<bpmn:serviceTask id="Task_ProfileCandidate"
|
||||||
|
name="External algorithm: generate candidate profile"
|
||||||
|
uapf:algorithmCardRef="algo.openhr.candidate_profiler">
|
||||||
|
<bpmn:incoming>Flow_Profile</bpmn:incoming><bpmn:outgoing>Flow_05</bpmn:outgoing>
|
||||||
|
<bpmn:ioSpecification>
|
||||||
|
<bpmn:dataInput id="Profile_in_vacancy_profile" name="vacancy_profile : object"/>
|
||||||
|
<bpmn:dataInput id="Profile_in_candidate_id" name="pseudonymous_candidate_id : string"/>
|
||||||
|
<bpmn:dataInput id="Profile_in_cv" name="redacted_cv_text : string"/>
|
||||||
|
<bpmn:dataInput id="Profile_in_questionnaire" name="structured_questionnaire : object"/>
|
||||||
|
<bpmn:dataOutput id="Profile_out_profile" name="candidate_profile : object"/>
|
||||||
|
<bpmn:inputSet>
|
||||||
|
<bpmn:dataInputRefs>Profile_in_vacancy_profile</bpmn:dataInputRefs>
|
||||||
|
<bpmn:dataInputRefs>Profile_in_candidate_id</bpmn:dataInputRefs>
|
||||||
|
<bpmn:dataInputRefs>Profile_in_cv</bpmn:dataInputRefs>
|
||||||
|
<bpmn:dataInputRefs>Profile_in_questionnaire</bpmn:dataInputRefs>
|
||||||
|
</bpmn:inputSet>
|
||||||
|
<bpmn:outputSet><bpmn:dataOutputRefs>Profile_out_profile</bpmn:dataOutputRefs></bpmn:outputSet>
|
||||||
|
</bpmn:ioSpecification>
|
||||||
|
</bpmn:serviceTask>
|
||||||
|
|
||||||
|
<bpmn:businessRuleTask id="Task_ReviewPriority" name="DMN: Determine human-review priority">
|
||||||
|
<bpmn:incoming>Flow_05</bpmn:incoming><bpmn:outgoing>Flow_06</bpmn:outgoing>
|
||||||
|
</bpmn:businessRuleTask>
|
||||||
|
|
||||||
|
<bpmn:callActivity id="Task_ExceptionCase" name="Open exception review case" calledElement="Case_CandidateReview">
|
||||||
|
<bpmn:incoming>Flow_06</bpmn:incoming><bpmn:outgoing>Flow_07</bpmn:outgoing>
|
||||||
|
</bpmn:callActivity>
|
||||||
|
|
||||||
|
<bpmn:userTask id="Task_HumanReview" name="HR reviews profile and evidence">
|
||||||
|
<bpmn:incoming>Flow_07</bpmn:incoming>
|
||||||
|
<bpmn:incoming>Flow_ToHumanReview</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_08</bpmn:outgoing>
|
||||||
|
</bpmn:userTask>
|
||||||
|
|
||||||
|
<bpmn:userTask id="Task_RecordDecision" name="Record accountable human decision">
|
||||||
|
<bpmn:incoming>Flow_08</bpmn:incoming><bpmn:outgoing>Flow_09</bpmn:outgoing>
|
||||||
|
</bpmn:userTask>
|
||||||
|
|
||||||
|
<bpmn:serviceTask id="Task_WriteAudit" name="Write immutable assessment audit event">
|
||||||
|
<bpmn:incoming>Flow_09</bpmn:incoming><bpmn:outgoing>Flow_10</bpmn:outgoing>
|
||||||
|
</bpmn:serviceTask>
|
||||||
|
|
||||||
|
<bpmn:endEvent id="End_AssessmentCompleted" name="Assessment completed">
|
||||||
|
<bpmn:incoming>Flow_10</bpmn:incoming>
|
||||||
|
</bpmn:endEvent>
|
||||||
|
|
||||||
|
<bpmn:sequenceFlow id="Flow_01" sourceRef="Start_ApplicationReceived" targetRef="Task_RegisterApplication"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_02" sourceRef="Task_RegisterApplication" targetRef="Task_RedactInput"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_03" sourceRef="Task_RedactInput" targetRef="Task_InputAdmissibility"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_04" sourceRef="Task_InputAdmissibility" targetRef="Gateway_Admissibility"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_Profile" sourceRef="Gateway_Admissibility" targetRef="Task_ProfileCandidate">
|
||||||
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">status = "ADMISSIBLE"</bpmn:conditionExpression>
|
||||||
|
</bpmn:sequenceFlow>
|
||||||
|
<bpmn:sequenceFlow id="Flow_RequestInfo" sourceRef="Gateway_Admissibility" targetRef="Task_RequestInformation">
|
||||||
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">status = "INCOMPLETE" or status = "NOT_ADMISSIBLE"</bpmn:conditionExpression>
|
||||||
|
</bpmn:sequenceFlow>
|
||||||
|
<bpmn:sequenceFlow id="Flow_ManualOnly" sourceRef="Gateway_Admissibility" targetRef="Task_DataProtectionReview">
|
||||||
|
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">status = "REDACTION_REQUIRED"</bpmn:conditionExpression>
|
||||||
|
</bpmn:sequenceFlow>
|
||||||
|
<bpmn:sequenceFlow id="Flow_EndInfo" sourceRef="Task_RequestInformation" targetRef="End_WaitingInformation"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_ToHumanReview" sourceRef="Task_DataProtectionReview" targetRef="Task_HumanReview"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_05" sourceRef="Task_ProfileCandidate" targetRef="Task_ReviewPriority"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_06" sourceRef="Task_ReviewPriority" targetRef="Task_ExceptionCase"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_07" sourceRef="Task_ExceptionCase" targetRef="Task_HumanReview"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_08" sourceRef="Task_HumanReview" targetRef="Task_RecordDecision"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_09" sourceRef="Task_RecordDecision" targetRef="Task_WriteAudit"/>
|
||||||
|
<bpmn:sequenceFlow id="Flow_10" sourceRef="Task_WriteAudit" targetRef="End_AssessmentCompleted"/>
|
||||||
|
</bpmn:process>
|
||||||
|
</bpmn:definitions>
|
||||||
19
cmmn/candidate-review-case.cmmn
Normal file
19
cmmn/candidate-review-case.cmmn
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<cmmn:definitions xmlns:cmmn="http://www.omg.org/spec/CMMN/20151109/MODEL"
|
||||||
|
id="Definitions_CandidateReview"
|
||||||
|
targetNamespace="https://processgit.org/AI_Sandbox/HR-atlase-vertesana/cmmn">
|
||||||
|
<cmmn:case id="Case_CandidateReview" name="Candidate exception and review case">
|
||||||
|
<cmmn:casePlanModel id="CasePlanModel_CandidateReview" name="Candidate review">
|
||||||
|
<cmmn:planItem id="PI_VerifyEvidence" definitionRef="HT_VerifyEvidence"/>
|
||||||
|
<cmmn:planItem id="PI_IndependentReview" definitionRef="HT_IndependentReview"/>
|
||||||
|
<cmmn:planItem id="PI_DataProtectionReview" definitionRef="HT_DataProtectionReview"/>
|
||||||
|
<cmmn:planItem id="PI_RequestInformation" definitionRef="HT_RequestInformation"/>
|
||||||
|
<cmmn:planItem id="PI_Reconsideration" definitionRef="HT_Reconsideration"/>
|
||||||
|
<cmmn:humanTask id="HT_VerifyEvidence" name="Verify evidence inconsistencies" isBlocking="true"/>
|
||||||
|
<cmmn:humanTask id="HT_IndependentReview" name="Independent assessment for low confidence" isBlocking="true"/>
|
||||||
|
<cmmn:humanTask id="HT_DataProtectionReview" name="Review prohibited-attribute exposure" isBlocking="true"/>
|
||||||
|
<cmmn:humanTask id="HT_RequestInformation" name="Request missing candidate evidence" isBlocking="true"/>
|
||||||
|
<cmmn:humanTask id="HT_Reconsideration" name="Handle correction or reconsideration request" isBlocking="true"/>
|
||||||
|
</cmmn:casePlanModel>
|
||||||
|
</cmmn:case>
|
||||||
|
</cmmn:definitions>
|
||||||
39
dmn/01-input-admissibility.dmn
Normal file
39
dmn/01-input-admissibility.dmn
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/"
|
||||||
|
xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/"
|
||||||
|
xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
|
||||||
|
id="Definitions_InputAdmissibility"
|
||||||
|
name="Candidate input admissibility"
|
||||||
|
namespace="https://processgit.org/AI_Sandbox/HR-atlase-vertesana/dmn">
|
||||||
|
<decision id="Decision_InputAdmissibility" name="Input admissibility">
|
||||||
|
<decisionTable id="DecisionTable_InputAdmissibility" hitPolicy="FIRST">
|
||||||
|
<input id="Input_Consent" label="Consent confirmed">
|
||||||
|
<inputExpression id="Expr_Consent" typeRef="boolean"><text>consentConfirmed</text></inputExpression>
|
||||||
|
</input>
|
||||||
|
<input id="Input_Cv" label="CV text present">
|
||||||
|
<inputExpression id="Expr_Cv" typeRef="boolean"><text>cvTextPresent</text></inputExpression>
|
||||||
|
</input>
|
||||||
|
<input id="Input_Protected" label="Prohibited attributes detected">
|
||||||
|
<inputExpression id="Expr_Protected" typeRef="boolean"><text>prohibitedAttributesDetected</text></inputExpression>
|
||||||
|
</input>
|
||||||
|
<output id="Output_Status" label="Status" name="status" typeRef="string"/>
|
||||||
|
<output id="Output_Action" label="Action" name="action" typeRef="string"/>
|
||||||
|
<rule id="Rule_NoConsent">
|
||||||
|
<inputEntry><text>false</text></inputEntry><inputEntry><text>-</text></inputEntry><inputEntry><text>-</text></inputEntry>
|
||||||
|
<outputEntry><text>"NOT_ADMISSIBLE"</text></outputEntry><outputEntry><text>"REQUEST_CONSENT"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
<rule id="Rule_NoCv">
|
||||||
|
<inputEntry><text>true</text></inputEntry><inputEntry><text>false</text></inputEntry><inputEntry><text>-</text></inputEntry>
|
||||||
|
<outputEntry><text>"INCOMPLETE"</text></outputEntry><outputEntry><text>"REQUEST_INFORMATION"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
<rule id="Rule_Protected">
|
||||||
|
<inputEntry><text>true</text></inputEntry><inputEntry><text>true</text></inputEntry><inputEntry><text>true</text></inputEntry>
|
||||||
|
<outputEntry><text>"REDACTION_REQUIRED"</text></outputEntry><outputEntry><text>"REDACT_AND_RECHECK"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
<rule id="Rule_Admissible">
|
||||||
|
<inputEntry><text>true</text></inputEntry><inputEntry><text>true</text></inputEntry><inputEntry><text>false</text></inputEntry>
|
||||||
|
<outputEntry><text>"ADMISSIBLE"</text></outputEntry><outputEntry><text>"PROFILE"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
</decisionTable>
|
||||||
|
</decision>
|
||||||
|
</definitions>
|
||||||
46
dmn/02-review-priority.dmn
Normal file
46
dmn/02-review-priority.dmn
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/"
|
||||||
|
id="Definitions_ReviewPriority"
|
||||||
|
name="Candidate review priority"
|
||||||
|
namespace="https://processgit.org/AI_Sandbox/HR-atlase-vertesana/dmn">
|
||||||
|
<decision id="Decision_ReviewPriority" name="Review priority">
|
||||||
|
<decisionTable id="DecisionTable_ReviewPriority" hitPolicy="FIRST">
|
||||||
|
<input id="Input_Confidence" label="Confidence">
|
||||||
|
<inputExpression id="Expr_Confidence" typeRef="number"><text>confidence</text></inputExpression>
|
||||||
|
</input>
|
||||||
|
<input id="Input_Gaps" label="Material evidence gaps">
|
||||||
|
<inputExpression id="Expr_Gaps" typeRef="boolean"><text>materialEvidenceGaps</text></inputExpression>
|
||||||
|
</input>
|
||||||
|
<input id="Input_Conflict" label="Material inconsistencies">
|
||||||
|
<inputExpression id="Expr_Conflict" typeRef="boolean"><text>materialInconsistencies</text></inputExpression>
|
||||||
|
</input>
|
||||||
|
<input id="Input_Leakage" label="Prohibited attribute leakage">
|
||||||
|
<inputExpression id="Expr_Leakage" typeRef="boolean"><text>prohibitedAttributeLeakage</text></inputExpression>
|
||||||
|
</input>
|
||||||
|
<output id="Output_Recommendation" name="recommendation" typeRef="string"/>
|
||||||
|
<output id="Output_Priority" name="priority" typeRef="string"/>
|
||||||
|
<output id="Output_Check" name="requiredCheck" typeRef="string"/>
|
||||||
|
|
||||||
|
<rule id="Rule_Leakage">
|
||||||
|
<inputEntry><text>-</text></inputEntry><inputEntry><text>-</text></inputEntry><inputEntry><text>-</text></inputEntry><inputEntry><text>true</text></inputEntry>
|
||||||
|
<outputEntry><text>"MANUAL_ONLY"</text></outputEntry><outputEntry><text>"URGENT"</text></outputEntry><outputEntry><text>"DATA_PROTECTION_REVIEW"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
<rule id="Rule_Conflict">
|
||||||
|
<inputEntry><text>-</text></inputEntry><inputEntry><text>-</text></inputEntry><inputEntry><text>true</text></inputEntry><inputEntry><text>false</text></inputEntry>
|
||||||
|
<outputEntry><text>"ENHANCED_REVIEW"</text></outputEntry><outputEntry><text>"HIGH"</text></outputEntry><outputEntry><text>"VERIFY_INCONSISTENCIES"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
<rule id="Rule_Gaps">
|
||||||
|
<inputEntry><text>-</text></inputEntry><inputEntry><text>true</text></inputEntry><inputEntry><text>false</text></inputEntry><inputEntry><text>false</text></inputEntry>
|
||||||
|
<outputEntry><text>"REQUEST_INFORMATION"</text></outputEntry><outputEntry><text>"HIGH"</text></outputEntry><outputEntry><text>"COLLECT_MISSING_EVIDENCE"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
<rule id="Rule_LowConfidence">
|
||||||
|
<inputEntry><text>< 0.70</text></inputEntry><inputEntry><text>false</text></inputEntry><inputEntry><text>false</text></inputEntry><inputEntry><text>false</text></inputEntry>
|
||||||
|
<outputEntry><text>"ENHANCED_REVIEW"</text></outputEntry><outputEntry><text>"HIGH"</text></outputEntry><outputEntry><text>"INDEPENDENT_HUMAN_ASSESSMENT"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
<rule id="Rule_Normal">
|
||||||
|
<inputEntry><text>>= 0.70</text></inputEntry><inputEntry><text>false</text></inputEntry><inputEntry><text>false</text></inputEntry><inputEntry><text>false</text></inputEntry>
|
||||||
|
<outputEntry><text>"NORMAL_REVIEW"</text></outputEntry><outputEntry><text>"NORMAL"</text></outputEntry><outputEntry><text>"STRUCTURED_HR_REVIEW"</text></outputEntry>
|
||||||
|
</rule>
|
||||||
|
</decisionTable>
|
||||||
|
</decision>
|
||||||
|
</definitions>
|
||||||
11
docs/CHANGELOG.md
Normal file
11
docs/CHANGELOG.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 0.1.0 — 2026-07-24
|
||||||
|
|
||||||
|
- sākotnējais kandidātu izvērtēšanas BPMN process;
|
||||||
|
- ievades pieļaujamības un pārskatīšanas prioritātes DMN tabulas;
|
||||||
|
- CMMN izņēmumu un cilvēka pārskatīšanas lieta;
|
||||||
|
- ārējā kandidātu profilētāja Algorithm Card;
|
||||||
|
- OpenHR resursu un spēju kartējums;
|
||||||
|
- ievades un izvades JSON shēmas;
|
||||||
|
- testa piemēri.
|
||||||
58
examples/candidate-input.example.json
Normal file
58
examples/candidate-input.example.json
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"vacancy": {
|
||||||
|
"id": "vacancy-demo-001",
|
||||||
|
"title": "Senior IT / kiberdrošības projektu vadītājs",
|
||||||
|
"description": "Vada sarežģītus IT un kiberdrošības projektus.",
|
||||||
|
"profile": {
|
||||||
|
"roleTitle": "Senior IT / kiberdrošības projektu vadītājs",
|
||||||
|
"mandatoryRequirements": [
|
||||||
|
{
|
||||||
|
"id": "experience",
|
||||||
|
"description": "Vismaz 5 gadu atbilstoša pieredze"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "project-management",
|
||||||
|
"description": "Pieredze sarežģītu projektu vadībā"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "cybersecurity",
|
||||||
|
"description": "Kiberdrošības un riska pārvaldības izpratne"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"profileDimensions": [
|
||||||
|
{
|
||||||
|
"id": "professional",
|
||||||
|
"name": "Profesionālais profils"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "skills",
|
||||||
|
"name": "Prasmju profils"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "behavioural",
|
||||||
|
"name": "Darba uzvedības profils"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "risk",
|
||||||
|
"name": "Riska un pierādījumu profils"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"candidate": {
|
||||||
|
"id": "candidate-pseudo-001",
|
||||||
|
"displayName": "Kandidāts 001"
|
||||||
|
},
|
||||||
|
"application": {
|
||||||
|
"consentConfirmed": true,
|
||||||
|
"cvText": "10 gadu pieredze IT un kiberdrošības projektu vadībā...",
|
||||||
|
"questionnaire": {
|
||||||
|
"largestProject": "Daudzorganizāciju drošības transformācijas programma",
|
||||||
|
"riskExample": "Riska reģistrs, kontroles un eskalācijas kārtība",
|
||||||
|
"stakeholderExample": "Vadības, IT, drošības un piegādātāju koordinācija"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"reviewerContext": {
|
||||||
|
"language": "lv"
|
||||||
|
}
|
||||||
|
}
|
||||||
96
examples/candidate-profile-output.example.json
Normal file
96
examples/candidate-profile-output.example.json
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"algorithm": {
|
||||||
|
"id": "algo.openhr.candidate_profiler",
|
||||||
|
"version": "0.1.0"
|
||||||
|
},
|
||||||
|
"professionalProfile": {
|
||||||
|
"cybersecurityCompetence": {
|
||||||
|
"score": 82,
|
||||||
|
"confidence": 0.81,
|
||||||
|
"evidence": [
|
||||||
|
"cv:security-program"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"itProjectManagement": {
|
||||||
|
"score": 88,
|
||||||
|
"confidence": 0.86,
|
||||||
|
"evidence": [
|
||||||
|
"questionnaire:largestProject"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"governanceAndRisk": {
|
||||||
|
"score": 79,
|
||||||
|
"confidence": 0.78,
|
||||||
|
"evidence": [
|
||||||
|
"questionnaire:riskExample"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"stakeholderManagement": {
|
||||||
|
"score": 84,
|
||||||
|
"confidence": 0.8,
|
||||||
|
"evidence": [
|
||||||
|
"questionnaire:stakeholderExample"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"skillsProfile": {
|
||||||
|
"technicalSkills": [
|
||||||
|
"cybersecurity governance",
|
||||||
|
"risk management",
|
||||||
|
"enterprise IT"
|
||||||
|
],
|
||||||
|
"managementSkills": [
|
||||||
|
"programme delivery",
|
||||||
|
"stakeholder management"
|
||||||
|
],
|
||||||
|
"missingRequiredSkills": [],
|
||||||
|
"transferableSkills": [
|
||||||
|
"consulting",
|
||||||
|
"business analysis"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"behaviouralProfile": {
|
||||||
|
"structuredWork": {
|
||||||
|
"score": 81,
|
||||||
|
"basis": "Evidence-backed work examples"
|
||||||
|
},
|
||||||
|
"decisionMaking": {
|
||||||
|
"score": 77,
|
||||||
|
"basis": "Risk and escalation example"
|
||||||
|
},
|
||||||
|
"collaboration": {
|
||||||
|
"score": 83,
|
||||||
|
"basis": "Cross-functional stakeholder example"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"riskProfile": {
|
||||||
|
"evidenceGaps": [
|
||||||
|
"Certification evidence not attached"
|
||||||
|
],
|
||||||
|
"claimInconsistencies": [],
|
||||||
|
"prohibitedAttributeLeakage": false,
|
||||||
|
"roleMismatchRisks": [],
|
||||||
|
"confidenceLimitations": [
|
||||||
|
"No structured interview evidence"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"recommendation": "NORMAL_REVIEW",
|
||||||
|
"confidence": 0.79,
|
||||||
|
"reasons": [
|
||||||
|
"Strong role-related project evidence",
|
||||||
|
"Human verification of certifications required"
|
||||||
|
],
|
||||||
|
"requiredHumanChecks": [
|
||||||
|
"Verify employment chronology",
|
||||||
|
"Verify certifications"
|
||||||
|
],
|
||||||
|
"limitations": [
|
||||||
|
"Profile is based on CV and questionnaire only"
|
||||||
|
],
|
||||||
|
"evidenceReferences": [
|
||||||
|
{
|
||||||
|
"id": "cv:security-program",
|
||||||
|
"source": "redacted_cv_text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
8
metadata/lifecycle.yaml
Normal file
8
metadata/lifecycle.yaml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
status: draft
|
||||||
|
version: 0.1.1
|
||||||
|
maturity: proof-of-concept
|
||||||
|
firstPublished: '2026-07-24'
|
||||||
|
lastModified: '2026-07-24'
|
||||||
|
changeControl:
|
||||||
|
model: git-review
|
||||||
|
requiresHumanApproval: true
|
||||||
11
metadata/ownership.yaml
Normal file
11
metadata/ownership.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
owners:
|
||||||
|
- type: team
|
||||||
|
id: openhr-poc
|
||||||
|
contact: info@algomation.io
|
||||||
|
- type: role
|
||||||
|
id: hr-process-owner
|
||||||
|
contact: info@algomation.io
|
||||||
|
accountability:
|
||||||
|
finalDecisionOwner: hr-process-owner
|
||||||
|
algorithmOwner: openhr-poc
|
||||||
|
dataProtectionReviewer: data-protection-reviewer
|
||||||
61
policies/candidate-evaluation-policy.yaml
Normal file
61
policies/candidate-evaluation-policy.yaml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
kind: openhr.candidate-evaluation.policy
|
||||||
|
id: policy.hr.candidate-evaluation.poc
|
||||||
|
version: "0.1.0"
|
||||||
|
|
||||||
|
purpose:
|
||||||
|
allowed:
|
||||||
|
- assess_job_related_evidence
|
||||||
|
- identify_evidence_gaps
|
||||||
|
- create_review_priority
|
||||||
|
- support_structured_human_review
|
||||||
|
prohibited:
|
||||||
|
- infer_medical_condition
|
||||||
|
- infer_mental_health
|
||||||
|
- infer_political_opinion
|
||||||
|
- infer_religion
|
||||||
|
- infer_sexual_orientation
|
||||||
|
- infer_ethnicity
|
||||||
|
- infer_trade_union_membership
|
||||||
|
- use_family_status
|
||||||
|
- use_candidate_photo
|
||||||
|
- automatic_rejection
|
||||||
|
- automatic_hiring
|
||||||
|
- automatic_shortlisting
|
||||||
|
|
||||||
|
dataMinimization:
|
||||||
|
algorithmReceives:
|
||||||
|
- pseudonymousCandidateId
|
||||||
|
- redactedCvText
|
||||||
|
- structuredQuestionnaire
|
||||||
|
- vacancyProfile
|
||||||
|
excluded:
|
||||||
|
- fullName
|
||||||
|
- personalIdentityNumber
|
||||||
|
- birthDate
|
||||||
|
- gender
|
||||||
|
- nationality
|
||||||
|
- photo
|
||||||
|
- homeAddress
|
||||||
|
- familyStatus
|
||||||
|
|
||||||
|
humanOversight:
|
||||||
|
mandatory: true
|
||||||
|
reviewerMustSee:
|
||||||
|
- algorithmId
|
||||||
|
- algorithmVersion
|
||||||
|
- packageVersion
|
||||||
|
- evidenceReferences
|
||||||
|
- confidence
|
||||||
|
- limitations
|
||||||
|
- requiredHumanChecks
|
||||||
|
overrideRequiresRationale: true
|
||||||
|
finalDecisionOwner: role.hr_reviewer
|
||||||
|
|
||||||
|
confidence:
|
||||||
|
minimumForNormalReview: 0.70
|
||||||
|
belowThresholdAction: enhanced_human_review
|
||||||
|
|
||||||
|
retention:
|
||||||
|
assessmentSnapshot: P2Y
|
||||||
|
auditEvents: P5Y
|
||||||
|
rawCv: deployment_policy
|
||||||
34
resources/guardrails.yaml
Normal file
34
resources/guardrails.yaml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
kind: uapf.guardrails
|
||||||
|
id: guardrails.openhr.candidate-evaluation
|
||||||
|
version: 0.1.1
|
||||||
|
rules:
|
||||||
|
- id: human-decision-required
|
||||||
|
effect: require
|
||||||
|
action: authorized_hr_human_review
|
||||||
|
- id: no-automatic-rejection
|
||||||
|
effect: deny
|
||||||
|
action: automatic_rejection
|
||||||
|
- id: no-automatic-hiring
|
||||||
|
effect: deny
|
||||||
|
action: automatic_hiring
|
||||||
|
- id: no-automatic-shortlisting
|
||||||
|
effect: deny
|
||||||
|
action: automatic_shortlisting
|
||||||
|
- id: protected-attributes-excluded
|
||||||
|
effect: deny
|
||||||
|
inputs:
|
||||||
|
- birthDate
|
||||||
|
- gender
|
||||||
|
- nationality
|
||||||
|
- photo
|
||||||
|
- familyStatus
|
||||||
|
- ethnicity
|
||||||
|
- religion
|
||||||
|
- politicalOpinion
|
||||||
|
- sexualOrientation
|
||||||
|
- healthData
|
||||||
|
- id: low-confidence-human-review
|
||||||
|
effect: require
|
||||||
|
when:
|
||||||
|
confidenceBelow: 0.7
|
||||||
|
action: enhanced_human_review
|
||||||
15
resources/host-manifest.example.yaml
Normal file
15
resources/host-manifest.example.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
kind: uapf.host.manifest
|
||||||
|
host:
|
||||||
|
id: openhr
|
||||||
|
name: OpenHR
|
||||||
|
capabilities:
|
||||||
|
- id: hr.application.prepare_evaluation_input@1
|
||||||
|
inputSchema: schemas/candidate-evaluation-input.schema.json
|
||||||
|
output:
|
||||||
|
- pseudonymous_candidate_id
|
||||||
|
- redacted_cv_text
|
||||||
|
- structured_questionnaire
|
||||||
|
- vacancy_profile
|
||||||
|
- id: hr.assessment.review@1
|
||||||
|
- id: hr.decision.record@1
|
||||||
|
- id: event.emit@1
|
||||||
98
resources/mappings.yaml
Normal file
98
resources/mappings.yaml
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
kind: uapf.resource.mappings
|
||||||
|
version: "0.1.0"
|
||||||
|
|
||||||
|
targets:
|
||||||
|
- id: role.hr_operator
|
||||||
|
type: human_role
|
||||||
|
name: "HR operators"
|
||||||
|
- id: role.hr_reviewer
|
||||||
|
type: human_role
|
||||||
|
name: "Pilnvarots HR vērtētājs"
|
||||||
|
- id: role.data_protection_reviewer
|
||||||
|
type: human_role
|
||||||
|
name: "Datu aizsardzības pārskatītājs"
|
||||||
|
- id: system.openhr
|
||||||
|
type: system_api
|
||||||
|
name: "OpenHR"
|
||||||
|
baseUrlRef: OPENHR_HOST_BASE_URL
|
||||||
|
- id: system.dmn_engine
|
||||||
|
type: system_api
|
||||||
|
name: "UAPF DMN engine"
|
||||||
|
- id: service.candidate_profiler
|
||||||
|
type: external_service
|
||||||
|
name: "Candidate profiler service"
|
||||||
|
endpointRef: PROCESSGIT_CANDIDATE_PROFILER_URL
|
||||||
|
- id: system.audit_log
|
||||||
|
type: system_api
|
||||||
|
name: "OpenHR audit event store"
|
||||||
|
|
||||||
|
bindings:
|
||||||
|
- source: {type: bpmn.userTask, ref: Task_RegisterApplication}
|
||||||
|
targetId: role.hr_operator
|
||||||
|
mode: manual
|
||||||
|
|
||||||
|
- source: {type: bpmn.serviceTask, ref: Task_RedactInput}
|
||||||
|
targetId: system.openhr
|
||||||
|
mode: autonomous
|
||||||
|
capability: hr.application.prepare_evaluation_input@1
|
||||||
|
|
||||||
|
- source: {type: bpmn.businessRuleTask, ref: Task_InputAdmissibility}
|
||||||
|
targetId: system.dmn_engine
|
||||||
|
mode: autonomous
|
||||||
|
usesDecision: dmn/01-input-admissibility.dmn#Decision_InputAdmissibility
|
||||||
|
|
||||||
|
- source: {type: bpmn.serviceTask, ref: Task_ProfileCandidate}
|
||||||
|
targetId: service.candidate_profiler
|
||||||
|
mode: assisted
|
||||||
|
algorithmCardRef: algo.openhr.candidate_profiler
|
||||||
|
|
||||||
|
- source: {type: bpmn.businessRuleTask, ref: Task_ReviewPriority}
|
||||||
|
targetId: system.dmn_engine
|
||||||
|
mode: autonomous
|
||||||
|
usesDecision: dmn/02-review-priority.dmn#Decision_ReviewPriority
|
||||||
|
|
||||||
|
- source: {type: bpmn.userTask, ref: Task_DataProtectionReview}
|
||||||
|
targetId: role.data_protection_reviewer
|
||||||
|
mode: manual
|
||||||
|
|
||||||
|
- source: {type: bpmn.userTask, ref: Task_HumanReview}
|
||||||
|
targetId: role.hr_reviewer
|
||||||
|
mode: manual
|
||||||
|
capability: hr.assessment.review@1
|
||||||
|
|
||||||
|
- source: {type: bpmn.userTask, ref: Task_RecordDecision}
|
||||||
|
targetId: role.hr_reviewer
|
||||||
|
mode: manual
|
||||||
|
capability: hr.decision.record@1
|
||||||
|
|
||||||
|
- source: {type: bpmn.serviceTask, ref: Task_WriteAudit}
|
||||||
|
targetId: system.audit_log
|
||||||
|
mode: autonomous
|
||||||
|
capability: event.emit@1
|
||||||
|
|
||||||
|
- source: {type: cmmn.humanTask, ref: HT_VerifyEvidence}
|
||||||
|
targetId: role.hr_reviewer
|
||||||
|
mode: manual
|
||||||
|
discretionary: true
|
||||||
|
|
||||||
|
- source: {type: cmmn.humanTask, ref: HT_IndependentReview}
|
||||||
|
targetId: role.hr_reviewer
|
||||||
|
mode: manual
|
||||||
|
discretionary: true
|
||||||
|
|
||||||
|
- source: {type: cmmn.humanTask, ref: HT_DataProtectionReview}
|
||||||
|
targetId: role.data_protection_reviewer
|
||||||
|
mode: manual
|
||||||
|
discretionary: true
|
||||||
|
|
||||||
|
audit:
|
||||||
|
targetId: system.audit_log
|
||||||
|
events:
|
||||||
|
- application_registered
|
||||||
|
- evaluation_input_prepared
|
||||||
|
- admissibility_checked
|
||||||
|
- candidate_profile_generated
|
||||||
|
- review_priority_determined
|
||||||
|
- exception_review_opened
|
||||||
|
- human_review_completed
|
||||||
|
- human_decision_recorded
|
||||||
47
schemas/candidate-evaluation-input.schema.json
Normal file
47
schemas/candidate-evaluation-input.schema.json
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://processgit.org/schemas/openhr/candidate-evaluation-input.schema.json",
|
||||||
|
"title": "Candidate evaluation input",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"vacancy",
|
||||||
|
"candidate",
|
||||||
|
"application"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"vacancy": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"candidate": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"displayName": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"application": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cvText": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"questionnaire": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"consentConfirmed": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"reviewerContext": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
82
schemas/candidate-profile-output.schema.json
Normal file
82
schemas/candidate-profile-output.schema.json
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://processgit.org/schemas/openhr/candidate-profile-output.schema.json",
|
||||||
|
"title": "Candidate multidimensional profile",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"algorithm",
|
||||||
|
"professionalProfile",
|
||||||
|
"skillsProfile",
|
||||||
|
"behaviouralProfile",
|
||||||
|
"riskProfile",
|
||||||
|
"recommendation",
|
||||||
|
"confidence"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"version"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"professionalProfile": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"skillsProfile": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"behaviouralProfile": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"riskProfile": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"recommendation": {
|
||||||
|
"enum": [
|
||||||
|
"NORMAL_REVIEW",
|
||||||
|
"ENHANCED_REVIEW",
|
||||||
|
"REQUEST_INFORMATION",
|
||||||
|
"MANUAL_ONLY"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"confidence": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 1
|
||||||
|
},
|
||||||
|
"reasons": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requiredHumanChecks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"limitations": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"evidenceReferences": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
37
schemas/vacancy-profile.schema.json
Normal file
37
schemas/vacancy-profile.schema.json
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://processgit.org/schemas/openhr/vacancy-profile.schema.json",
|
||||||
|
"title": "OpenHR vacancy profile",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"roleTitle",
|
||||||
|
"mandatoryRequirements",
|
||||||
|
"profileDimensions"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"roleTitle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mandatoryRequirements": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profileDimensions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weights": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
27
tests/candidate-profiler-tests.yaml
Normal file
27
tests/candidate-profiler-tests.yaml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
kind: uapf.algorithm.tests
|
||||||
|
algorithmCardRef: algo.openhr.candidate_profiler
|
||||||
|
cases:
|
||||||
|
- id: complete-evidence
|
||||||
|
input: examples/candidate-input.example.json
|
||||||
|
assertions:
|
||||||
|
- path: $.algorithm.id
|
||||||
|
equals: algo.openhr.candidate_profiler
|
||||||
|
- path: $.confidence
|
||||||
|
minimum: 0.0
|
||||||
|
maximum: 1.0
|
||||||
|
- path: $.requiredHumanChecks
|
||||||
|
type: array
|
||||||
|
- path: $.recommendation
|
||||||
|
oneOf: [NORMAL_REVIEW, ENHANCED_REVIEW, REQUEST_INFORMATION, MANUAL_ONLY]
|
||||||
|
- id: protected-attribute-leakage
|
||||||
|
fixture:
|
||||||
|
prohibitedAttributeLeakage: true
|
||||||
|
expected:
|
||||||
|
recommendation: MANUAL_ONLY
|
||||||
|
requiredCheck: DATA_PROTECTION_REVIEW
|
||||||
|
- id: low-confidence
|
||||||
|
fixture:
|
||||||
|
confidence: 0.45
|
||||||
|
expected:
|
||||||
|
recommendation: ENHANCED_REVIEW
|
||||||
|
requiredCheck: INDEPENDENT_HUMAN_ASSESSMENT
|
||||||
82
uapf.yaml
Normal file
82
uapf.yaml
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
kind: uapf.package
|
||||||
|
id: lv.ai-sandbox.hr.candidate-selection-evaluation
|
||||||
|
name: HR atlase un kandidātu daudzdimensionālā vērtēšana
|
||||||
|
description: UAPF Level-4 pakotne kandidāta pieteikuma pieļaujamības pārbaudei, ārēja
|
||||||
|
daudzdimensionāla profila izveidei un obligātai HR cilvēka pārskatīšanai.
|
||||||
|
level: 4
|
||||||
|
version: 0.1.1
|
||||||
|
cornerstones:
|
||||||
|
bpmn: true
|
||||||
|
dmn: true
|
||||||
|
cmmn: true
|
||||||
|
resources: true
|
||||||
|
paths:
|
||||||
|
bpmn: bpmn
|
||||||
|
dmn: dmn
|
||||||
|
cmmn: cmmn
|
||||||
|
resources: resources
|
||||||
|
metadata: metadata
|
||||||
|
owners:
|
||||||
|
- type: team
|
||||||
|
id: openhr-poc
|
||||||
|
contact: info@algomation.io
|
||||||
|
- type: role
|
||||||
|
id: hr-process-owner
|
||||||
|
contact: info@algomation.io
|
||||||
|
lifecycle: draft
|
||||||
|
artifacts:
|
||||||
|
bpmn:
|
||||||
|
- path: bpmn/candidate-selection-evaluation.bpmn
|
||||||
|
role: primary-process
|
||||||
|
dmn:
|
||||||
|
- path: dmn/01-input-admissibility.dmn
|
||||||
|
role: input-gate
|
||||||
|
- path: dmn/02-review-priority.dmn
|
||||||
|
role: review-priority
|
||||||
|
cmmn:
|
||||||
|
- path: cmmn/candidate-review-case.cmmn
|
||||||
|
role: exception-review
|
||||||
|
resources:
|
||||||
|
- path: resources/mappings.yaml
|
||||||
|
role: resource-mapping
|
||||||
|
- path: resources/guardrails.yaml
|
||||||
|
role: guardrails
|
||||||
|
- path: algorithms/candidate-profiler.card.yaml
|
||||||
|
role: algorithm-card
|
||||||
|
- path: schemas/candidate-evaluation-input.schema.json
|
||||||
|
role: input-schema
|
||||||
|
- path: schemas/candidate-profile-output.schema.json
|
||||||
|
role: output-schema
|
||||||
|
inputs:
|
||||||
|
- vacancy
|
||||||
|
- candidate
|
||||||
|
- application
|
||||||
|
- reviewerContext
|
||||||
|
outputs:
|
||||||
|
- admissibilityResult
|
||||||
|
- candidateProfile
|
||||||
|
- reviewPriority
|
||||||
|
- requiredHumanChecks
|
||||||
|
- processRecommendation
|
||||||
|
- auditTrail
|
||||||
|
requires_capabilities:
|
||||||
|
- hr.application.prepare_evaluation_input@1
|
||||||
|
- hr.assessment.review@1
|
||||||
|
- hr.decision.record@1
|
||||||
|
- event.emit@1
|
||||||
|
profiles_supported:
|
||||||
|
- uapf-ip-orchestrated
|
||||||
|
guardrails: resources/guardrails.yaml
|
||||||
|
exposure:
|
||||||
|
mcp:
|
||||||
|
enabled: true
|
||||||
|
runnable: true
|
||||||
|
exposedEntrypoints:
|
||||||
|
- process: Process_CandidateSelectionEvaluation
|
||||||
|
tool: evaluate_candidate
|
||||||
|
exposedArtifacts:
|
||||||
|
- manifest
|
||||||
|
- bpmn
|
||||||
|
- dmn
|
||||||
|
- cmmn
|
||||||
|
- tests
|
||||||
Reference in New Issue
Block a user