Skip to content

Matching User Competencies to Tasks (EvoFrame) #535

@iaktern

Description

@iaktern

https://github.com/PROCEED-Labs/proceed/wiki/MS-Configuration/#settings-in-personal-and-organizational-spaces

  • Competence-Management View for all Resources: add View to manage Space-wide Competencies with ID, Name, Description, External Qualification needed, Renew Time
  • Competence-Management for Users: add sections in the User Profile to connect existing Competencies and add Proficiency, Qualification Dates, Last Usages
    • Inside User Profile: add Selection Field for the User to select existing Competencies
    • Inside User Profile: add button to define own competencies (self descriptions by the user) => this competency is only assigned to this one user, but it should be also visible in the Competency Management View
  • BPMN Editor: define "Required Competencies" are either with 1. the Description or 2. the User Task HTML Specification
    • (low prio) assign existing Space Competencies in BPMN Editor to a task
  • Separate, external Matcher
    • create own Micro-Service with REST-API in /src/competencies-matcher
    • Matching: 1. match on direct competencies (exact matching), 2. match on textual descriptions of competencies (3. later maybe also time- and cost-matching)
  • Use Matching Service in PROCEED: probably in the MS before process start (easier than doing it at runtime in the Engine)

  • REST-API: Transmit Resource-Competence List, i.e. the existing users with their competencies:
POST /resource-competence-list/  
BODY: 
[ 
    { 
        resourceId: UUIDString, // required
        competencies: [
            {   
                competenceId: UUIDString, // required
                competenceName: String, // optional
                competenceDescription: String, // -> this is one of the most important things for matching recommendations (optional but recommended to have content)
                externalQualificationNeeded: Boolean, // optional
                renewTime: DaysAsInteger, // optional
                proficiencyLevel: 1-10, // optional
                qualificationDates: ["1972-08-18T00:00:00.000Z", ... ], // optional
                lastUsages: ["1972-08-18T00:00:00.000Z", ... ] // optional
            }, 
            {...}, 
            ... 
        ] 
    }, 
    {   resourceId: UUIDString, 
        competencies: [...]
    }, 
    ...
]
  • Response: 201 Created with Location-Header with UUID of the created resource <resource-competence-list-id>

  • REST-API: Start Matching/Recommendation process of finding fitting users one (or more) tasks:

POST /matching-task-to-resource/jobs  
BODY: 
{ 
    resource-competence-list: [...], // first possibility, structure of previous explained POST request where this is send separate from the matching process
    resource-competence-list-id: String, // second possibility if competence list was already transferred
    tasks: [
        { 
            taskId: UUIDString, // required
            taskName: String,   // optional
            taskDescription: String, // -> this is the other most important things for matching recommendations (optional but recommended to have content)
            executionInstructions: String, // optional, e.g. HTML
            requiredCompetencies: [{...}, ...] // optional, 
        },
        {...}, 
        ...
    ]
}
  • Response: 201 Created with Location-Header with UUID of created job <matching-job-id>

  • One of either resource-competence-list OR resource-competence-list-id must be given. You can use the latter if you previously transmitted a resource-competence list and got an ID back.

  • tasks is an Array. All given tasks are AND-connected, i.e. the returned resource matching will fit to all tasks. Giving more then one task is useful, if you look for a resource that should do all tasks in a row and the resource must not change between the tasks, e.g. on a working place. (To get different resource matchings for multiple tasks, call the service multiple times with only one task in the Array)

  • REST-API: Request status/answer of matching job: GET /matching-task-to-resource/jobs/<matching-job-id>
    - Still in progress: Response: 202 Accepted
    - Finished (if resource list is too long, then output is limited to the best 10 resources): Response: 200 OK Body:

{ 
    <resourceId>: { 
        matchingProbability: 0-100, 
        reason: String 
    },  
    <resourceId>: { ... },  
    ...
}

  • TODO: Process Execution: after Matching, start the MRK process task and send the name of the selected User, the Competence, Score
    • Extend Engine and Script Tasks to send this Meta Info (TODO: how)
  • play back Info in PROCEED that the User did a Task and have a Competence

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions