跳到正文
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(原文)

安装前可以查看交给 AI 代理的指令内容。

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 / 1000 字

此表单受 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 的全部技能

报告此技能的问题