From f415edd80ee52ae56c05af606eeaa29fa6b10704 Mon Sep 17 00:00:00 2001 From: Andreas Sagen Aspaas Date: Mon, 25 Sep 2023 14:47:34 +0200 Subject: [PATCH] =?UTF-8?q?Add=20juridisk=20henvisning=20for=20pasienter?= =?UTF-8?q?=20under=2013=20=C3=A5r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 ++--- .../PatientAgeUnder13RuleHit.kt | 18 ++++ .../PatientAgeUnder13RuleTree.kt | 38 +++++++ .../PatientAgeUnder13RulesExecution.kt | 50 ++++++++++ .../no/nav/syfo/rules/patientunder13/Rules.kt | 24 +++++ .../no/nav/syfo/rules/validation/Rules.kt | 14 --- .../rules/validation/ValidationRuleHit.kt | 9 -- .../rules/validation/ValidationRuleTree.kt | 27 +++-- .../nav/syfo/services/RuleExecutionService.kt | 3 + .../patientunder13/PationAgeUnder13Test.kt | 98 +++++++++++++++++++ .../syfo/rules/validation/ValidationTest.kt | 46 --------- 11 files changed, 252 insertions(+), 97 deletions(-) create mode 100644 src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RuleHit.kt create mode 100644 src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RuleTree.kt create mode 100644 src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RulesExecution.kt create mode 100644 src/main/kotlin/no/nav/syfo/rules/patientunder13/Rules.kt create mode 100644 src/test/kotlin/no/nav/syfo/rules/patientunder13/PationAgeUnder13Test.kt diff --git a/README.md b/README.md index 15f0d60d..4e1dd5f4 100644 --- a/README.md +++ b/README.md @@ -121,18 +121,16 @@ graph TD Validation ```mermaid graph TD - root(PASIENT_YNGRE_ENN_13) -->|Yes| root_PASIENT_YNGRE_ENN_13_INVALID(INVALID):::invalid - root(PASIENT_YNGRE_ENN_13) -->|No| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON(UGYLDIG_REGELSETTVERSJON) - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON(UGYLDIG_REGELSETTVERSJON) -->|Yes| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_INVALID(INVALID):::invalid - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON(UGYLDIG_REGELSETTVERSJON) -->|No| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39(MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39(MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) -->|Yes| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_INVALID(INVALID):::invalid - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39(MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) -->|No| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE(UGYLDIG_ORGNR_LENGDE) - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE(UGYLDIG_ORGNR_LENGDE) -->|Yes| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_INVALID(INVALID):::invalid - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE(UGYLDIG_ORGNR_LENGDE) -->|No| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR(AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR(AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|Yes| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_INVALID(INVALID):::invalid - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR(AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|No| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR(BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR(BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|Yes| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR_INVALID(INVALID):::invalid - root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR(BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|No| root_PASIENT_YNGRE_ENN_13_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR_OK(OK):::ok + root(UGYLDIG_REGELSETTVERSJON) -->|Yes| root_UGYLDIG_REGELSETTVERSJON_INVALID(INVALID):::invalid + root(UGYLDIG_REGELSETTVERSJON) -->|No| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39(MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39(MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) -->|Yes| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_INVALID(INVALID):::invalid + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39(MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) -->|No| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE(UGYLDIG_ORGNR_LENGDE) + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE(UGYLDIG_ORGNR_LENGDE) -->|Yes| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_INVALID(INVALID):::invalid + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE(UGYLDIG_ORGNR_LENGDE) -->|No| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR(AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR(AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|Yes| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_INVALID(INVALID):::invalid + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR(AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|No| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR(BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR(BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|Yes| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR_INVALID(INVALID):::invalid + root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR(BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) -->|No| root_UGYLDIG_REGELSETTVERSJON_MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39_UGYLDIG_ORGNR_LENGDE_AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR_BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR_OK(OK):::ok 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/patientunder13/PatientAgeUnder13RuleHit.kt b/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RuleHit.kt new file mode 100644 index 00000000..201de44d --- /dev/null +++ b/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RuleHit.kt @@ -0,0 +1,18 @@ +package no.nav.syfo.rules.patientunder13 + +import no.nav.syfo.model.Status +import no.nav.syfo.rules.common.RuleHit + +enum class PatientAgeUnder13RuleHit( + val ruleHit: RuleHit, +) { + PASIENT_YNGRE_ENN_13( + ruleHit = + RuleHit( + rule = "PASIENT_YNGRE_ENN_13", + status = Status.INVALID, + messageForSender = "Pasienten er under 13 år. Sykmelding kan ikke benyttes.", + messageForUser = "Pasienten er under 13 år. Sykmelding kan ikke benyttes.", + ), + ), +} diff --git a/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RuleTree.kt b/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RuleTree.kt new file mode 100644 index 00000000..8888959c --- /dev/null +++ b/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RuleTree.kt @@ -0,0 +1,38 @@ +package no.nav.syfo.rules.patientunder13 + +import no.nav.syfo.model.Status +import no.nav.syfo.model.Status.INVALID +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 PatientAgeUnder13Rules { + PASIENT_YNGRE_ENN_13, +} + +val patientAgeUnder13RuleTree = + tree(PatientAgeUnder13Rules.PASIENT_YNGRE_ENN_13) { + yes(INVALID, PatientAgeUnder13RuleHit.PASIENT_YNGRE_ENN_13) + no(OK) + } + +internal fun RuleNode.yes( + status: Status, + ruleHit: PatientAgeUnder13RuleHit? = null +) { + yes(RuleResult(status, ruleHit?.ruleHit)) +} + +internal fun RuleNode.no( + status: Status, + ruleHit: PatientAgeUnder13RuleHit? = null +) { + no(RuleResult(status, ruleHit?.ruleHit)) +} + +fun getRule(rules: PatientAgeUnder13Rules): Rule { + return when (rules) { + PatientAgeUnder13Rules.PASIENT_YNGRE_ENN_13 -> pasientUnder13Aar + } +} diff --git a/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RulesExecution.kt b/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RulesExecution.kt new file mode 100644 index 00000000..28932b34 --- /dev/null +++ b/src/main/kotlin/no/nav/syfo/rules/patientunder13/PatientAgeUnder13RulesExecution.kt @@ -0,0 +1,50 @@ +package no.nav.syfo.rules.patientunder13 + +import no.nav.syfo.logger +import no.nav.syfo.model.Sykmelding +import no.nav.syfo.model.juridisk.JuridiskHenvisning +import no.nav.syfo.model.juridisk.Lovverk +import no.nav.syfo.rules.common.MedJuridisk +import no.nav.syfo.rules.common.RuleExecution +import no.nav.syfo.rules.common.RuleResult +import no.nav.syfo.rules.dsl.ResultNode +import no.nav.syfo.rules.dsl.RuleNode +import no.nav.syfo.rules.dsl.TreeNode +import no.nav.syfo.rules.dsl.TreeOutput +import no.nav.syfo.rules.dsl.join +import no.nav.syfo.rules.dsl.printRulePath +import no.nav.syfo.services.RuleMetadataSykmelding + +typealias PatientAgeUnder13TreeOutput = TreeOutput + +class PatientAgeUnder13RulesExecution( + val rootNode: TreeNode = patientAgeUnder13RuleTree +) : RuleExecution { + override fun runRules(sykmelding: Sykmelding, ruleMetadata: RuleMetadataSykmelding) = + rootNode.evaluate(sykmelding, ruleMetadata).also { patientAgeUnder13 -> + logger.info("Rules ${sykmelding.id}, ${patientAgeUnder13.printRulePath()}") + } to + MedJuridisk( + JuridiskHenvisning( + lovverk = Lovverk.FOLKETRYGDLOVEN, + paragraf = "8-3", + ledd = 1, + punktum = null, + bokstav = null, + ), + ) +} + +private fun TreeNode.evaluate( + sykmelding: Sykmelding, + ruleMetadata: RuleMetadataSykmelding, +): PatientAgeUnder13TreeOutput = + when (this) { + is ResultNode -> PatientAgeUnder13TreeOutput(treeResult = result) + is RuleNode -> { + val rule = getRule(rule) + val result = rule(sykmelding, ruleMetadata) + val childNode = if (result.ruleResult) yes else no + result join childNode.evaluate(sykmelding, ruleMetadata) + } + } diff --git a/src/main/kotlin/no/nav/syfo/rules/patientunder13/Rules.kt b/src/main/kotlin/no/nav/syfo/rules/patientunder13/Rules.kt new file mode 100644 index 00000000..f077a75a --- /dev/null +++ b/src/main/kotlin/no/nav/syfo/rules/patientunder13/Rules.kt @@ -0,0 +1,24 @@ +package no.nav.syfo.rules.patientunder13 + +import no.nav.syfo.model.Sykmelding +import no.nav.syfo.rules.dsl.RuleResult +import no.nav.syfo.services.RuleMetadataSykmelding +import no.nav.syfo.services.sortedTOMDate + +typealias Rule = + (sykmelding: Sykmelding, ruleMetadataSykmelding: RuleMetadataSykmelding) -> RuleResult + +typealias PatientAgeOver70Rule = Rule + +val pasientUnder13Aar: PatientAgeOver70Rule = { sykmelding, ruleMetadata -> + val sisteTomDato = sykmelding.perioder.sortedTOMDate().last() + val pasientFodselsdato = ruleMetadata.ruleMetadata.pasientFodselsdato + + val pasientUnder13Aar = sisteTomDato < pasientFodselsdato.plusYears(13) + + RuleResult( + ruleInputs = mapOf("pasientUnder13Aar" to pasientUnder13Aar), + rule = PatientAgeUnder13Rules.PASIENT_YNGRE_ENN_13, + ruleResult = pasientUnder13Aar, + ) +} diff --git a/src/main/kotlin/no/nav/syfo/rules/validation/Rules.kt b/src/main/kotlin/no/nav/syfo/rules/validation/Rules.kt index 57690454..dc0d13db 100644 --- a/src/main/kotlin/no/nav/syfo/rules/validation/Rules.kt +++ b/src/main/kotlin/no/nav/syfo/rules/validation/Rules.kt @@ -6,25 +6,11 @@ import no.nav.syfo.model.Sykmelding import no.nav.syfo.questions.QuestionGroup import no.nav.syfo.rules.dsl.RuleResult import no.nav.syfo.services.daysBetween -import no.nav.syfo.services.sortedTOMDate typealias Rule = (sykmelding: Sykmelding, ruleMetadata: RuleMetadata) -> RuleResult typealias ValidationRule = Rule -val pasientUnder13Aar: ValidationRule = { sykmelding, ruleMetadata -> - val sisteTomDato = sykmelding.perioder.sortedTOMDate().last() - val pasientFodselsdato = ruleMetadata.pasientFodselsdato - - val pasientUnder13Aar = sisteTomDato < pasientFodselsdato.plusYears(13) - - RuleResult( - ruleInputs = mapOf("pasientUnder13Aar" to pasientUnder13Aar), - rule = ValidationRules.PASIENT_YNGRE_ENN_13, - ruleResult = pasientUnder13Aar, - ) -} - val ugyldigRegelsettversjon: ValidationRule = { _, ruleMetadata -> val rulesetVersion = ruleMetadata.rulesetVersion diff --git a/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleHit.kt b/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleHit.kt index 014bc902..2173d6ba 100644 --- a/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleHit.kt +++ b/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleHit.kt @@ -6,15 +6,6 @@ import no.nav.syfo.rules.common.RuleHit enum class ValidationRuleHit( val ruleHit: RuleHit, ) { - PASIENT_YNGRE_ENN_13( - ruleHit = - RuleHit( - rule = "PASIENT_YNGRE_ENN_13", - status = Status.INVALID, - messageForSender = "Pasienten er under 13 år. Sykmelding kan ikke benyttes.", - messageForUser = "Pasienten er under 13 år. Sykmelding kan ikke benyttes.", - ), - ), UGYLDIG_REGELSETTVERSJON( ruleHit = RuleHit( diff --git a/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleTree.kt b/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleTree.kt index 9aa86092..d8b9a681 100644 --- a/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleTree.kt +++ b/src/main/kotlin/no/nav/syfo/rules/validation/ValidationRuleTree.kt @@ -8,7 +8,6 @@ import no.nav.syfo.rules.dsl.RuleNode import no.nav.syfo.rules.dsl.tree enum class ValidationRules { - PASIENT_YNGRE_ENN_13, UGYLDIG_REGELSETTVERSJON, MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39, UGYLDIG_ORGNR_LENGDE, @@ -17,20 +16,17 @@ enum class ValidationRules { } val validationRuleTree = - tree(ValidationRules.PASIENT_YNGRE_ENN_13) { - yes(INVALID, ValidationRuleHit.PASIENT_YNGRE_ENN_13) - no(ValidationRules.UGYLDIG_REGELSETTVERSJON) { - yes(INVALID, ValidationRuleHit.UGYLDIG_REGELSETTVERSJON) - no(ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) { - yes(INVALID, ValidationRuleHit.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) - no(ValidationRules.UGYLDIG_ORGNR_LENGDE) { - yes(INVALID, ValidationRuleHit.UGYLDIG_ORGNR_LENGDE) - no(ValidationRules.AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) { - yes(INVALID, ValidationRuleHit.AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) - no(ValidationRules.BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) { - yes(INVALID, ValidationRuleHit.BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) - no(OK) - } + tree(ValidationRules.UGYLDIG_REGELSETTVERSJON) { + yes(INVALID, ValidationRuleHit.UGYLDIG_REGELSETTVERSJON) + no(ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) { + yes(INVALID, ValidationRuleHit.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39) + no(ValidationRules.UGYLDIG_ORGNR_LENGDE) { + yes(INVALID, ValidationRuleHit.UGYLDIG_ORGNR_LENGDE) + no(ValidationRules.AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) { + yes(INVALID, ValidationRuleHit.AVSENDER_FNR_ER_SAMME_SOM_PASIENT_FNR) + no(ValidationRules.BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) { + yes(INVALID, ValidationRuleHit.BEHANDLER_FNR_ER_SAMME_SOM_PASIENT_FNR) + no(OK) } } } @@ -53,7 +49,6 @@ internal fun RuleNode.no( fun getRule(rules: ValidationRules): Rule { return when (rules) { - ValidationRules.PASIENT_YNGRE_ENN_13 -> pasientUnder13Aar ValidationRules.UGYLDIG_REGELSETTVERSJON -> ugyldigRegelsettversjon ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39 -> manglendeDynamiskesporsmaalversjon2uke39 diff --git a/src/main/kotlin/no/nav/syfo/services/RuleExecutionService.kt b/src/main/kotlin/no/nav/syfo/services/RuleExecutionService.kt index d6f63ff2..b62aee2f 100644 --- a/src/main/kotlin/no/nav/syfo/services/RuleExecutionService.kt +++ b/src/main/kotlin/no/nav/syfo/services/RuleExecutionService.kt @@ -16,6 +16,8 @@ import no.nav.syfo.rules.legesuspensjon.LegeSuspensjonRulesExecution import no.nav.syfo.rules.legesuspensjon.legeSuspensjonRuleTree import no.nav.syfo.rules.patientageover70.PatientAgeOver70RulesExecution import no.nav.syfo.rules.patientageover70.patientAgeOver70RuleTree +import no.nav.syfo.rules.patientunder13.PatientAgeUnder13RulesExecution +import no.nav.syfo.rules.patientunder13.patientAgeUnder13RuleTree import no.nav.syfo.rules.periodlogic.PeriodLogicRulesExecution import no.nav.syfo.rules.periodlogic.periodLogicRuleTree import no.nav.syfo.rules.tilbakedatering.TilbakedateringRulesExecution @@ -31,6 +33,7 @@ class RuleExecutionService() { HPRRulesExecution(hprRuleTree), ArbeidsuforhetRulesExecution(arbeidsuforhetRuleTree), ValidationRulesExecution(validationRuleTree), + PatientAgeUnder13RulesExecution(patientAgeUnder13RuleTree), PatientAgeOver70RulesExecution(patientAgeOver70RuleTree), PeriodLogicRulesExecution(periodLogicRuleTree), TilbakedateringRulesExecution(tilbakedateringRuleTree), diff --git a/src/test/kotlin/no/nav/syfo/rules/patientunder13/PationAgeUnder13Test.kt b/src/test/kotlin/no/nav/syfo/rules/patientunder13/PationAgeUnder13Test.kt new file mode 100644 index 00000000..0803191a --- /dev/null +++ b/src/test/kotlin/no/nav/syfo/rules/patientunder13/PationAgeUnder13Test.kt @@ -0,0 +1,98 @@ +package no.nav.syfo.rules.patientunder13 + +import io.kotest.core.spec.style.FunSpec +import java.time.LocalDate +import no.nav.syfo.generateMedisinskVurdering +import no.nav.syfo.generateSykmelding +import no.nav.syfo.model.Diagnose +import no.nav.syfo.model.RuleMetadata +import no.nav.syfo.model.Status +import no.nav.syfo.rules.validation.generatePersonNumber +import no.nav.syfo.rules.validation.ruleMetadataSykmelding +import org.amshove.kluent.shouldBeEqualTo + +class PationAgeUnder13Test : + FunSpec({ + val ruleTree = PatientAgeUnder13RulesExecution() + + context("Test patient under") { + test("Alt ok, Status OK") { + val person14Years = LocalDate.now().minusYears(14) + + val sykmelding = + generateSykmelding( + medisinskVurdering = + generateMedisinskVurdering( + hovedDiagnose = + Diagnose( + system = "2.16.578.1.12.4.1.1.7170", + kode = "R24", + tekst = "Blodig oppspytt/hemoptyse", + ), + ), + ) + + val ruleMetadata = + RuleMetadata( + signatureDate = LocalDate.now().atStartOfDay(), + receivedDate = LocalDate.now().atStartOfDay(), + behandletTidspunkt = LocalDate.now().atStartOfDay(), + patientPersonNumber = generatePersonNumber(person14Years, false), + rulesetVersion = null, + legekontorOrgnr = null, + tssid = null, + avsenderFnr = "2", + pasientFodselsdato = person14Years, + ) + + val ruleMetadataSykmelding = ruleMetadataSykmelding(ruleMetadata) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding).first + + status.treeResult.status shouldBeEqualTo Status.OK + status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf(PatientAgeUnder13Rules.PASIENT_YNGRE_ENN_13 to false) + + mapOf( + "pasientUnder13Aar" to false, + ) shouldBeEqualTo status.ruleInputs + + status.treeResult.ruleHit shouldBeEqualTo null + } + + test("Pasient under 13 Aar, Status INVALID") { + val person12Years = LocalDate.now().minusYears(12) + + val sykmelding = generateSykmelding() + + val ruleMetadata = + RuleMetadata( + signatureDate = LocalDate.now().atStartOfDay(), + receivedDate = LocalDate.now().atStartOfDay(), + behandletTidspunkt = LocalDate.now().atStartOfDay(), + patientPersonNumber = generatePersonNumber(person12Years, false), + rulesetVersion = null, + legekontorOrgnr = null, + tssid = null, + avsenderFnr = "2", + pasientFodselsdato = person12Years, + ) + val ruleMetadataSykmelding = ruleMetadataSykmelding(ruleMetadata) + + val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding).first + + status.treeResult.status shouldBeEqualTo Status.INVALID + status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo + listOf( + PatientAgeUnder13Rules.PASIENT_YNGRE_ENN_13 to true, + ) + + mapOf( + "pasientUnder13Aar" to true, + ) shouldBeEqualTo status.ruleInputs + + status.treeResult.ruleHit shouldBeEqualTo + PatientAgeUnder13RuleHit.PASIENT_YNGRE_ENN_13.ruleHit + } + } + }) diff --git a/src/test/kotlin/no/nav/syfo/rules/validation/ValidationTest.kt b/src/test/kotlin/no/nav/syfo/rules/validation/ValidationTest.kt index 5749056c..1f9de147 100644 --- a/src/test/kotlin/no/nav/syfo/rules/validation/ValidationTest.kt +++ b/src/test/kotlin/no/nav/syfo/rules/validation/ValidationTest.kt @@ -60,7 +60,6 @@ class ValidationTest : status.treeResult.status shouldBeEqualTo Status.OK status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo listOf( - ValidationRules.PASIENT_YNGRE_ENN_13 to false, ValidationRules.UGYLDIG_REGELSETTVERSJON to false, ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39 to false, ValidationRules.UGYLDIG_ORGNR_LENGDE to false, @@ -69,7 +68,6 @@ class ValidationTest : ) mapOf( - "pasientUnder13Aar" to false, "ugyldigRegelsettversjon" to false, "manglendeDynamiskesporsmaalversjon2uke39" to false, "ugyldingOrgNummerLengde" to false, @@ -79,40 +77,6 @@ class ValidationTest : status.treeResult.ruleHit shouldBeEqualTo null } - test("Pasient under 13 Aar, Status INVALID") { - val person12Years = LocalDate.now().minusYears(12) - - val sykmelding = generateSykmelding() - - val ruleMetadata = - RuleMetadata( - signatureDate = LocalDate.now().atStartOfDay(), - receivedDate = LocalDate.now().atStartOfDay(), - behandletTidspunkt = LocalDate.now().atStartOfDay(), - patientPersonNumber = generatePersonNumber(person12Years, false), - rulesetVersion = null, - legekontorOrgnr = null, - tssid = null, - avsenderFnr = "2", - pasientFodselsdato = person12Years, - ) - val ruleMetadataSykmelding = ruleMetadataSykmelding(ruleMetadata) - - val status = ruleTree.runRules(sykmelding, ruleMetadataSykmelding).first - - status.treeResult.status shouldBeEqualTo Status.INVALID - status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo - listOf( - ValidationRules.PASIENT_YNGRE_ENN_13 to true, - ) - - mapOf( - "pasientUnder13Aar" to true, - ) shouldBeEqualTo status.ruleInputs - - status.treeResult.ruleHit shouldBeEqualTo - ValidationRuleHit.PASIENT_YNGRE_ENN_13.ruleHit - } test("Ugyldig regelsettversjon, Status INVALID") { val person31Years = LocalDate.now().minusYears(31) @@ -149,12 +113,10 @@ class ValidationTest : status.treeResult.status shouldBeEqualTo Status.INVALID status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo listOf( - ValidationRules.PASIENT_YNGRE_ENN_13 to false, ValidationRules.UGYLDIG_REGELSETTVERSJON to true, ) mapOf( - "pasientUnder13Aar" to false, "ugyldigRegelsettversjon" to true, ) shouldBeEqualTo status.ruleInputs @@ -194,13 +156,11 @@ class ValidationTest : status.treeResult.status shouldBeEqualTo Status.INVALID status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo listOf( - ValidationRules.PASIENT_YNGRE_ENN_13 to false, ValidationRules.UGYLDIG_REGELSETTVERSJON to false, ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39 to true, ) mapOf( - "pasientUnder13Aar" to false, "ugyldigRegelsettversjon" to false, "manglendeDynamiskesporsmaalversjon2uke39" to true, ) shouldBeEqualTo status.ruleInputs @@ -244,14 +204,12 @@ class ValidationTest : status.treeResult.status shouldBeEqualTo Status.INVALID status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo listOf( - ValidationRules.PASIENT_YNGRE_ENN_13 to false, ValidationRules.UGYLDIG_REGELSETTVERSJON to false, ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39 to false, ValidationRules.UGYLDIG_ORGNR_LENGDE to true, ) mapOf( - "pasientUnder13Aar" to false, "ugyldigRegelsettversjon" to false, "manglendeDynamiskesporsmaalversjon2uke39" to false, "ugyldingOrgNummerLengde" to true, @@ -297,7 +255,6 @@ class ValidationTest : status.treeResult.status shouldBeEqualTo Status.INVALID status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo listOf( - ValidationRules.PASIENT_YNGRE_ENN_13 to false, ValidationRules.UGYLDIG_REGELSETTVERSJON to false, ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39 to false, ValidationRules.UGYLDIG_ORGNR_LENGDE to false, @@ -305,7 +262,6 @@ class ValidationTest : ) mapOf( - "pasientUnder13Aar" to false, "ugyldigRegelsettversjon" to false, "manglendeDynamiskesporsmaalversjon2uke39" to false, "ugyldingOrgNummerLengde" to false, @@ -362,7 +318,6 @@ class ValidationTest : status.treeResult.status shouldBeEqualTo Status.INVALID status.rulePath.map { it.rule to it.ruleResult } shouldBeEqualTo listOf( - ValidationRules.PASIENT_YNGRE_ENN_13 to false, ValidationRules.UGYLDIG_REGELSETTVERSJON to false, ValidationRules.MANGLENDE_DYNAMISKE_SPOERSMAL_VERSJON2_UKE_39 to false, ValidationRules.UGYLDIG_ORGNR_LENGDE to false, @@ -371,7 +326,6 @@ class ValidationTest : ) mapOf( - "pasientUnder13Aar" to false, "ugyldigRegelsettversjon" to false, "manglendeDynamiskesporsmaalversjon2uke39" to false, "ugyldingOrgNummerLengde" to false,