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".

インストールへ移動

ソース情報

リポジトリ
JardarIversen/ainm-2026
ソースの最終更新活動
2026年3月22日 12:32
検出された SKILL.md の言語
英語
スター
18
フォーク
14

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
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 |
GitHubで見る