Skip to main content

create-employee-from-contract

This skill creates an employee from a PDF EMPLOYMENT CONTRACT (arbeidskontrakt) with FULL details including national identity number (personnummer), STYRK occupation code (stillingskode), email, bank account, salary type, and department. Use this when the prompt mentions "personnummer", "stillingskode", "numéro d'identité", "código de profesión", "Personalausweisnummer". Do NOT use for offer letters (tilbudsbrev) — those have fewer fields and need standard working hours instead. Keywords include "employment contract", "arbeidskontrakt", "contrat de travail", "Arbeitsvertrag", "contrato de trabajo", "contrato de trabalho".

Zur Installation springen

Quellinformationen

Repository
JardarIversen/ainm-2026
Letzte Quellaktivität
22. März 2026 um 12:32
Erkannte Sprache von SKILL.md
Englisch
Sterne
18
Forks
14

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
create_employee_from_contract
tier
3
task
T19
description
This skill creates an employee from a PDF EMPLOYMENT CONTRACT (arbeidskontrakt) with FULL details including national identity number (personnummer), STYRK occupation code (stillingskode), email, bank account, salary type, and department. Use this when the prompt mentions "personnummer", "stillingskode", "numéro d'identité", "código de profesión", "Personalausweisnummer". Do NOT use for offer letters (tilbudsbrev) — those have fewer fields and need standard working hours instead. Keywords include "employment contract", "arbeidskontrakt", "contrat de travail", "Arbeitsvertrag", "contrato de trabajo", "contrato de trabalho".
# Create Employee from PDF Contract 6 API calls. ## Step 1: Read the PDF and find these 13 fields | # | Look for | Example value | |---|----------|---------------| | 1 | First name (arbeidstaker) | William | | 2 | Last name | Johnson | | 3 | Date of birth (fødselsdato) | 20.02.1990 | | 4 | National ID (personnummer) | 20029047368 | | 5 | Email (e-post) | william.johnson@example.org | | 6 | Bank account (bankkonto) | 64387484939 | | 7 | Department (avdeling) | Markedsføring | | 8 | STYRK code (stillingskode) | 3323 | | 9 | Employment form (ansettelsesform) | Fast stilling | | 10 | Salary type (lønnstype) | Fastlønn | | 11 | Percentage (stillingsprosent) | 80.0 | | 12 | Annual salary (årslønn) | 920000 | | 13 | Start date (tiltredelse) | 11.11.2026 | All 13 fields MUST be found before proceeding. Convert dates DD.MM.YYYY → YYYY-MM-DD. ## Call 1: GET /department ``` GET /department?fields=id,name&count=20 ``` ## Call 2: GET /salary/settings ``` GET /salary/settings ``` Municipality ID is needed to create a division. ## Call 3: POST /department (if needed) + POST /division If the PDF's department is not in Call 1 results: ```json POST /department {"name": "<field 7>"} ``` Fresh sandboxes have 0 divisions. Create one: ```json POST /division {"name": "Hovedkontor", "organizationNumber": "999999999", "startDate": "2026-01-01", "municipality": {"id": "<from Call 2>"}, "municipalityDate": "2026-01-01"} ``` ## Call 4: GET /employee/employment/occupationCode Tripletex uses 7-digit codes where the first 4 digits are the STYRK code. The `code` parameter does **substring** search (NOT prefix!). Results are sorted by name, NOT code. **CRITICAL:** Searching `code=4110` returns codes CONTAINING "4110" anywhere — most results will NOT start with "4110". You MUST use a more specific search. **Step A — search with STYRK + "1" appended:** ``` GET /employee/employment/occupationCode?code=<field 8>1&count=100&fields=id,code,nameNO ``` Example: STYRK `4110` → search `code=41101`. This narrows results to codes like `4110101`, `4110102` etc. — guaranteed to start with the correct 4-digit STYRK. Pick the FIRST result whose `code` starts with `<field 8>`. This is your occupation code. **Step B** (only if Step A returned 0 results): ``` GET /employee/employment/occupationCode?code=<field 8>&count=100&fields=id,code,nameNO ``` Scan ALL results. Pick one whose `code` starts with `<field 8>` (exact 4-digit match). If NONE start with the 4-digit STYRK, pick one starting with the first 3 digits, then 2 digits. Last resort: pick FIRST result. **You MUST always set occupationCode. NEVER omit it. NEVER send `{}`. Always `{"id": <number>}`.** ## Call 5: POST /employee Every field from the PDF goes here: ```json POST /employee { "firstName": "<field 1>", "lastName": "<field 2>", "dateOfBirth": "<field 3 as YYYY-MM-DD>", "nationalIdentityNumber": "<field 4>", "email": "<field 5>", "bankAccountNumber": "<field 6>", "userType": "NO_ACCESS", "department": {"id": "<from Call 1 or 3>"}, "employments": [{ "startDate": "<field 13 as YYYY-MM-DD>", "division": {"id": "<from Call 3 POST /division>"}, "isMainEmployer": true, "taxDeductionCode": "loennFraHovedarbeidsgiver", "employmentDetails": [{ "date": "<field 13 as YYYY-MM-DD>", "employmentType": "ORDINARY", "employmentForm": "PERMANENT", "remunerationType": "MONTHLY_WAGE", "occupationCode": {"id": "<from Call 4>"}, "percentageOfFullTimeEquivalent": "<field 11>", "annualSalary": "<field 12>", "workingHoursScheme": "NOT_SHIFT", "payrollTaxMunicipalityId": {"id": "<municipality_id_from_Call_2>"} }] }] } ``` | POST field | Source | |---|---| | firstName, lastName | PDF fields 1-2 | | dateOfBirth | PDF field 3 (converted) | | nationalIdentityNumber | PDF field 4 | | email | PDF field 5 | | bankAccountNumber | PDF field 6 | | department.id | Call 1 or 3 | | division.id | Call 3 POST /division | | occupationCode.id | Call 4 (REQUIRED) | | percentageOfFullTimeEquivalent | PDF field 11 | | annualSalary | PDF field 12 | | startDate + date | PDF field 13 (converted) | | payrollTaxMunicipalityId | Call 2 salary/settings municipality |
Auf GitHub ansehen