본문으로 건너뛰기
cccskills
무료GitHub에 공개

vedtak

Expert knowledge of vedtak (verdict) processing in melosys-api using the saksflyt saga pattern. Use when: (1) Debugging vedtak-related issues or failures in IVERKSETT_VEDTAK_* processes, (2) Investigating race conditions where vedtak fails due to concurrent operations, (3) Understanding how fattVedtak triggers MEDL updates, letters, invoices, and case closure, (4) Tracing why vedtak got stuck or failed at specific steps, (5) Understanding the relationship between VedtakService classes and Prosessinstans, (6) Debugging issues with brev (letters), fakturering (invoicing), or MEDL registration.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(4)

  • SKILL.md8.7 KB
  • references/debugging.md10.7 KB
  • references/race-conditions.md9.7 KB
  • references/vedtak-types.md10.0 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Vedtak Saga Pattern

Vedtak (verdict) processing in melosys-api orchestrates multiple async operations through the saksflyt saga pattern. When fattVedtak() is called, it triggers a multi-step process that updates MEDL, sends letters, creates invoices, and closes the case.

Quick Reference

Vedtak Service → Saga Mapping

ServiceProsessTypeKey Steps
FtrlVedtakServiceIVERKSETT_VEDTAK_FTRLMEDL → Faktura → Close → Årsavregning
EosVedtakServiceIVERKSETT_VEDTAK_EOSMyndighet → MEDL → Faktura → Brev → Close → Årsavregning
EosVedtakService (ikke-yrkesaktiv-flyt)IVERKSETT_VEDTAK_IKKE_YRKESAKTIVMEDL → Brev → Close
TrygdeavtaleVedtakServiceIVERKSETT_VEDTAK_TRYGDEAVTALEMyndighet → MEDL → Close
ÅrsavregningVedtakServiceIVERKSETT_VEDTAK_AARSAVREGNINGFaktura → Pensjon → Close

Routing is done by FattVedtakVelger.getFattVedtakService(behandling) (Kotlin): behandlingstype ÅRSAVREGNING → ÅrsavregningVedtakService, ellers etter sakstype EU_EOS/FTRL/TRYGDEAVTALE. Det finnes ingen egen IkkeYrkesaktivVedtakService — IVERKSETT_VEDTAK_IKKE_YRKESAKTIV velges inne i EosVedtakService når saksbehandlingRegler.harIkkeYrkesaktivFlyt(behandling). VedtaksfattingFasade (entrypoint) og FtrlVedtakService ligger i kodebasen, harVedtakInstans ligger på ProsessinstansService (Java).

Vedtak Lifecycle

┌─────────────┐    ┌──────────────────┐    ┌──────────────────┐
│ fattVedtak()│───►│ Behandling       │───►│ Prosessinstans   │
│ (Service)   │    │ IVERKSETTER_     │    │ KLAR → FERDIG    │
│             │    │ VEDTAK           │    │                  │
└─────────────┘    └──────────────────┘    └──────────────────┘
                   Sets behandlingsstatus   Executes async steps

Common Entry Points

// FTRL vedtak
prosessinstansService.opprettProsessinstansIverksettVedtakFTRL(behandling, request, nyStatus)

// EØS vedtak
prosessinstansService.opprettProsessinstansIverksettVedtakEos(
    behandling, behandlingsresultatType, fritekst, fritekstSed, mottakerinstitusjoner, arbeidsgiverSkalHaKopi
)

// EØS ikke-yrkesaktiv (valgt inne i EosVedtakService)
prosessinstansService.opprettProsessinstansIverksettIkkeYrkesaktiv(behandling)

// Trygdeavtale vedtak
prosessinstansService.opprettProsessinstansIverksettVedtakTrygdeavtale(behandling)

// Årsavregning vedtak
prosessinstansService.opprettProsessinstansIverksettVedtakÅrsavregning(behandling)

Vedtak Flow Definitions

Step lists below match ProsessflytDefinisjon.kt exactly. Every flow starts with LAGRE_PERSONOPPLYSNINGER, and FTRL/EØS append the årsavregning-koblingen (OPPRETTE_AARSAVREGNING_ENDRING og/eller RESET_ÅPNE_ÅRSAVREGNINGER) til slutt.

IVERKSETT_VEDTAK_FTRL (Folketrygdloven)

