Skip to content
This repository has been archived by the owner on Feb 7, 2024. It is now read-only.

Commit

Permalink
AE-2029: Fix henkilo and yritys -osapuoli id collision in käskypäätös…
Browse files Browse the repository at this point in the history
… and sakkopäätös toimenpide

- Henkilosapuoli and yritysosapuoli ids can be same so osapuoli-specific-data could get mixed up between the two if present in the same toimenpide
- Added osapuoli-type to osapuoli-specific-data which is then checked together with the osapuoli-id if the osapuoli is the correct one
  • Loading branch information
Juholei committed Nov 17, 2023
1 parent f43f106 commit 793f9fb
Show file tree
Hide file tree
Showing 11 changed files with 412 additions and 77 deletions.
39 changes: 25 additions & 14 deletions etp-backend/src/main/clj/solita/etp/schema/valvonta_kaytto.clj
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,14 @@

(def KarajaoikeusId (apply schema/enum (range 0 20)))

(def OsapuoliType (schema/enum "henkilo" "yritys"))

(def KaskypaatosVarsinainenPaatosOsapuoliSpecificData
(schema/conditional
;; Osapuoli has a document and has answered to kuulemiskirje, so all fields are required
(every-pred toimenpide/osapuoli-has-document? toimenpide/recipient-answered?)
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:hallinto-oikeus-id HallintoOikeusId
:document schema/Bool
:recipient-answered schema/Bool
Expand All @@ -64,14 +67,16 @@
;; Osapuoli has document but has not answered to kuulemiskirje, so answer and statement are not allowed
toimenpide/osapuoli-has-document?
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:hallinto-oikeus-id HallintoOikeusId
:document schema/Bool
:recipient-answered schema/Bool}

;; Osapuoli has no document so no other fields are allowed
:else
{:osapuoli-id common-schema/Key
:document schema/Bool}))
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:document schema/Bool}))

(def KaskypaatosVarsinainenPaatosData {:fine common-schema/NonNegative
:osapuoli-specific-data [KaskypaatosVarsinainenPaatosOsapuoliSpecificData]
Expand All @@ -83,13 +88,15 @@
(schema/conditional
toimenpide/osapuoli-has-document?
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:karajaoikeus-id KarajaoikeusId
:haastemies-email common-schema/Email
:document schema/Bool}

:else
{:osapuoli-id common-schema/Key
:document schema/Bool}))
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:document schema/Bool}))

(def KaskypaatosTiedoksiantoHaastemiesData
{:osapuoli-specific-data [KaskypaatosTiedoksiantoHaastemiesOsapuoliSpecificData]})
Expand All @@ -101,19 +108,21 @@
;; Osapuoli has a document so all fields are required to have values
;; answer-commentary fields are optional but if present, values are required
toimenpide/osapuoli-has-document?
{:osapuoli-id common-schema/Key
:hallinto-oikeus-id HallintoOikeusId
:document schema/Bool
:recipient-answered schema/Bool
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:hallinto-oikeus-id HallintoOikeusId
:document schema/Bool
:recipient-answered schema/Bool
(schema/optional-key :answer-commentary-fi) schema/Str
(schema/optional-key :answer-commentary-sv) schema/Str
:statement-fi schema/Str
:statement-sv schema/Str}
:statement-fi schema/Str
:statement-sv schema/Str}

;; Osapuoli has no document so no other fields are allowed
:else
{:osapuoli-id common-schema/Key
:document schema/Bool}))
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:document schema/Bool}))

(def SakkopaatosVarsinainenPaatosData {:fine common-schema/NonNegative
:osapuoli-specific-data [SakkopaatosVarsinainenPaatosOsapuoliSpecificData]
Expand All @@ -125,13 +134,15 @@
(schema/conditional
toimenpide/osapuoli-has-document?
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:karajaoikeus-id KarajaoikeusId
:haastemies-email common-schema/Email
:document schema/Bool}

:else
{:osapuoli-id common-schema/Key
:document schema/Bool}))
{:osapuoli-id common-schema/Key
:osapuoli-type OsapuoliType
:document schema/Bool}))

(def SakkopaatosTiedoksiantoHaastemiesData
{:osapuoli-specific-data [SakkopaatosTiedoksiantoHaastemiesOsapuoliSpecificData]})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,11 @@
:tietopyynto {:tietopyynto-pvm (time/format-date (:rfi-request dokumentit))
:tietopyynto-kehotus-pvm (time/format-date (:rfi-order dokumentit))}
:tiedoksi (map (partial tiedoksi-saaja roolit) tiedoksi)
:tyyppikohtaiset-tiedot (type-specific-data/format-type-specific-data db toimenpide (:id osapuoli))
:tyyppikohtaiset-tiedot (type-specific-data/format-type-specific-data
db
toimenpide
(:id osapuoli)
(osapuoli/osapuoli->osapuoli-type osapuoli))
:aiemmat-toimenpiteet (previous-toimenpide/formatted-previous-toimenpide-data db toimenpide (:id valvonta))})

