diff --git a/README.md b/README.md index 6f184767..4be1b51b 100644 --- a/README.md +++ b/README.md @@ -137,16 +137,26 @@ graph TD HPR ```mermaid graph TD - root(BEHANDLER_IKKE_GYLDIG_I_HPR) -->|Yes| root_BEHANDLER_IKKE_GYLDIG_I_HPR_INVALID(INVALID):::invalid - root(BEHANDLER_IKKE_GYLDIG_I_HPR) -->|No| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR(BEHANDLER_MANGLER_AUTORISASJON_I_HPR) - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR(BEHANDLER_MANGLER_AUTORISASJON_I_HPR) -->|Yes| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_INVALID(INVALID):::invalid - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR(BEHANDLER_MANGLER_AUTORISASJON_I_HPR) -->|No| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR(BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR) - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR(BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR) -->|Yes| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_INVALID(INVALID):::invalid - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR(BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR) -->|No| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER(BEHANDLER_MT_FT_KI_OVER_12_UKER) - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER(BEHANDLER_MT_FT_KI_OVER_12_UKER) -->|Yes| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER_INVALID(INVALID):::invalid - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER(BEHANDLER_MT_FT_KI_OVER_12_UKER) -->|No| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER_BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING(BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING) - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER_BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING(BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING) -->|Yes| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER_BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING_INVALID(INVALID):::invalid - root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER_BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING(BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING) -->|No| root_BEHANDLER_IKKE_GYLDIG_I_HPR_BEHANDLER_MANGLER_AUTORISASJON_I_HPR_BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR_BEHANDLER_MT_FT_KI_OVER_12_UKER_BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING_OK(OK):::ok + root(BEHANDLER_GYLIDG_I_HPR) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR(BEHANDLER_HAR_AUTORISASJON_I_HPR) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR(BEHANDLER_HAR_AUTORISASJON_I_HPR) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR(BEHANDLER_ER_LEGE_I_HPR) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR(BEHANDLER_ER_LEGE_I_HPR) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_OK(OK):::ok + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR(BEHANDLER_ER_LEGE_I_HPR) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR(BEHANDLER_ER_TANNLEGE_I_HPR) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR(BEHANDLER_ER_TANNLEGE_I_HPR) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_OK(OK):::ok + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR(BEHANDLER_ER_TANNLEGE_I_HPR) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR(BEHANDLER_ER_MANUELLTERAPEUT_I_HPR) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR(BEHANDLER_ER_MANUELLTERAPEUT_I_HPR) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_SYKEFRAVAR_OVER_12_UKER_INVALID(INVALID):::invalid + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_SYKEFRAVAR_OVER_12_UKER_OK(OK):::ok + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR(BEHANDLER_ER_MANUELLTERAPEUT_I_HPR) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR(BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR(BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER_INVALID(INVALID):::invalid + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER_OK(OK):::ok + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR(BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR(BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR(BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) -->|Yes| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER_INVALID(INVALID):::invalid + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER(SYKEFRAVAR_OVER_12_UKER) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR_SYKEFRAVAR_OVER_12_UKER_OK(OK):::ok + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR(BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_BEHANDLER_ER_LEGE_I_HPR_BEHANDLER_ER_TANNLEGE_I_HPR_BEHANDLER_ER_MANUELLTERAPEUT_I_HPR_BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR_BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR_INVALID(INVALID):::invalid + root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR(BEHANDLER_HAR_AUTORISASJON_I_HPR) -->|No| root_BEHANDLER_GYLIDG_I_HPR_BEHANDLER_HAR_AUTORISASJON_I_HPR_INVALID(INVALID):::invalid + root(BEHANDLER_GYLIDG_I_HPR) -->|No| root_BEHANDLER_GYLIDG_I_HPR_INVALID(INVALID):::invalid classDef ok fill:#c3ff91,stroke:#004a00,color: black; classDef invalid fill:#ff7373,stroke:#ff0000,color: black; classDef manuell fill:#ffe24f,stroke:#ffd500,color: #473c00; diff --git a/src/main/kotlin/no/nav/syfo/rules/hpr/HPRRuleTree.kt b/src/main/kotlin/no/nav/syfo/rules/hpr/HPRRuleTree.kt deleted file mode 100644 index 275b92ec..00000000 --- a/src/main/kotlin/no/nav/syfo/rules/hpr/HPRRuleTree.kt +++ /dev/null @@ -1,55 +0,0 @@ -package no.nav.syfo.rules.hpr - -import no.nav.syfo.model.Status -import no.nav.syfo.model.Status.OK -import no.nav.syfo.rules.common.RuleResult -import no.nav.syfo.rules.dsl.RuleNode -import no.nav.syfo.rules.dsl.tree - -enum class HPRRules { - BEHANDLER_IKKE_GYLDIG_I_HPR, - BEHANDLER_MANGLER_AUTORISASJON_I_HPR, - BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR, - BEHANDLER_MT_FT_KI_OVER_12_UKER, - BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING, -} - -val hprRuleTree = - tree(HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR) { - yes(Status.INVALID, HPRRuleHit.BEHANDLER_IKKE_GYLDIG_I_HPR) - no(HPRRules.BEHANDLER_MANGLER_AUTORISASJON_I_HPR) { - yes(Status.INVALID, HPRRuleHit.BEHANDLER_MANGLER_AUTORISASJON_I_HPR) - no(HPRRules.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR) { - yes(Status.INVALID, HPRRuleHit.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR) - no(HPRRules.BEHANDLER_MT_FT_KI_OVER_12_UKER) { - yes(Status.INVALID, HPRRuleHit.BEHANDLER_MT_FT_KI_OVER_12_UKER) - no(HPRRules.BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING) { - yes( - Status.INVALID, - HPRRuleHit.BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING - ) - no(OK) - } - } - } - } - } - -internal fun RuleNode.yes(status: Status, ruleHit: HPRRuleHit? = null) { - yes(RuleResult(status, ruleHit?.ruleHit)) -} - -internal fun RuleNode.no(status: Status, ruleHit: HPRRuleHit? = null) { - no(RuleResult(status, ruleHit?.ruleHit)) -} - -fun getRule(rules: HPRRules): Rule { - return when (rules) { - HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR -> behanderIkkeGyldigHPR - HPRRules.BEHANDLER_MANGLER_AUTORISASJON_I_HPR -> behandlerManglerAutorisasjon - HPRRules.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR -> behandlerIkkeLEKIMTTLFT - HPRRules.BEHANDLER_MT_FT_KI_OVER_12_UKER -> behandlerMTFTKISykmeldtOver12Uker - HPRRules.BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING -> - behandlerErFTUtenTilligskompetanseSykmelding - } -} diff --git a/src/main/kotlin/no/nav/syfo/rules/hpr/HPRRulesExecution.kt b/src/main/kotlin/no/nav/syfo/rules/hpr/HPRRulesExecution.kt index 4f6d4d86..459a0f46 100644 --- a/src/main/kotlin/no/nav/syfo/rules/hpr/HPRRulesExecution.kt +++ b/src/main/kotlin/no/nav/syfo/rules/hpr/HPRRulesExecution.kt @@ -16,7 +16,7 @@ import no.nav.syfo.rules.dsl.printRulePath import no.nav.syfo.services.BehandlerOgStartdato import no.nav.syfo.services.RuleMetadataSykmelding -typealias HPRTreeOutput = TreeOutput +typealias NewHPRTreeOutput = TreeOutput typealias HPRTreeNode = TreeNode @@ -39,9 +39,9 @@ class HPRRulesExecution(private val rootNode: HPRTreeNode = hprRuleTree) : RuleE private fun TreeNode.evaluate( sykmelding: Sykmelding, behandlerOgStartdato: BehandlerOgStartdato, -): HPRTreeOutput = +): NewHPRTreeOutput = when (this) { - is ResultNode -> HPRTreeOutput(treeResult = result) + is ResultNode -> NewHPRTreeOutput(treeResult = result) is RuleNode -> { val rule = getRule(rule) val result = rule(sykmelding, behandlerOgStartdato) diff --git a/src/main/kotlin/no/nav/syfo/rules/hpr/HprRuleTree.kt b/src/main/kotlin/no/nav/syfo/rules/hpr/HprRuleTree.kt new file mode 100644 index 00000000..f7944e00 --- /dev/null +++ b/src/main/kotlin/no/nav/syfo/rules/hpr/HprRuleTree.kt @@ -0,0 +1,78 @@ +package no.nav.syfo.rules.hpr + +import HPRRule +import behanderGyldigHPR +import behandlerErFTMedTilligskompetanseSykmelding +import behandlerErKIMedTilligskompetanseSykmelding +import behandlerErLege +import behandlerErManuellterapeut +import behandlerErTannlege +import behandlerHarAutorisasjon +import no.nav.syfo.model.Status +import no.nav.syfo.rules.common.RuleResult +import no.nav.syfo.rules.dsl.RuleNode +import no.nav.syfo.rules.dsl.tree +import sykefravarOver12Uker + +enum class HPRRules { + BEHANDLER_GYLIDG_I_HPR, + BEHANDLER_HAR_AUTORISASJON_I_HPR, + BEHANDLER_ER_LEGE_I_HPR, + BEHANDLER_ER_TANNLEGE_I_HPR, + BEHANDLER_ER_MANUELLTERAPEUT_I_HPR, + BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR, + BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR, + SYKEFRAVAR_OVER_12_UKER, +} + +val hprRuleTree = + tree(HPRRules.BEHANDLER_GYLIDG_I_HPR) { + no(Status.INVALID, HPRRuleHit.BEHANDLER_IKKE_GYLDIG_I_HPR) + yes(HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR) { + no(Status.INVALID, HPRRuleHit.BEHANDLER_MANGLER_AUTORISASJON_I_HPR) + yes(HPRRules.BEHANDLER_ER_LEGE_I_HPR) { + yes(Status.OK) + no(HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR) { + yes(Status.OK) + no(HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR) { + yes(HPRRules.SYKEFRAVAR_OVER_12_UKER, checkSykefravarOver12Uker()) + no(HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR) { + yes(HPRRules.SYKEFRAVAR_OVER_12_UKER, checkSykefravarOver12Uker()) + no(HPRRules.BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR) { + yes(HPRRules.SYKEFRAVAR_OVER_12_UKER, checkSykefravarOver12Uker()) + no(Status.INVALID, HPRRuleHit.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR) + } + } + } + } + } + } + } + +internal fun RuleNode.yes(status: Status, ruleHit: HPRRuleHit? = null) { + yes(RuleResult(status, ruleHit?.ruleHit)) +} + +internal fun RuleNode.no(status: Status, ruleHit: HPRRuleHit? = null) { + no(RuleResult(status, ruleHit?.ruleHit)) +} + +private fun checkSykefravarOver12Uker(): RuleNode.() -> Unit = { + yes(Status.INVALID, HPRRuleHit.BEHANDLER_MT_FT_KI_OVER_12_UKER) + no(Status.OK) +} + +fun getRule(rules: HPRRules): HPRRule { + return when (rules) { + HPRRules.BEHANDLER_GYLIDG_I_HPR -> behanderGyldigHPR(rules) + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR -> behandlerHarAutorisasjon(rules) + HPRRules.BEHANDLER_ER_LEGE_I_HPR -> behandlerErLege(rules) + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR -> behandlerErTannlege(rules) + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR -> behandlerErManuellterapeut(rules) + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR -> + behandlerErFTMedTilligskompetanseSykmelding(rules) + HPRRules.BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR -> + behandlerErKIMedTilligskompetanseSykmelding(rules) + HPRRules.SYKEFRAVAR_OVER_12_UKER -> sykefravarOver12Uker(rules) + } +} diff --git a/src/main/kotlin/no/nav/syfo/rules/hpr/Rules.kt b/src/main/kotlin/no/nav/syfo/rules/hpr/Rules.kt index 500b789b..e90d8741 100644 --- a/src/main/kotlin/no/nav/syfo/rules/hpr/Rules.kt +++ b/src/main/kotlin/no/nav/syfo/rules/hpr/Rules.kt @@ -1,10 +1,10 @@ -package no.nav.syfo.rules.hpr - import java.time.LocalDateTime import no.nav.syfo.client.Godkjenning import no.nav.syfo.client.Tilleggskompetanse import no.nav.syfo.model.Sykmelding import no.nav.syfo.rules.dsl.RuleResult +import no.nav.syfo.rules.hpr.HPRRules +import no.nav.syfo.rules.hpr.HelsepersonellKategori import no.nav.syfo.services.BehandlerOgStartdato import no.nav.syfo.services.daysBetween import no.nav.syfo.services.sortedFOMDate @@ -15,7 +15,7 @@ typealias Rule = typealias HPRRule = Rule -val behanderIkkeGyldigHPR: HPRRule = { _, behandlerOgStartdato -> +fun behanderGyldigHPR(rule: HPRRules): HPRRule = { _, behandlerOgStartdato -> val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger val aktivAutorisasjon = @@ -23,12 +23,12 @@ val behanderIkkeGyldigHPR: HPRRule = { _, behandlerOgStartdato -> RuleResult( ruleInputs = mapOf("behandlerGodkjenninger" to behandlerGodkjenninger), - rule = HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR, - ruleResult = !aktivAutorisasjon, + rule = rule, + ruleResult = aktivAutorisasjon, ) } -val behandlerManglerAutorisasjon: HPRRule = { _, behandlerOgStartdato -> +fun behandlerHarAutorisasjon(rule: HPRRules): HPRRule = { _, behandlerOgStartdato -> val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger val gyldigeGodkjenninger = @@ -42,94 +42,122 @@ val behandlerManglerAutorisasjon: HPRRule = { _, behandlerOgStartdato -> RuleResult( ruleInputs = mapOf("behandlerGodkjenninger" to behandlerGodkjenninger), - rule = HPRRules.BEHANDLER_MANGLER_AUTORISASJON_I_HPR, - ruleResult = !gyldigeGodkjenninger, + rule = rule, + ruleResult = gyldigeGodkjenninger, ) } -val behandlerIkkeLEKIMTTLFT: HPRRule = { _, behandlerOgStartdato -> +fun behandlerErLege(rule: HPRRules): HPRRule = { _, behandlerOgStartdato -> val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger - val behandlerLEKIMTTLFT = - behandlerGodkjenninger.any { - (it.helsepersonellkategori?.aktiv != null && - it.autorisasjon?.aktiv == true && - it.helsepersonellkategori.verdi != null && - harAktivHelsepersonellAutorisasjonsSom( - behandlerGodkjenninger, - listOf( - HelsepersonellKategori.LEGE.verdi, - HelsepersonellKategori.KIROPRAKTOR.verdi, - HelsepersonellKategori.MANUELLTERAPEUT.verdi, - HelsepersonellKategori.TANNLEGE.verdi, - HelsepersonellKategori.FYSIOTERAPAEUT.verdi, - ), - )) - } + val behandlerErLege = sjekkBehandler(behandlerGodkjenninger, HelsepersonellKategori.LEGE) RuleResult( ruleInputs = mapOf("behandlerGodkjenninger" to behandlerGodkjenninger), - rule = HPRRules.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR, - ruleResult = !behandlerLEKIMTTLFT, + rule = rule, + ruleResult = behandlerErLege, ) } -val behandlerMTFTKISykmeldtOver12Uker: HPRRule = { sykmelding, behandlerOgStartdato -> - val forsteFomDato = sykmelding.perioder.sortedFOMDate().first() - val sisteTomDato = sykmelding.perioder.sortedTOMDate().last() - val behandlerStartDato = behandlerOgStartdato.startdato +fun behandlerErTannlege(rule: HPRRules): HPRRule = { _, behandlerOgStartdato -> val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger - val behandlerMTFTKISykmeldtOver12Uker = - ((forsteFomDato..sisteTomDato).daysBetween() > 84 || - (behandlerStartDato != null && - (behandlerStartDato..sisteTomDato).daysBetween() > 84)) && - !harAktivHelsepersonellAutorisasjonsSom( - behandlerGodkjenninger, - listOf( - HelsepersonellKategori.LEGE.verdi, - HelsepersonellKategori.TANNLEGE.verdi, - ), - ) && - harAktivHelsepersonellAutorisasjonsSom( - behandlerGodkjenninger, - listOf( - HelsepersonellKategori.KIROPRAKTOR.verdi, - HelsepersonellKategori.MANUELLTERAPEUT.verdi, - HelsepersonellKategori.FYSIOTERAPAEUT.verdi, - ), - ) + val behandlerErTannlege = + sjekkBehandler(behandlerGodkjenninger, HelsepersonellKategori.TANNLEGE) RuleResult( ruleInputs = mapOf("behandlerGodkjenninger" to behandlerGodkjenninger), - rule = HPRRules.BEHANDLER_MT_FT_KI_OVER_12_UKER, - ruleResult = behandlerMTFTKISykmeldtOver12Uker, + rule = rule, + ruleResult = behandlerErTannlege, ) } -val behandlerErFTUtenTilligskompetanseSykmelding: HPRRule = { metadata, behandlerOgStartdato -> - val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger - val genereringsTidspunkt = metadata.signaturDato - val erFtMedTilleggskompetanse = - erFTMedTillegskompetanse(behandlerGodkjenninger, genereringsTidspunkt) +fun behandlerErManuellterapeut(rule: HPRRules): HPRRule = { _, behandlerOgStartdato -> + val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger - val result = erFtMedTilleggskompetanse + val behandlerErManuellterapeut = + sjekkBehandler(behandlerGodkjenninger, HelsepersonellKategori.MANUELLTERAPEUT) RuleResult( ruleInputs = mapOf("behandlerGodkjenninger" to behandlerGodkjenninger), - rule = HPRRules.BEHANDLER_ER_FT_UTEN_TILLIGESKOMPETANSE_SYKMELDING, - ruleResult = result, + rule = rule, + ruleResult = behandlerErManuellterapeut, + ) +} + +fun behandlerErFTMedTilligskompetanseSykmelding(rule: HPRRules): HPRRule = + { metadata, behandlerOgStartdato -> + val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger + val genereringsTidspunkt = metadata.signaturDato + + val erFtMedTilleggskompetanse = + erHelsepersonellKategoriMedTilleggskompetanse( + behandlerGodkjenninger, + genereringsTidspunkt, + HelsepersonellKategori.FYSIOTERAPAEUT + ) + + val result = erFtMedTilleggskompetanse + + RuleResult( + ruleInputs = mapOf("behandlerGodkjenninger" to behandlerGodkjenninger), + rule = rule, + ruleResult = result, + ) + } + +fun behandlerErKIMedTilligskompetanseSykmelding(rule: HPRRules): HPRRule = + { metadata, behandlerOgStartdato -> + val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger + val genereringsTidspunkt = metadata.signaturDato + + val erKIMedTilleggskompetanse = + erHelsepersonellKategoriMedTilleggskompetanse( + behandlerGodkjenninger, + genereringsTidspunkt, + HelsepersonellKategori.KIROPRAKTOR + ) + + val result = erKIMedTilleggskompetanse + + RuleResult( + ruleInputs = mapOf("behandlerGodkjenninger" to behandlerGodkjenninger), + rule = rule, + ruleResult = result, + ) + } + +fun sykefravarOver12Uker(rule: HPRRules): HPRRule = { sykmelding, behandlerOgStartdato -> + val forsteFomDato = sykmelding.perioder.sortedFOMDate().first() + val sisteTomDato = sykmelding.perioder.sortedTOMDate().last() + val behandlerStartDato = behandlerOgStartdato.startdato + val behandlerGodkjenninger = behandlerOgStartdato.behandler.godkjenninger + + val over12Uker = + (forsteFomDato..sisteTomDato).daysBetween() > 84 || + (behandlerStartDato != null && (behandlerStartDato..sisteTomDato).daysBetween() > 84) + + RuleResult( + ruleInputs = + mapOf( + "fom" to forsteFomDato, + "tom" to sisteTomDato, + "startDatoSykefravær" to (behandlerStartDato ?: forsteFomDato), + "behandlerGodkjenninger" to behandlerGodkjenninger, + ), + rule = rule, + ruleResult = over12Uker, ) } -private fun erFTMedTillegskompetanse( +private fun erHelsepersonellKategoriMedTilleggskompetanse( behandlerGodkjenninger: List, genereringsTidspunkt: LocalDateTime, + helsepersonellkategori: HelsepersonellKategori ) = (behandlerGodkjenninger.size == 1 && behandlerGodkjenninger.any { godkjenning -> - godkjenning.helsepersonellkategori?.verdi == - HelsepersonellKategori.FYSIOTERAPAEUT.verdi && + godkjenning.helsepersonellkategori?.verdi == helsepersonellkategori.verdi && godkjenning.tillegskompetanse?.any { tillegskompetanse -> tillegskompetanse.avsluttetStatus == null && tillegskompetanse.gyldigPeriode(genereringsTidspunkt) && @@ -140,23 +168,36 @@ private fun erFTMedTillegskompetanse( ?: false }) -private fun Tilleggskompetanse.gyldigPeriode(genereringsTidspunkt: LocalDateTime): Boolean { - val fom = gyldig?.fra?.toLocalDate() - val tom = gyldig?.til?.toLocalDate() - val genDate = genereringsTidspunkt.toLocalDate() - if (fom == null) { - return false +private fun sjekkBehandler( + behandlerGodkjenninger: List, + helsepersonellkategori: HelsepersonellKategori +) = + behandlerGodkjenninger.any { + (it.helsepersonellkategori?.aktiv != null && + it.autorisasjon?.aktiv == true && + harAktivHelsepersonellAutorisasjonsSom( + behandlerGodkjenninger, + helsepersonellkategori.verdi + )) } - return fom.minusDays(1).isBefore(genDate) && (tom == null || tom.plusDays(1).isAfter(genDate)) -} private fun harAktivHelsepersonellAutorisasjonsSom( behandlerGodkjenninger: List, - helsepersonerVerdi: List, + helsepersonerVerdi: String, ): Boolean = behandlerGodkjenninger.any { godkjenning -> godkjenning.helsepersonellkategori?.aktiv != null && godkjenning.autorisasjon?.aktiv == true && godkjenning.helsepersonellkategori.verdi != null && - godkjenning.helsepersonellkategori.let { it.aktiv && it.verdi in helsepersonerVerdi } + godkjenning.helsepersonellkategori.let { it.aktiv && it.verdi == helsepersonerVerdi } + } + +private fun Tilleggskompetanse.gyldigPeriode(genereringsTidspunkt: LocalDateTime): Boolean { + val fom = gyldig?.fra?.toLocalDate() + val tom = gyldig?.til?.toLocalDate() + val genDate = genereringsTidspunkt.toLocalDate() + if (fom == null) { + return false } + return fom.minusDays(1).isBefore(genDate) && (tom == null || tom.plusDays(1).isAfter(genDate)) +} diff --git a/src/test/kotlin/no/nav/syfo/rules/hpr/HPRTest.kt b/src/test/kotlin/no/nav/syfo/rules/hpr/HPRTest.kt deleted file mode 100644 index 1ed198ad..00000000 --- a/src/test/kotlin/no/nav/syfo/rules/hpr/HPRTest.kt +++ /dev/null @@ -1,618 +0,0 @@ -package no.nav.syfo.rules.hpr - -import io.kotest.core.spec.style.FunSpec -import io.mockk.every -import io.mockk.mockk -import java.time.LocalDate -import no.nav.syfo.client.Behandler -import no.nav.syfo.client.Godkjenning -import no.nav.syfo.client.Kode -import no.nav.syfo.client.Periode -import no.nav.syfo.client.Tilleggskompetanse -import no.nav.syfo.generateSykmelding -import no.nav.syfo.model.Status -import no.nav.syfo.rules.tilbakedatering.toRuleMetadata -import no.nav.syfo.services.BehandlerOgStartdato -import no.nav.syfo.services.RuleMetadataSykmelding -import no.nav.syfo.services.SykmeldingMetadataInfo -import org.amshove.kluent.shouldBeEqualTo - -class HPRTest : - FunSpec( - { - val ruleTree = HPRRulesExecution() - - context("Testing hpr rules and checking the rule outcomes") { - test("har aktiv autorisasjon, Status OK") { - val sykmelding = - generateSykmelding( - fom = LocalDate.of(2020, 1, 1), - tom = LocalDate.of(2020, 1, 2), - behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), - ) - val behandler = - Behandler( - listOf( - Godkjenning( - autorisasjon = - Kode( - aktiv = true, - oid = 7704, - verdi = "1", - ), - helsepersonellkategori = - Kode( - aktiv = true, - oid = 0, - verdi = "LE", - ), - ), - ), - ) - - val ruleMetadata = sykmelding.toRuleMetadata() - - val ruleMetadataSykmelding = - RuleMetadataSykmelding( - ruleMetadata = ruleMetadata, - sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), - doctorSuspensjon = false, - behandlerOgStartdato = BehandlerOgStartdato(behandler, null), - ) - - val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) - - status.first.treeResult.status shouldBeEqualTo Status.OK - status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo - listOf( - HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR to false, - HPRRules.BEHANDLER_MANGLER_AUTORISASJON_I_HPR to false, - HPRRules.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR to false, - HPRRules.BEHANDLER_MT_FT_KI_OVER_12_UKER to false, - ) - - mapOf( - "behandlerGodkjenninger" to behandler.godkjenninger, - "behandlerGodkjenninger" to behandler.godkjenninger, - "behandlerGodkjenninger" to behandler.godkjenninger, - "behandlerGodkjenninger" to behandler.godkjenninger, - ) shouldBeEqualTo status.first.ruleInputs - - status.first.treeResult.ruleHit shouldBeEqualTo null - } - - test("har ikke aktiv autorisasjon, Status INVALID") { - val sykmelding = - generateSykmelding( - fom = LocalDate.of(2020, 1, 1), - tom = LocalDate.of(2020, 1, 2), - behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), - ) - val behandler = - Behandler( - listOf( - Godkjenning( - autorisasjon = - Kode( - aktiv = false, - oid = 7704, - verdi = "1", - ), - helsepersonellkategori = - Kode( - aktiv = true, - oid = 0, - verdi = "LE", - ), - ), - ), - ) - - val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) - - val ruleMetadata = sykmelding.toRuleMetadata() - - val ruleMetadataSykmelding = - RuleMetadataSykmelding( - ruleMetadata = ruleMetadata, - sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), - doctorSuspensjon = false, - behandlerOgStartdato = behandlerOgStartdato, - ) - - val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) - - status.first.treeResult.status shouldBeEqualTo Status.INVALID - status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo - listOf( - HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR to true, - ) - mapOf( - "behandlerGodkjenninger" to behandler.godkjenninger, - ) shouldBeEqualTo status.first.ruleInputs - - status.first.treeResult.ruleHit shouldBeEqualTo - HPRRuleHit.BEHANDLER_IKKE_GYLDIG_I_HPR.ruleHit - } - test("mangler autorisasjon, Status INVALID") { - val sykmelding = - generateSykmelding( - fom = LocalDate.of(2020, 1, 1), - tom = LocalDate.of(2020, 1, 2), - behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), - ) - val behandler = - Behandler( - listOf( - Godkjenning( - autorisasjon = - Kode( - aktiv = true, - oid = 7702, - verdi = "19", - ), - helsepersonellkategori = - Kode( - aktiv = true, - oid = 0, - verdi = "LE", - ), - ), - ), - ) - - val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) - - val ruleMetadata = sykmelding.toRuleMetadata() - - val ruleMetadataSykmelding = - RuleMetadataSykmelding( - ruleMetadata = ruleMetadata, - sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), - doctorSuspensjon = false, - behandlerOgStartdato = behandlerOgStartdato, - ) - - val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) - - status.first.treeResult.status shouldBeEqualTo Status.INVALID - status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo - listOf( - HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR to false, - HPRRules.BEHANDLER_MANGLER_AUTORISASJON_I_HPR to true, - ) - - mapOf( - "behandlerGodkjenninger" to behandler.godkjenninger, - ) shouldBeEqualTo status.first.ruleInputs - - status.first.treeResult.ruleHit shouldBeEqualTo - HPRRuleHit.BEHANDLER_MANGLER_AUTORISASJON_I_HPR.ruleHit - } - test("behandler ikke riktig helsepersonell kategori, Status INVALID") { - val sykmelding = - generateSykmelding( - fom = LocalDate.of(2020, 1, 1), - tom = LocalDate.of(2020, 1, 2), - behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), - ) - val behandler = - Behandler( - listOf( - Godkjenning( - autorisasjon = - Kode( - aktiv = true, - oid = 7704, - verdi = "18", - ), - helsepersonellkategori = - Kode( - aktiv = true, - oid = 0, - verdi = "PL", - ), - ), - ), - ) - - val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) - - val ruleMetadata = sykmelding.toRuleMetadata() - - val ruleMetadataSykmelding = - RuleMetadataSykmelding( - ruleMetadata = ruleMetadata, - sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), - doctorSuspensjon = false, - behandlerOgStartdato = behandlerOgStartdato, - ) - - val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) - - status.first.treeResult.status shouldBeEqualTo Status.INVALID - status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo - listOf( - HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR to false, - HPRRules.BEHANDLER_MANGLER_AUTORISASJON_I_HPR to false, - HPRRules.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR to true, - ) - - mapOf( - "behandlerGodkjenninger" to behandler.godkjenninger, - ) shouldBeEqualTo status.first.ruleInputs - - status.first.treeResult.ruleHit shouldBeEqualTo - HPRRuleHit.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR.ruleHit - } - - test("behandler KI MT FT over 84 dager, Status INVALID") { - val sykmelding = - generateSykmelding( - fom = LocalDate.of(2020, 1, 1), - tom = LocalDate.of(2020, 4, 2), - behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), - ) - val behandler = - Behandler( - listOf( - Godkjenning( - autorisasjon = - Kode( - aktiv = true, - oid = 7704, - verdi = "18", - ), - helsepersonellkategori = - Kode( - aktiv = true, - oid = 0, - verdi = "MT", - ), - ), - ), - ) - - val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) - - val ruleMetadata = sykmelding.toRuleMetadata() - - val ruleMetadataSykmelding = - RuleMetadataSykmelding( - ruleMetadata = ruleMetadata, - sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), - doctorSuspensjon = false, - behandlerOgStartdato = behandlerOgStartdato, - ) - - val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) - - status.first.treeResult.status shouldBeEqualTo Status.INVALID - status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo - listOf( - HPRRules.BEHANDLER_IKKE_GYLDIG_I_HPR to false, - HPRRules.BEHANDLER_MANGLER_AUTORISASJON_I_HPR to false, - HPRRules.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR to false, - HPRRules.BEHANDLER_MT_FT_KI_OVER_12_UKER to true, - ) - - mapOf( - "behandlerGodkjenninger" to behandler.godkjenninger, - ) shouldBeEqualTo status.first.ruleInputs - - status.first.treeResult.ruleHit shouldBeEqualTo - HPRRuleHit.BEHANDLER_MT_FT_KI_OVER_12_UKER.ruleHit - } - } - - test("test") { - val behandler = - Behandler( - listOf( - Godkjenning( - autorisasjon = - Kode( - aktiv = false, - oid = 7704, - verdi = "99", - ), - helsepersonellkategori = - Kode( - aktiv = true, - oid = 9060, - verdi = "HP", - ), - ), - Godkjenning( - helsepersonellkategori = - Kode(aktiv = true, verdi = "LE", oid = 9060), - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "1"), - ), - ), - ) - val sykmelding = - generateSykmelding( - fom = LocalDate.of(2020, 1, 1), - tom = LocalDate.of(2020, 4, 2), - behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), - ) - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - val result = ruleTree.runRules(sykmelding, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.OK - } - - test("FT Ugylidg") { - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - ), - ), - ) - - val sykmedling = generateSykmelding() - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.INVALID - } - - test("FT Gyldig") { - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - tillegskompetanse = - listOf( - Tilleggskompetanse( - avsluttetStatus = null, - eTag = null, - gyldig = - Periode( - fra = - LocalDate.of(2000, 1, 1).atStartOfDay(), - til = null - ), - id = null, - type = Kode(aktiv = true, oid = 7702, verdi = "1"), - ) - ) - ), - ), - ) - - val sykmedling = generateSykmelding() - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.OK - } - test("FT, Gyldig periode fom samme dag som genereringstidspunkt") { - val sykmedling = generateSykmelding() - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - tillegskompetanse = - listOf( - Tilleggskompetanse( - avsluttetStatus = null, - eTag = null, - gyldig = - Periode( - fra = sykmedling.signaturDato, - til = null - ), - id = null, - type = Kode(aktiv = true, oid = 7702, verdi = "1"), - ) - ) - ), - ), - ) - - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.OK - } - test("FT, ugylidg periode") { - val sykmedling = generateSykmelding() - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - tillegskompetanse = - listOf( - Tilleggskompetanse( - avsluttetStatus = null, - eTag = null, - gyldig = - Periode( - fra = sykmedling.signaturDato.plusDays(1), - til = null - ), - id = null, - type = Kode(aktiv = true, oid = 7702, verdi = "1"), - ) - ) - ), - ), - ) - - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.INVALID - } - - test("FT, ugylidg periode tom før genereringstidspunkt") { - val sykmedling = generateSykmelding() - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - tillegskompetanse = - listOf( - Tilleggskompetanse( - avsluttetStatus = null, - eTag = null, - gyldig = - Periode( - fra = sykmedling.signaturDato.minusDays(10), - til = sykmedling.signaturDato.minusDays(1) - ), - id = null, - type = Kode(aktiv = true, oid = 7702, verdi = "1"), - ) - ) - ), - ), - ) - - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.INVALID - } - - test("FT, gyldig periode tom samme som genereringstidspunkt") { - val sykmedling = generateSykmelding() - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - tillegskompetanse = - listOf( - Tilleggskompetanse( - avsluttetStatus = null, - eTag = null, - gyldig = - Periode( - fra = sykmedling.signaturDato.minusDays(10), - til = sykmedling.signaturDato - ), - id = null, - type = Kode(aktiv = true, oid = 7702, verdi = "1"), - ) - ) - ), - ), - ) - - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.OK - } - test("FT, ugyldig, feil tillegskompetanse type verdi") { - val sykmedling = generateSykmelding() - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - tillegskompetanse = - listOf( - Tilleggskompetanse( - avsluttetStatus = null, - eTag = null, - gyldig = - Periode( - fra = sykmedling.signaturDato.minusDays(10), - til = sykmedling.signaturDato - ), - id = null, - type = Kode(aktiv = true, oid = 7702, verdi = "2"), - ) - ) - ), - ), - ) - - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.INVALID - } - test("FT, ugyldig, feil tillegskompetanse er ikke aktiv") { - val sykmedling = generateSykmelding() - val behandler = - Behandler( - godkjenninger = - listOf( - Godkjenning( - autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), - helsepersonellkategori = - Kode(aktiv = true, oid = 0, verdi = "FT"), - tillegskompetanse = - listOf( - Tilleggskompetanse( - avsluttetStatus = null, - eTag = null, - gyldig = - Periode( - fra = - LocalDate.of(2000, 1, 1).atStartOfDay(), - til = null - ), - id = null, - type = Kode(aktiv = false, oid = 7702, verdi = "2"), - ) - ) - ), - ), - ) - - val mockRuleMetadata = mockk() - every { mockRuleMetadata.behandlerOgStartdato } returns - BehandlerOgStartdato(behandler, null) - - val result = ruleTree.runRules(sykmedling, mockRuleMetadata) - result.first.treeResult.status shouldBeEqualTo Status.INVALID - } - }, - ) diff --git a/src/test/kotlin/no/nav/syfo/rules/hpr/NewHPRTest.kt b/src/test/kotlin/no/nav/syfo/rules/hpr/NewHPRTest.kt new file mode 100644 index 00000000..ea50a9a0 --- /dev/null +++ b/src/test/kotlin/no/nav/syfo/rules/hpr/NewHPRTest.kt @@ -0,0 +1,889 @@ +package no.nav.syfo.rules.hpr + +import io.kotest.core.spec.style.FunSpec +import io.mockk.every +import io.mockk.mockk +import java.time.LocalDate +import no.nav.syfo.client.Behandler +import no.nav.syfo.client.Godkjenning +import no.nav.syfo.client.Kode +import no.nav.syfo.client.Periode +import no.nav.syfo.client.Tilleggskompetanse +import no.nav.syfo.generateSykmelding +import no.nav.syfo.model.Status +import no.nav.syfo.rules.tilbakedatering.toRuleMetadata +import no.nav.syfo.services.BehandlerOgStartdato +import no.nav.syfo.services.RuleMetadataSykmelding +import no.nav.syfo.services.SykmeldingMetadataInfo +import org.amshove.kluent.`should contain all` +import org.amshove.kluent.shouldBeEqualTo + +class NewHPRTest : + FunSpec( + { + val ruleTree = HPRRulesExecution() + + context("Testing hpr rules and checking the rule outcomes") { + test("har ikke aktiv autorisasjon, Status INVALID") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 1, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = + generateBehandler( + "LE", + autorisasjon = + Kode( + aktiv = false, + oid = 7704, + verdi = "1", + ), + ) + + val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = behandlerOgStartdato, + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.INVALID + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to false, + ) + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + ) shouldBeEqualTo status.first.ruleInputs + + status.first.treeResult.ruleHit shouldBeEqualTo + HPRRuleHit.BEHANDLER_IKKE_GYLDIG_I_HPR.ruleHit + } + + test("mangler autorisasjon, Status INVALID") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 1, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = + generateBehandler( + "LE", + autorisasjon = + Kode( + aktiv = true, + oid = 7702, + verdi = "19", + ), + ) + + val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = behandlerOgStartdato, + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.INVALID + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to false, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + ) shouldBeEqualTo status.first.ruleInputs + + status.first.treeResult.ruleHit shouldBeEqualTo + HPRRuleHit.BEHANDLER_MANGLER_AUTORISASJON_I_HPR.ruleHit + } + + test("LEGE har aktiv autorisasjon, Status OK") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 1, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = generateBehandler("LE") + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = BehandlerOgStartdato(behandler, null), + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.OK + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to true, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + ) shouldBeEqualTo status.first.ruleInputs + status.first.treeResult.ruleHit shouldBeEqualTo null + } + + test("TANNLEGE har aktiv autorisasjon, Status OK") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 1, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = generateBehandler("TL") + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = BehandlerOgStartdato(behandler, null), + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.OK + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to true, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + ) shouldBeEqualTo status.first.ruleInputs + status.first.treeResult.ruleHit shouldBeEqualTo null + } + + test("Manuellterapaut har aktiv autorisasjon, Status OK") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 1, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = generateBehandler("MT") + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = BehandlerOgStartdato(behandler, null), + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.OK + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to true, + HPRRules.SYKEFRAVAR_OVER_12_UKER to false, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + "fom" to sykmelding.perioder.first().fom, + "tom" to sykmelding.perioder.first().tom, + "startDatoSykefravær" to sykmelding.perioder.first().fom, + ) shouldBeEqualTo status.first.ruleInputs + status.first.treeResult.ruleHit shouldBeEqualTo null + } + + test( + "Manuellterapaut har aktiv autorisasjon, sykefravæt over 12 uker, Status INVALID" + ) { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 1, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = generateBehandler("MT") + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = + BehandlerOgStartdato( + behandler, + sykmelding.perioder.first().tom.minusDays(85), + ), + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.INVALID + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to true, + HPRRules.SYKEFRAVAR_OVER_12_UKER to true, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + "fom" to sykmelding.perioder.first().fom, + "tom" to sykmelding.perioder.first().tom, + "startDatoSykefravær" to + (ruleMetadataSykmelding.behandlerOgStartdato.startdato), + ) shouldBeEqualTo status.first.ruleInputs + status.first.treeResult.ruleHit shouldBeEqualTo + HPRRuleHit.BEHANDLER_MT_FT_KI_OVER_12_UKER.ruleHit + } + + test("behandler ikke riktig helsepersonell kategori, Status INVALID") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 1, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = generateBehandler("PL") + + val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = behandlerOgStartdato, + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.INVALID + status.first.rulePath.map { it.rule to it.ruleResult } `should contain all` + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to false, + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR to false, + HPRRules.BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR to false, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + ) shouldBeEqualTo status.first.ruleInputs + + status.first.treeResult.ruleHit shouldBeEqualTo + HPRRuleHit.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR.ruleHit + } + + test("FT uten tilleggsinfo, Status INVALID") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 4, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = generateBehandler("FT") + + val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = behandlerOgStartdato, + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.INVALID + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to false, + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR to false, + HPRRules.BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR to false, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + ) shouldBeEqualTo status.first.ruleInputs + + status.first.treeResult.ruleHit shouldBeEqualTo + HPRRuleHit.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR.ruleHit + } + + test("FT Gyldig") { + val behandler = + generateBehandler( + "FT", + tilleggskompetanse = + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = LocalDate.of(2000, 1, 1).atStartOfDay(), + til = null, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ) + + val sykmedling = generateSykmelding() + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.OK + result.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to false, + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR to true, + HPRRules.SYKEFRAVAR_OVER_12_UKER to false + ) + } + + test("FT Gyldig over 12 uker, INVALID") { + val behandler = + generateBehandler( + "FT", + tilleggskompetanse = + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = LocalDate.of(2000, 1, 1).atStartOfDay(), + til = null, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ) + + val sykmelding = generateSykmelding() + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = + BehandlerOgStartdato( + behandler, + sykmelding.perioder.first().tom.minusDays(85), + ), + ) + + val result = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + result.first.treeResult.status shouldBeEqualTo Status.INVALID + result.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to false, + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR to true, + HPRRules.SYKEFRAVAR_OVER_12_UKER to true + ) + } + + test("KI uten tilleggsinfo, Status INVALID") { + val sykmelding = + generateSykmelding( + fom = LocalDate.of(2020, 1, 1), + tom = LocalDate.of(2020, 4, 2), + behandletTidspunkt = LocalDate.of(2020, 1, 3).atStartOfDay(), + ) + val behandler = generateBehandler("KI") + + val behandlerOgStartdato = BehandlerOgStartdato(behandler, null) + + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = behandlerOgStartdato, + ) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + + status.first.treeResult.status shouldBeEqualTo Status.INVALID + status.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to false, + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR to false, + HPRRules.BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR to false, + ) + + mapOf( + "behandlerGodkjenninger" to behandler.godkjenninger, + ) shouldBeEqualTo status.first.ruleInputs + + status.first.treeResult.ruleHit shouldBeEqualTo + HPRRuleHit.BEHANDLER_IKKE_LE_KI_MT_TL_FT_I_HPR.ruleHit + } + + test("KI Gyldig") { + val behandler = + generateBehandler( + "KI", + tilleggskompetanse = + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = LocalDate.of(2000, 1, 1).atStartOfDay(), + til = null, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ) + + val sykmedling = generateSykmelding() + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.OK + result.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to false, + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR to false, + HPRRules.BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR to true, + HPRRules.SYKEFRAVAR_OVER_12_UKER to false + ) + } + + test("KI Gyldig over 12 uker, INVALID") { + val behandler = + generateBehandler( + "KI", + tilleggskompetanse = + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = LocalDate.of(2000, 1, 1).atStartOfDay(), + til = null, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ) + + val sykmelding = generateSykmelding() + val ruleMetadata = sykmelding.toRuleMetadata() + + val ruleMetadataSykmelding = + RuleMetadataSykmelding( + ruleMetadata = ruleMetadata, + sykmeldingMetadataInfo = SykmeldingMetadataInfo(null, emptyList()), + doctorSuspensjon = false, + behandlerOgStartdato = + BehandlerOgStartdato( + behandler, + sykmelding.perioder.first().tom.minusDays(85), + ), + ) + + val result = ruleTree.runRules(sykmelding, ruleMetadataSykmelding) + result.first.treeResult.status shouldBeEqualTo Status.INVALID + result.first.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + HPRRules.BEHANDLER_GYLIDG_I_HPR to true, + HPRRules.BEHANDLER_HAR_AUTORISASJON_I_HPR to true, + HPRRules.BEHANDLER_ER_LEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_TANNLEGE_I_HPR to false, + HPRRules.BEHANDLER_ER_MANUELLTERAPEUT_I_HPR to false, + HPRRules.BEHANDLER_ER_FT_MED_TILLEGSKOMPETANSE_I_HPR to false, + HPRRules.BEHANDLER_ER_KI_MED_TILLEGSKOMPETANSE_I_HPR to true, + HPRRules.SYKEFRAVAR_OVER_12_UKER to true + ) + } + + test("FT, Gyldig periode fom samme dag som genereringstidspunkt") { + val sykmedling = generateSykmelding() + val behandler = + Behandler( + godkjenninger = + listOf( + Godkjenning( + autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), + helsepersonellkategori = + Kode(aktiv = true, oid = 0, verdi = "FT"), + tillegskompetanse = + listOf( + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = sykmedling.signaturDato, + til = null, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ), + ), + ), + ) + + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.OK + } + test("FT, ugylidg periode") { + val sykmedling = generateSykmelding() + val behandler = + Behandler( + godkjenninger = + listOf( + Godkjenning( + autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), + helsepersonellkategori = + Kode(aktiv = true, oid = 0, verdi = "FT"), + tillegskompetanse = + listOf( + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = + sykmedling.signaturDato.plusDays(1), + til = null, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ), + ), + ), + ) + + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.INVALID + } + + test("FT, ugylidg periode tom før genereringstidspunkt") { + val sykmedling = generateSykmelding() + val behandler = + Behandler( + godkjenninger = + listOf( + Godkjenning( + autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), + helsepersonellkategori = + Kode(aktiv = true, oid = 0, verdi = "FT"), + tillegskompetanse = + listOf( + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = + sykmedling.signaturDato.minusDays( + 10, + ), + til = + sykmedling.signaturDato.minusDays( + 1, + ), + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ), + ), + ), + ) + + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.INVALID + } + + test("FT, gyldig periode tom samme som genereringstidspunkt") { + val sykmedling = generateSykmelding() + val behandler = + Behandler( + godkjenninger = + listOf( + Godkjenning( + autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), + helsepersonellkategori = + Kode(aktiv = true, oid = 0, verdi = "FT"), + tillegskompetanse = + listOf( + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = + sykmedling.signaturDato.minusDays( + 10, + ), + til = sykmedling.signaturDato, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "1", + ), + ), + ), + ), + ), + ) + + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.OK + } + test("FT, ugyldig, feil tillegskompetanse type verdi") { + val sykmedling = generateSykmelding() + val behandler = + Behandler( + godkjenninger = + listOf( + Godkjenning( + autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), + helsepersonellkategori = + Kode(aktiv = true, oid = 0, verdi = "FT"), + tillegskompetanse = + listOf( + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = + sykmedling.signaturDato.minusDays( + 10, + ), + til = sykmedling.signaturDato, + ), + id = null, + type = + Kode( + aktiv = true, + oid = 7702, + verdi = "2", + ), + ), + ), + ), + ), + ) + + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.INVALID + } + test("FT, ugyldig, feil tillegskompetanse er ikke aktiv") { + val sykmedling = generateSykmelding() + val behandler = + Behandler( + godkjenninger = + listOf( + Godkjenning( + autorisasjon = Kode(aktiv = true, oid = 7704, verdi = "18"), + helsepersonellkategori = + Kode(aktiv = true, oid = 0, verdi = "FT"), + tillegskompetanse = + listOf( + Tilleggskompetanse( + avsluttetStatus = null, + eTag = null, + gyldig = + Periode( + fra = + LocalDate.of(2000, 1, 1) + .atStartOfDay(), + til = null, + ), + id = null, + type = + Kode( + aktiv = false, + oid = 7702, + verdi = "2", + ), + ), + ), + ), + ), + ) + + val mockRuleMetadata = mockk() + every { mockRuleMetadata.behandlerOgStartdato } returns + BehandlerOgStartdato(behandler, null) + + val result = ruleTree.runRules(sykmedling, mockRuleMetadata) + result.first.treeResult.status shouldBeEqualTo Status.INVALID + } + } + }, + ) + +private fun generateBehandler( + helsepersonellKategori: String, + tilleggskompetanse: Tilleggskompetanse? = null, + autorisasjon: Kode = + Kode( + aktiv = true, + oid = 7704, + verdi = "18", + ), +) = + Behandler( + listOf( + Godkjenning( + autorisasjon = autorisasjon, + helsepersonellkategori = + Kode( + aktiv = true, + oid = 0, + verdi = helsepersonellKategori, + ), + tillegskompetanse = + tilleggskompetanse?.let { + listOf( + tilleggskompetanse, + ) + } + ?: emptyList(), + ), + ), + )