LAGRE_PERSONOPPLYSNINGER → LAGRE_MEDLEMSKAPSPERIODE_MEDL → OPPRETT_FAKTURASERIE →
AVSLUTT_SAK_OG_BEHANDLING → SEND_MELDING_OM_VEDTAK → OPPRETTE_AARSAVREGNING_ENDRING →
RESET_ÅPNE_ÅRSAVREGNINGER

RESET_ÅPNE_ÅRSAVREGNINGER er teknisk en sideeffekt etter vedtakssetting, ikke en del av selve vedtaksflyten (se kommentar i ProsessflytDefinisjon.kt).

IVERKSETT_VEDTAK_EOS (EU/EØS)

LAGRE_PERSONOPPLYSNINGER → AVKLAR_MYNDIGHET → AVKLAR_ARBEIDSGIVER → LAGRE_LOVVALGSPERIODE_MEDL →
OPPRETT_FAKTURASERIE → SEND_VEDTAKSBREV_INNLAND → SEND_VEDTAK_UTLAND →
DISTRIBUER_JOURNALPOST_UTLAND → AVSLUTT_SAK_OG_BEHANDLING → SEND_MELDING_OM_VEDTAK →
OPPRETTE_AARSAVREGNING_ENDRING → RESET_ÅPNE_ÅRSAVREGNINGER

IVERKSETT_VEDTAK_TRYGDEAVTALE (Bilateral)

LAGRE_PERSONOPPLYSNINGER → AVKLAR_MYNDIGHET → AVKLAR_ARBEIDSGIVER → LAGRE_LOVVALGSPERIODE_MEDL →
AVSLUTT_SAK_OG_BEHANDLING → SEND_MELDING_OM_VEDTAK

IVERKSETT_VEDTAK_IKKE_YRKESAKTIV (Non-worker)

LAGRE_PERSONOPPLYSNINGER → LAGRE_LOVVALGSPERIODE_MEDL → SEND_VEDTAKSBREV_INNLAND →
AVSLUTT_SAK_OG_BEHANDLING → SEND_MELDING_OM_VEDTAK

IVERKSETT_VEDTAK_AARSAVREGNING (Annual Reconciliation)

LAGRE_PERSONOPPLYSNINGER → SEND_FAKTURA_AARSAVREGNING → VARSLE_PENSJONSOPPTJENING →
AVSLUTT_SAK_OG_BEHANDLING → SEND_MELDING_OM_VEDTAK

Key Vedtak Steps Explained

StepDescriptionCommon Issues
LAGRE_MEDLEMSKAPSPERIODE_MEDLSaves membership period to MEDL registerMEDL API timeout, duplicate periods
LAGRE_LOVVALGSPERIODE_MEDLSaves applicable law period to MEDLMEDL API errors
OPPRETT_FAKTURASERIECreates invoice series in faktureringskomponentenDuplicate invoice, amount mismatch
SEND_VEDTAKSBREV_INNLANDSends verdict letter via Dokgen/JoarkLetter generation failure
SEND_VEDTAK_UTLANDSends SED to foreign authority via RINARINA connection issues
AVSLUTT_SAK_OG_BEHANDLINGCloses case and treatmentStatus already closed
SEND_MELDING_OM_VEDTAKPublishes Kafka event about verdictBehind feature toggle

Debugging Vedtak Issues

Check Existing Vedtak Process

// In FtrlVedtakService (and the EOS/Trygdeavtale/Årsavregning services) - prevents duplicate vedtak.
// harVedtakInstans is defined on ProsessinstansService (Java, saksflyt-api).
if (prosessinstansService.harVedtakInstans(behandlingID)) {
    throw FunksjonellException("Det finnes allerede en vedtak-prosess for behandling $behandlingID")
}

Find Vedtak Prosessinstans

-- Find vedtak saga for behandling
SELECT uuid, prosess_type, status, sist_fullfort_steg, registrert_dato, endret_dato
FROM prosessinstans
WHERE behandling_id = :behandlingId
AND prosess_type LIKE 'IVERKSETT_VEDTAK%'
ORDER BY registrert_dato DESC;

Check Stuck Vedtak Processes

SELECT uuid, prosess_type, status, sist_fullfort_steg, endret_dato
FROM prosessinstans
WHERE prosess_type LIKE 'IVERKSETT_VEDTAK%'
AND status = 'UNDER_BEHANDLING'
AND endret_dato < SYSDATE - INTERVAL '1' HOUR;

Check for Duplicate Vedtak Attempts