(defn- request-id [valvonta-id toimenpide-id]
Expand Down Expand Up @@ -250,16 +254,20 @@
:type-specific-data
:osapuoli-specific-data
(filter toimenpide/osapuoli-has-document?)
(map :osapuoli-id)
set)]
(filter #(contains? osapuolet-with-document (:id %)) osapuolet))
(map #(select-keys % [:osapuoli-id :osapuoli-type])))
henkilo-osapuolet-with-documents (map :osapuoli-id (filter #(= (:osapuoli-type %) "henkilo") osapuolet-with-document))
yritys-osapuolet-with-documents (map :osapuoli-id (filter #(= (:osapuoli-type %) "yritys") osapuolet-with-document))]
(concat
(filter #(contains? (set henkilo-osapuolet-with-documents) (:id %)) (filter osapuoli/henkilo? osapuolet))
(filter #(contains? (set yritys-osapuolet-with-documents) (:id %)) (filter osapuoli/yritys? osapuolet))))
osapuolet))

(defn store-hallinto-oikeus-attachment! [db aws-s3-client valvonta-id toimenpide osapuoli]
(let [hallinto-oikeus-id (-> toimenpide
(let [osapuoli-type (osapuoli/osapuoli->osapuoli-type osapuoli)
hallinto-oikeus-id (-> toimenpide
:type-specific-data
:osapuoli-specific-data
(type-specific-data/find-administrative-court-id-from-osapuoli-specific-data (:id osapuoli)))
(type-specific-data/find-administrative-court-id-from-osapuoli-specific-data (:id osapuoli) osapuoli-type))
attachment (hao-attachment/attachment-for-hallinto-oikeus-id db hallinto-oikeus-id)]
(store/store-hallinto-oikeus-attachment! aws-s3-client valvonta-id (:id toimenpide) osapuoli attachment)
attachment))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,11 @@
(def yritys? #(contains? % :nimi))

(defn ilmoituspaikka-other? [valvonta]
(= (:ilmoituspaikka-id valvonta) 2))
(= (:ilmoituspaikka-id valvonta) 2))

(defn osapuoli->osapuoli-type
"Given osapuoli map, returns whether the osapuoli is henkilo or yritys"
[osapuoli]
(if (henkilo? osapuoli)
"henkilo"
"yritys"))
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@
(db/require-queries 'karajaoikeus)

(defmulti format-type-specific-data
(fn [_db toimenpide _osapuoli-id] (-> toimenpide :type-id toimenpide/type-key)))
(fn [_db toimenpide _osapuoli-id _osapuoli-type] (-> toimenpide :type-id toimenpide/type-key)))

(defn- find-value-from-osapuoli-specific-data [key osapuoli-specific-data osapuoli-id]
(defn- find-value-from-osapuoli-specific-data [key osapuoli-specific-data osapuoli-id osapuoli-type]
(->> osapuoli-specific-data
(filter #(= (:osapuoli-id %) osapuoli-id))
(filter #(= ((juxt :osapuoli-id :osapuoli-type) %)
[osapuoli-id osapuoli-type]))
first
key))

Expand All @@ -27,30 +28,30 @@
(exception/throw-ex-info!
{:message (str "Unknown hallinto-oikeus-id: " hallinto-oikeus-id)})))

(defn format-actual-decision-data [db toimenpide osapuoli-id]
(defn format-actual-decision-data [db toimenpide osapuoli-id osapuoli-type]
(let [recipient-answered? (-> toimenpide
:type-specific-data
:osapuoli-specific-data
(find-recipient-answered-from-osapuoli-specific-data osapuoli-id))
(find-recipient-answered-from-osapuoli-specific-data osapuoli-id osapuoli-type))
hallinto-oikeus-strings (hallinto-oikeus-id->formatted-strings
db
(-> toimenpide
:type-specific-data
:osapuoli-specific-data
(find-administrative-court-id-from-osapuoli-specific-data osapuoli-id)))]
(find-administrative-court-id-from-osapuoli-specific-data osapuoli-id osapuoli-type)))]
{:recipient-answered recipient-answered?
:vastaus-fi (let [answer-commentary (-> toimenpide
:type-specific-data
:osapuoli-specific-data
((partial find-value-from-osapuoli-specific-data :answer-commentary-fi) osapuoli-id))
((partial find-value-from-osapuoli-specific-data :answer-commentary-fi) osapuoli-id osapuoli-type))
recipient-answered-string (if recipient-answered?
"Asianosainen antoi vastineen kuulemiskirjeeseen. "
"Asianosainen ei vastannut kuulemiskirjeeseen. ")]
(str recipient-answered-string answer-commentary))
:vastaus-sv (let [answer-commentary (-> toimenpide
:type-specific-data
:osapuoli-specific-data
((partial find-value-from-osapuoli-specific-data :answer-commentary-sv) osapuoli-id))
((partial find-value-from-osapuoli-specific-data :answer-commentary-sv) osapuoli-id osapuoli-type))
recipient-answered-string (if recipient-answered?
"gav ett bemötande till brevet om hörande. "
"svarade inte på brevet om hörande. ")]
Expand All @@ -61,40 +62,41 @@
:statement-fi (-> toimenpide
:type-specific-data
:osapuoli-specific-data
((partial find-value-from-osapuoli-specific-data :statement-fi) osapuoli-id))
((partial find-value-from-osapuoli-specific-data :statement-fi) osapuoli-id osapuoli-type))
:statement-sv (-> toimenpide
:type-specific-data
:osapuoli-specific-data
((partial find-value-from-osapuoli-specific-data :statement-sv) osapuoli-id))
((partial find-value-from-osapuoli-specific-data :statement-sv) osapuoli-id osapuoli-type))
:department-head-name (-> toimenpide :type-specific-data :department-head-name)
:department-head-title-fi (-> toimenpide :type-specific-data :department-head-title-fi)
:department-head-title-sv (-> toimenpide :type-specific-data :department-head-title-sv)}))

(defmethod format-type-specific-data :decision-order-actual-decision [db toimenpide osapuoli-id]
(format-actual-decision-data db toimenpide osapuoli-id))
(defmethod format-type-specific-data :decision-order-actual-decision [db toimenpide osapuoli-id osapuoli-type]
(format-actual-decision-data db toimenpide osapuoli-id osapuoli-type))

(defmethod format-type-specific-data :penalty-decision-actual-decision [db toimenpide osapuoli-id]
(format-actual-decision-data db toimenpide osapuoli-id))
(defmethod format-type-specific-data :penalty-decision-actual-decision [db toimenpide osapuoli-id osapuoli-type]
(format-actual-decision-data db toimenpide osapuoli-id osapuoli-type))

(defn- karajaoikeus-id->name [db id]
(first (karajaoikeus-db/find-karajaoikeus-name-by-id db {:karajaoikeus-id id})))

(defn- format-notice-bailiff [db toimenpide osapuoli-id]
(let [osapuoli (->> toimenpide
:type-specific-data
:osapuoli-specific-data
(filter #(= (:osapuoli-id %) osapuoli-id))
first)
karajaoikeus-id (:karajaoikeus-id osapuoli)
haastemies-email (:haastemies-email osapuoli)]
(defn- format-notice-bailiff [db toimenpide osapuoli-id osapuoli-type]
(let [karajaoikeus-id (-> toimenpide
:type-specific-data
:osapuoli-specific-data
((partial find-value-from-osapuoli-specific-data :karajaoikeus-id) osapuoli-id osapuoli-type))
haastemies-email (-> toimenpide
:type-specific-data
:osapuoli-specific-data
((partial find-value-from-osapuoli-specific-data :haastemies-email) osapuoli-id osapuoli-type))]
{:karajaoikeus (karajaoikeus-id->name db karajaoikeus-id)
:haastemies-email haastemies-email}))

(defmethod format-type-specific-data :decision-order-notice-bailiff [db toimenpide osapuoli-id]
(format-notice-bailiff db toimenpide osapuoli-id))
(defmethod format-type-specific-data :decision-order-notice-bailiff [db toimenpide osapuoli-id osapuoli-type]
(format-notice-bailiff db toimenpide osapuoli-id osapuoli-type))

(defmethod format-type-specific-data :penalty-decision-notice-bailiff [db toimenpide osapuoli-id]
(format-notice-bailiff db toimenpide osapuoli-id))
(defmethod format-type-specific-data :penalty-decision-notice-bailiff [db toimenpide osapuoli-id osapuoli-type]
(format-notice-bailiff db toimenpide osapuoli-id osapuoli-type))

(defmethod format-type-specific-data :default [_ toimenpide _]
(defmethod format-type-specific-data :default [_ toimenpide _ _]
(:type-specific-data toimenpide))
Loading

0 comments on commit 793f9fb

Please sign in to comment.