SELECT behandling_id, COUNT(*) as count
FROM prosessinstans
WHERE prosess_type LIKE 'IVERKSETT_VEDTAK%'
GROUP BY behandling_id
HAVING COUNT(*) > 1;

Race Condition Patterns

Pattern 1: Concurrent Vedtak Attempt

User clicks "Fatt vedtak" twice quickly:

Time    Thread A                    Thread B
────────────────────────────────────────────────────
T1      harVedtakInstans() = false
T2                                  harVedtakInstans() = false
T3      Create prosessinstans
T4                                  Create prosessinstans  ← DUPLICATE!
T5      Commit TX
T6                                  Commit TX

Symptom: Two IVERKSETT_VEDTAK processes for same behandling. Solution: Use database constraint or pessimistic locking.

Pattern 2: Behandling Status Race

Vedtak process and manual close overlap:

Time    Vedtak Saga                 Saksbehandler
────────────────────────────────────────────────────
T1      Start AVSLUTT_SAK_OG_BEH
T2                                  Click "Avslutt behandling"
T3      Read: status=UNDER_BEH
T4                                  Set: status=AVSLUTTET
T5      Set: status=AVSLUTTET      ← OptimisticLock or overwrite!

Symptom: Behandling closed without completing all steps. Investigation: Check audit trail for status changes.

Detailed Documentation

  • Vedtak Types: Complete vedtak type reference with service mappings
  • Debugging Guide: SQL diagnostics, log patterns, step-by-step troubleshooting, admin endpoints
  • Race Conditions: Vedtak-specific race conditions and mitigation

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Expert knowledge of Altinn A1 application processing for posted workers in melosys-api. Use when: (1) Understanding Altinn søknad/skjema processing, (2) Debugging MedlemskapArbeidEOS form mapping, (3) Understanding SoeknadMapper transformations, (4) Investigating posted worker application issues, (5) Understanding the MOTTAK_SOKNAD_ALTINN saga flow.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

navikt/melosys-api22026년 10월 21일 업데이트

Expert knowledge of Employer/Employment integration (EREG/AAREG) in melosys-api. Use when: (1) Working with organization data from EREG (Enhetsregisteret), (2) Working with employment data from AAREG (Arbeidsforhold), (3) Understanding employer/organization lookup, (4) Debugging employer or employment issues, (5) Understanding the mapping between register data and domain models. Triggers: orgnummer, arbeidsforhold, EREG, AAREG, Enhetsregisteret, registeropplysninger, ansettelsesperiode, saksopplysning.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

navikt/melosys-api22026년 10월 21일 업데이트

Modular monolith architecture overview for melosys-api. Use when needing to understand module structure, dependencies between modules, where to place new code, or when changes in one module might affect others. Triggers: "architecture", "module dependencies", "where should I put", "which modules", "dependency graph".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

navikt/melosys-api22026년 10월 21일 업데이트

Expert knowledge of Behandling (case treatment) domain in melosys-api. Use when: (1) Understanding the behandling lifecycle and status transitions, (2) Debugging issues with behandling creation, status changes, or closure, (3) Understanding relationships between Fagsak, Behandling, and Behandlingsresultat, (4) Investigating why a behandling is stuck or has wrong status, (5) Understanding Behandlingstyper, Behandlingstema, Behandlingsstatus enums, (6) Debugging journalføring or SED-triggered behandling creation, (7) Understanding behandling creation via saksflyt sagas.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

navikt/melosys-api22026년 10월 21일 업데이트

Expert knowledge of Behandlingsresultat (treatment result) domain in melosys-api. Use when: (1) Understanding result types and their meaning (FASTSATT_LOVVALGSLAND, MEDLEM_I_FOLKETRYGDEN, etc.), (2) Working with periods - Lovvalgsperiode, Medlemskapsperiode, Anmodningsperiode, Utpekingsperiode, (3) Debugging vedtak/decision metadata, criteria evaluation, or social insurance charges, (4) Understanding EU/EEA coordination logic and Article 16 exception handling, (5) Working with trygdeavgift (social insurance charge) calculations.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

navikt/melosys-api22026년 10월 21일 업데이트

brev

무료

Expert knowledge of Brev (letter generation) in melosys-api. Use when: (1) Producing letters and decision documents (vedtaksbrev), (2) Understanding Dokgen templates and mapping, (3) Configuring letter recipients and distribution, (4) Debugging letter generation issues, (5) Adding new letter types or templates.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

navikt/melosys-api22026년 10월 21일 업데이트

navikt의 스킬 모두 보기

이 스킬의 문제 신고