From b66d6f20bbf014b2918b09974b070020fc60fccb Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 10:11:32 +0000 Subject: [PATCH 01/20] chore(j-s): add a function to get indictment deadline date --- .../types/src/lib/dates.spec.ts | 27 +++++++++++++++++++ libs/judicial-system/types/src/lib/dates.ts | 22 +++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 libs/judicial-system/types/src/lib/dates.spec.ts create mode 100644 libs/judicial-system/types/src/lib/dates.ts diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts new file mode 100644 index 000000000000..4a3252c0142f --- /dev/null +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -0,0 +1,27 @@ +import { getIndictmentDeadlineDate } from './dates' + +describe('getIndictmentDeadlineDate', () => { + test('should return fine appeal deadline', () => { + // Arrange + const baseDate = new Date(2024, 1, 1) + const isFine = true + + // Act + const actualDate = getIndictmentDeadlineDate({ baseDate, isFine }) + + // Assert + expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) + }) + + test('should return verdict appeal deadline', () => { + // Arrange + const baseDate = new Date(2024, 1, 1) + const isFine = false + + // Act + const actualDate = getIndictmentDeadlineDate({ baseDate, isFine }) + + // Assert + expect(actualDate).toStrictEqual(new Date(2024, 1, 29, 23, 59, 59, 999)) + }) +}) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts new file mode 100644 index 000000000000..92111e4848fa --- /dev/null +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -0,0 +1,22 @@ +import addDays from 'date-fns/addDays' + +const VERDICT_APPEAL_WINDOW_DAYS = 28 +const FINE_APPEAL_WINDOW_DAYS = 3 + +const setEndOfDay = (date: Date) => new Date(date.setHours(23, 59, 59, 999)) + +export const getIndictmentDeadlineDate = ({ + baseDate, + isFine, +}: { + baseDate: Date + isFine?: boolean +}) => { + const windowDays = isFine + ? FINE_APPEAL_WINDOW_DAYS + : VERDICT_APPEAL_WINDOW_DAYS + const deadlineDate = addDays(baseDate, windowDays) + return setEndOfDay(deadlineDate) +} + +export const hasDatePassed = (deadline: Date) => Date.now() > deadline.getTime() From 8eeecd4aea000173b52ef36a1a6f5b8ff4dc2c13 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 10:12:13 +0000 Subject: [PATCH 02/20] fix(j-s): small fix --- libs/judicial-system/types/src/lib/dates.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts index 92111e4848fa..ef6ef91074e4 100644 --- a/libs/judicial-system/types/src/lib/dates.ts +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -5,6 +5,8 @@ const FINE_APPEAL_WINDOW_DAYS = 3 const setEndOfDay = (date: Date) => new Date(date.setHours(23, 59, 59, 999)) +export const hasDatePassed = (deadline: Date) => Date.now() > deadline.getTime() + export const getIndictmentDeadlineDate = ({ baseDate, isFine, @@ -19,4 +21,3 @@ export const getIndictmentDeadlineDate = ({ return setEndOfDay(deadlineDate) } -export const hasDatePassed = (deadline: Date) => Date.now() > deadline.getTime() From 27946d76c603cd2cf92a17996494d2dcb202a14f Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 10:14:17 +0000 Subject: [PATCH 03/20] chore(j-s): refactor current logic to use the new function --- .../interceptors/case.transformer.spec.ts | 12 ++--- .../case/interceptors/case.transformer.ts | 54 +++++++++---------- .../BlueBoxWithIcon/BlueBoxWithDate.tsx | 12 ++--- libs/judicial-system/types/src/index.ts | 8 ++- .../types/src/lib/indictmentCase.ts | 18 +++---- 5 files changed, 46 insertions(+), 58 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts index f73423c0f6d4..6bde70759b8b 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts @@ -343,7 +343,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ canBeAppealed: true, - appealDeadline: '2022-06-18T19:50:08.033Z', + appealDeadline: '2022-06-18T23:59:59.999Z', hasBeenAppealed: false, }), ) @@ -383,7 +383,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ canBeAppealed: true, - appealDeadline: '2022-06-18T19:50:08.033Z', + appealDeadline: '2022-06-18T23:59:59.999Z', hasBeenAppealed: false, }), ) @@ -460,7 +460,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ - appealDeadline: '2022-06-18T19:50:08.033Z', + appealDeadline: '2022-06-18T23:59:59.999Z', canBeAppealed: true, hasBeenAppealed: false, }), @@ -479,7 +479,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ - appealDeadline: '2022-06-18T19:50:08.033Z', + appealDeadline: '2022-06-18T23:59:59.999Z', canBeAppealed: false, hasBeenAppealed: false, }), @@ -584,9 +584,7 @@ describe('getAppealInfo', () => { hasBeenAppealed: true, appealedByRole: UserRole.DEFENDER, appealedDate: '2022-06-15T19:50:08.033Z', - appealDeadline: new Date( - new Date(rulingDate).setDate(new Date(rulingDate).getDate() + 3), - ).toISOString(), + appealDeadline: '2022-06-18T23:59:59.999Z', statementDeadline: '2021-06-16T19:50:08.033Z', canDefenderAppeal: false, canProsecutorAppeal: false, diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts index f01909d284f1..4571df7424bf 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts @@ -1,14 +1,16 @@ +import { + getIndictmentDeadlineDate, + hasDatePassed, +} from '@island.is/judicial-system/types' import { CaseAppealDecision, CaseIndictmentRulingDecision, EventType, - FINE_APPEAL_WINDOW_DAYS, getIndictmentVerdictAppealDeadlineStatus, getStatementDeadline, isRequestCase, ServiceRequirement, UserRole, - VERDICT_APPEAL_WINDOW_DAYS, } from '@island.is/judicial-system/types' import { Defendant } from '../../defendant' @@ -93,9 +95,10 @@ export const getAppealInfo = (theCase: Case): AppealInfo => { ) const theRulingDate = new Date(rulingDate) - appealInfo.appealDeadline = new Date( - theRulingDate.getTime() + getDays(3), - ).toISOString() + appealInfo.appealDeadline = getIndictmentDeadlineDate({ + baseDate: theRulingDate, + isFine: true, + }).toISOString() appealInfo.canProsecutorAppeal = !hasBeenAppealed && isAppealableDecision(prosecutorAppealDecision) @@ -126,7 +129,7 @@ const transformRequestCase = (theCase: Case): Case => { // TODO: Move remaining appeal fields to appealInfo isAppealDeadlineExpired: appealInfo.appealDeadline - ? Date.now() >= new Date(appealInfo.appealDeadline).getTime() + ? hasDatePassed(new Date(appealInfo.appealDeadline)) : false, isAppealGracePeriodExpired: theCase.rulingDate ? Date.now() >= new Date(theCase.rulingDate).getTime() + getDays(31) @@ -151,19 +154,18 @@ export const getIndictmentInfo = ( defendants?: Defendant[], eventLog?: EventLog[], ): IndictmentInfo => { - const indictmentInfo: IndictmentInfo = {} const isFine = rulingDecision === CaseIndictmentRulingDecision.FINE const isRuling = rulingDecision === CaseIndictmentRulingDecision.RULING if (!rulingDate) { - return indictmentInfo + return {} } const theRulingDate = new Date(rulingDate) - indictmentInfo.indictmentAppealDeadline = new Date( - theRulingDate.getTime() + - getDays(isFine ? FINE_APPEAL_WINDOW_DAYS : VERDICT_APPEAL_WINDOW_DAYS), - ).toISOString() + const indictmentAppealDeadline = getIndictmentDeadlineDate({ + baseDate: theRulingDate, + isFine, + }).toISOString() const verdictInfo = defendants?.map<[boolean, Date | undefined]>( (defendant) => [ @@ -180,15 +182,17 @@ export const getIndictmentInfo = ( const [indictmentVerdictViewedByAll, indictmentVerdictAppealDeadlineExpired] = getIndictmentVerdictAppealDeadlineStatus(verdictInfo, isFine) - indictmentInfo.indictmentVerdictViewedByAll = indictmentVerdictViewedByAll - indictmentInfo.indictmentVerdictAppealDeadlineExpired = - indictmentVerdictAppealDeadlineExpired - indictmentInfo.indictmentCompletedDate = eventLog + const indictmentCompletedDate = eventLog ?.find((log) => log.eventType === EventType.INDICTMENT_COMPLETED) ?.created?.toString() - return indictmentInfo + return { + indictmentAppealDeadline, + indictmentVerdictViewedByAll, + indictmentVerdictAppealDeadlineExpired, + indictmentCompletedDate, + } } export const getIndictmentDefendantsInfo = (theCase: Case) => { @@ -201,23 +205,15 @@ export const getIndictmentDefendantsInfo = (theCase: Case) => { const { verdictViewDate } = defendant const baseDate = serviceRequired ? verdictViewDate : theCase.rulingDate - const verdictAppealDeadline = baseDate - ? new Date( - new Date(baseDate).getTime() + - getDays( - isFine ? FINE_APPEAL_WINDOW_DAYS : VERDICT_APPEAL_WINDOW_DAYS, - ), - ).toISOString() + ? getIndictmentDeadlineDate({ baseDate: new Date(baseDate), isFine }) : undefined - - const isVerdictAppealDeadlineExpired = verdictAppealDeadline - ? Date.now() >= new Date(verdictAppealDeadline).getTime() - : false + const isVerdictAppealDeadlineExpired = + verdictAppealDeadline && hasDatePassed(verdictAppealDeadline) return { ...defendant, - verdictAppealDeadline, + verdictAppealDeadline: verdictAppealDeadline?.toISOString(), isVerdictAppealDeadlineExpired, } }) diff --git a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx index 8c92dfeb25c2..26b79e66cdb5 100644 --- a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx +++ b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx @@ -1,6 +1,5 @@ import { FC, useContext, useMemo, useState } from 'react' import { useIntl } from 'react-intl' -import addDays from 'date-fns/addDays' import { AnimatePresence, motion } from 'framer-motion' import { useRouter } from 'next/router' @@ -14,7 +13,7 @@ import { } from '@island.is/island-ui/core' import { PUBLIC_PROSECUTOR_STAFF_INDICTMENT_SEND_TO_PRISON_ADMIN_ROUTE } from '@island.is/judicial-system/consts' import { formatDate } from '@island.is/judicial-system/formatters' -import { VERDICT_APPEAL_WINDOW_DAYS } from '@island.is/judicial-system/types' +import { getIndictmentDeadlineDate } from '@island.is/judicial-system/types' import { core, errors } from '@island.is/judicial-system-web/messages' import { @@ -137,14 +136,15 @@ const BlueBoxWithDate: FC = (props) => { ) } + // TODO const appealExpirationInfo = useMemo(() => { const deadline = defendant.verdictAppealDeadline || (dates.verdictViewDate && - addDays( - dates.verdictViewDate, - VERDICT_APPEAL_WINDOW_DAYS, - ).toISOString()) + getIndictmentDeadlineDate({ + baseDate: dates.verdictViewDate, + isFine: false, + }).toISOString()) return getAppealExpirationInfo( deadline, diff --git a/libs/judicial-system/types/src/index.ts b/libs/judicial-system/types/src/index.ts index 1ff4810cdf5b..4c6e6028f84c 100644 --- a/libs/judicial-system/types/src/index.ts +++ b/libs/judicial-system/types/src/index.ts @@ -102,11 +102,9 @@ export { courtSessionTypeNames, } from './lib/case' -export { - getIndictmentVerdictAppealDeadlineStatus, - VERDICT_APPEAL_WINDOW_DAYS, - FINE_APPEAL_WINDOW_DAYS, -} from './lib/indictmentCase' +export { getIndictmentVerdictAppealDeadlineStatus } from './lib/indictmentCase' + +export { getIndictmentDeadlineDate, hasDatePassed } from './lib/dates' export type { CrimeScene, diff --git a/libs/judicial-system/types/src/lib/indictmentCase.ts b/libs/judicial-system/types/src/lib/indictmentCase.ts index f823acbdf4b4..1053deca90cd 100644 --- a/libs/judicial-system/types/src/lib/indictmentCase.ts +++ b/libs/judicial-system/types/src/lib/indictmentCase.ts @@ -1,7 +1,4 @@ -const DAYS_TO_MILLISECONDS = 24 * 60 * 60 * 1000 -export const VERDICT_APPEAL_WINDOW_DAYS = 28 -export const FINE_APPEAL_WINDOW_DAYS = 3 -const getDays = (days: number) => days * DAYS_TO_MILLISECONDS +import { getIndictmentDeadlineDate, hasDatePassed } from './dates' /* This function takes an array of verdict info tuples: @@ -9,7 +6,7 @@ const getDays = (days: number) => days * DAYS_TO_MILLISECONDS - The second element of the tuple is a Date object indicating when the defendant viewed the verdict. Undefined if the defendant has not viewed the verdict. The function returns a tuple of two booleans: - The first boolean indicates whether all defendants who need to see the verdict have seen it. - - The second boolean indicates whether all defenant appeal deadlines have expired. + - The second boolean indicates whether all defendant appeal deadlines have expired. */ export const getIndictmentVerdictAppealDeadlineStatus = ( verdictInfo?: [boolean, Date | undefined][], @@ -35,11 +32,10 @@ export const getIndictmentVerdictAppealDeadlineStatus = ( (newest, [_, current]) => (current && current > newest ? current : newest), new Date(0), ) + const deadline = getIndictmentDeadlineDate({ + baseDate: newestViewDate, + isFine, + }) - return [ - true, - Date.now() > - newestViewDate.getTime() + - getDays(isFine ? FINE_APPEAL_WINDOW_DAYS : VERDICT_APPEAL_WINDOW_DAYS), - ] + return [true, hasDatePassed(deadline)] } From bb47ea53750629b926eacc1c7fba22e083694d8d Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 10:14:57 +0000 Subject: [PATCH 04/20] fix(j-s): remove unused function --- apps/judicial-system/web/src/utils/utils.spec.tsx | 15 +-------------- apps/judicial-system/web/src/utils/utils.ts | 8 -------- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/apps/judicial-system/web/src/utils/utils.spec.tsx b/apps/judicial-system/web/src/utils/utils.spec.tsx index 327fc715acad..a3bfefe465f6 100644 --- a/apps/judicial-system/web/src/utils/utils.spec.tsx +++ b/apps/judicial-system/web/src/utils/utils.spec.tsx @@ -9,7 +9,7 @@ import { import * as formatters from './formatters' import { validateAndSendToServer } from './formHelper' -import { getAppealEndDate, getShortGender, hasSentNotification } from './utils' +import { getShortGender, hasSentNotification } from './utils' describe('Utils', () => { describe('removeTabs', () => { @@ -93,19 +93,6 @@ describe('Utils', () => { }) }) - describe('getAppealEndDate', () => { - test('should return the correct end date', () => { - // Arrange - const date = '2020-10-24T12:25:00Z' - - // Act - const result = getAppealEndDate(date) - - // Assert - expect(result).toEqual('27. október 2020 kl. 12:25') - }) - }) - describe('getShortGender', () => { test('should return short genders given a valid gender', () => { // Arrange diff --git a/apps/judicial-system/web/src/utils/utils.ts b/apps/judicial-system/web/src/utils/utils.ts index 5ea47b22ea76..f4d9592f249d 100644 --- a/apps/judicial-system/web/src/utils/utils.ts +++ b/apps/judicial-system/web/src/utils/utils.ts @@ -1,6 +1,3 @@ -import addDays from 'date-fns/addDays' -import parseISO from 'date-fns/parseISO' - import { TagVariant } from '@island.is/island-ui/core' import { formatDate } from '@island.is/judicial-system/formatters' import { @@ -60,11 +57,6 @@ export const fileSize = (bytes?: number) => { return kb >= 10000 ? `${kb.toString().substring(0, 2)}MB` : `${kb}KB` } -export const getAppealEndDate = (rulingDate: string) => { - const appealEndDate = addDays(parseISO(rulingDate), 3) - return formatDate(appealEndDate, 'PPPp') -} - export const isBusiness = (nationalId?: string | null) => { if (!nationalId) { return false From cac9f57cc885bc7ce3c7e18845384b6050c643a0 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 10:49:13 +0000 Subject: [PATCH 05/20] fix(j-s): rename --- .../app/modules/case/interceptors/case.transformer.ts | 10 +++++----- .../src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx | 5 ++--- libs/judicial-system/types/src/index.ts | 2 +- libs/judicial-system/types/src/lib/dates.spec.ts | 8 ++++---- libs/judicial-system/types/src/lib/dates.ts | 2 +- libs/judicial-system/types/src/lib/indictmentCase.ts | 4 ++-- 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts index 4571df7424bf..89b0ef329184 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts @@ -1,5 +1,5 @@ import { - getIndictmentDeadlineDate, + getAppealDeadlineDate, hasDatePassed, } from '@island.is/judicial-system/types' import { @@ -95,7 +95,7 @@ export const getAppealInfo = (theCase: Case): AppealInfo => { ) const theRulingDate = new Date(rulingDate) - appealInfo.appealDeadline = getIndictmentDeadlineDate({ + appealInfo.appealDeadline = getAppealDeadlineDate({ baseDate: theRulingDate, isFine: true, }).toISOString() @@ -124,7 +124,7 @@ const transformRequestCase = (theCase: Case): Case => { isClosedCourtHidden: theCase.isClosedCourtHidden ?? false, isHeightenedSecurityLevel: theCase.isHeightenedSecurityLevel ?? false, isValidToDateInThePast: theCase.validToDate - ? Date.now() > new Date(theCase.validToDate).getTime() + ? hasDatePassed(new Date(theCase.validToDate)) : theCase.isValidToDateInThePast, // TODO: Move remaining appeal fields to appealInfo @@ -162,7 +162,7 @@ export const getIndictmentInfo = ( } const theRulingDate = new Date(rulingDate) - const indictmentAppealDeadline = getIndictmentDeadlineDate({ + const indictmentAppealDeadline = getAppealDeadlineDate({ baseDate: theRulingDate, isFine, }).toISOString() @@ -206,7 +206,7 @@ export const getIndictmentDefendantsInfo = (theCase: Case) => { const baseDate = serviceRequired ? verdictViewDate : theCase.rulingDate const verdictAppealDeadline = baseDate - ? getIndictmentDeadlineDate({ baseDate: new Date(baseDate), isFine }) + ? getAppealDeadlineDate({ baseDate: new Date(baseDate), isFine }) : undefined const isVerdictAppealDeadlineExpired = verdictAppealDeadline && hasDatePassed(verdictAppealDeadline) diff --git a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx index 26b79e66cdb5..09c9287f24be 100644 --- a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx +++ b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx @@ -13,7 +13,7 @@ import { } from '@island.is/island-ui/core' import { PUBLIC_PROSECUTOR_STAFF_INDICTMENT_SEND_TO_PRISON_ADMIN_ROUTE } from '@island.is/judicial-system/consts' import { formatDate } from '@island.is/judicial-system/formatters' -import { getIndictmentDeadlineDate } from '@island.is/judicial-system/types' +import { getAppealDeadlineDate } from '@island.is/judicial-system/types' import { core, errors } from '@island.is/judicial-system-web/messages' import { @@ -136,12 +136,11 @@ const BlueBoxWithDate: FC = (props) => { ) } - // TODO const appealExpirationInfo = useMemo(() => { const deadline = defendant.verdictAppealDeadline || (dates.verdictViewDate && - getIndictmentDeadlineDate({ + getAppealDeadlineDate({ baseDate: dates.verdictViewDate, isFine: false, }).toISOString()) diff --git a/libs/judicial-system/types/src/index.ts b/libs/judicial-system/types/src/index.ts index 4c6e6028f84c..d5b8d6635820 100644 --- a/libs/judicial-system/types/src/index.ts +++ b/libs/judicial-system/types/src/index.ts @@ -104,7 +104,7 @@ export { export { getIndictmentVerdictAppealDeadlineStatus } from './lib/indictmentCase' -export { getIndictmentDeadlineDate, hasDatePassed } from './lib/dates' +export { getAppealDeadlineDate, hasDatePassed } from './lib/dates' export type { CrimeScene, diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index 4a3252c0142f..2b13c3ccf777 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -1,13 +1,13 @@ -import { getIndictmentDeadlineDate } from './dates' +import { getAppealDeadlineDate } from './dates' -describe('getIndictmentDeadlineDate', () => { +describe('getAppealDeadlineDate', () => { test('should return fine appeal deadline', () => { // Arrange const baseDate = new Date(2024, 1, 1) const isFine = true // Act - const actualDate = getIndictmentDeadlineDate({ baseDate, isFine }) + const actualDate = getAppealDeadlineDate({ baseDate, isFine }) // Assert expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) @@ -19,7 +19,7 @@ describe('getIndictmentDeadlineDate', () => { const isFine = false // Act - const actualDate = getIndictmentDeadlineDate({ baseDate, isFine }) + const actualDate = getAppealDeadlineDate({ baseDate, isFine }) // Assert expect(actualDate).toStrictEqual(new Date(2024, 1, 29, 23, 59, 59, 999)) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts index ef6ef91074e4..7c72d0cfb5f5 100644 --- a/libs/judicial-system/types/src/lib/dates.ts +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -7,7 +7,7 @@ const setEndOfDay = (date: Date) => new Date(date.setHours(23, 59, 59, 999)) export const hasDatePassed = (deadline: Date) => Date.now() > deadline.getTime() -export const getIndictmentDeadlineDate = ({ +export const getAppealDeadlineDate = ({ baseDate, isFine, }: { diff --git a/libs/judicial-system/types/src/lib/indictmentCase.ts b/libs/judicial-system/types/src/lib/indictmentCase.ts index 1053deca90cd..758482ea79cd 100644 --- a/libs/judicial-system/types/src/lib/indictmentCase.ts +++ b/libs/judicial-system/types/src/lib/indictmentCase.ts @@ -1,4 +1,4 @@ -import { getIndictmentDeadlineDate, hasDatePassed } from './dates' +import { getAppealDeadlineDate, hasDatePassed } from './dates' /* This function takes an array of verdict info tuples: @@ -32,7 +32,7 @@ export const getIndictmentVerdictAppealDeadlineStatus = ( (newest, [_, current]) => (current && current > newest ? current : newest), new Date(0), ) - const deadline = getIndictmentDeadlineDate({ + const deadline = getAppealDeadlineDate({ baseDate: newestViewDate, isFine, }) From ec0dbbffc96dbd0ea58f9ad5b7d7c9b35edcf2ae Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 10:59:51 +0000 Subject: [PATCH 06/20] fix(j-s): rename and add different func for appeal date --- .../app/modules/case/interceptors/case.transformer.ts | 9 ++++++--- .../src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx | 4 ++-- libs/judicial-system/types/src/index.ts | 6 +++++- libs/judicial-system/types/src/lib/dates.spec.ts | 8 ++++---- libs/judicial-system/types/src/lib/dates.ts | 8 +++++++- libs/judicial-system/types/src/lib/indictmentCase.ts | 4 ++-- 6 files changed, 26 insertions(+), 13 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts index 89b0ef329184..dbde5607204d 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts @@ -1,5 +1,6 @@ import { getAppealDeadlineDate, + getIndictmentAppealDeadlineDate, hasDatePassed, } from '@island.is/judicial-system/types' import { @@ -97,7 +98,6 @@ export const getAppealInfo = (theCase: Case): AppealInfo => { const theRulingDate = new Date(rulingDate) appealInfo.appealDeadline = getAppealDeadlineDate({ baseDate: theRulingDate, - isFine: true, }).toISOString() appealInfo.canProsecutorAppeal = @@ -162,7 +162,7 @@ export const getIndictmentInfo = ( } const theRulingDate = new Date(rulingDate) - const indictmentAppealDeadline = getAppealDeadlineDate({ + const indictmentAppealDeadline = getIndictmentAppealDeadlineDate({ baseDate: theRulingDate, isFine, }).toISOString() @@ -206,7 +206,10 @@ export const getIndictmentDefendantsInfo = (theCase: Case) => { const baseDate = serviceRequired ? verdictViewDate : theCase.rulingDate const verdictAppealDeadline = baseDate - ? getAppealDeadlineDate({ baseDate: new Date(baseDate), isFine }) + ? getIndictmentAppealDeadlineDate({ + baseDate: new Date(baseDate), + isFine, + }) : undefined const isVerdictAppealDeadlineExpired = verdictAppealDeadline && hasDatePassed(verdictAppealDeadline) diff --git a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx index 09c9287f24be..966cec567f6e 100644 --- a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx +++ b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx @@ -13,7 +13,7 @@ import { } from '@island.is/island-ui/core' import { PUBLIC_PROSECUTOR_STAFF_INDICTMENT_SEND_TO_PRISON_ADMIN_ROUTE } from '@island.is/judicial-system/consts' import { formatDate } from '@island.is/judicial-system/formatters' -import { getAppealDeadlineDate } from '@island.is/judicial-system/types' +import { getIndictmentAppealDeadlineDate } from '@island.is/judicial-system/types' import { core, errors } from '@island.is/judicial-system-web/messages' import { @@ -140,7 +140,7 @@ const BlueBoxWithDate: FC = (props) => { const deadline = defendant.verdictAppealDeadline || (dates.verdictViewDate && - getAppealDeadlineDate({ + getIndictmentAppealDeadlineDate({ baseDate: dates.verdictViewDate, isFine: false, }).toISOString()) diff --git a/libs/judicial-system/types/src/index.ts b/libs/judicial-system/types/src/index.ts index d5b8d6635820..75e842cad189 100644 --- a/libs/judicial-system/types/src/index.ts +++ b/libs/judicial-system/types/src/index.ts @@ -104,7 +104,11 @@ export { export { getIndictmentVerdictAppealDeadlineStatus } from './lib/indictmentCase' -export { getAppealDeadlineDate, hasDatePassed } from './lib/dates' +export { + getIndictmentAppealDeadlineDate, + getAppealDeadlineDate, + hasDatePassed, +} from './lib/dates' export type { CrimeScene, diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index 2b13c3ccf777..9cb990f37104 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -1,13 +1,13 @@ -import { getAppealDeadlineDate } from './dates' +import { getIndictmentAppealDeadlineDate } from './dates' -describe('getAppealDeadlineDate', () => { +describe('getIndictmentAppealDeadlineDate', () => { test('should return fine appeal deadline', () => { // Arrange const baseDate = new Date(2024, 1, 1) const isFine = true // Act - const actualDate = getAppealDeadlineDate({ baseDate, isFine }) + const actualDate = getIndictmentAppealDeadlineDate({ baseDate, isFine }) // Assert expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) @@ -19,7 +19,7 @@ describe('getAppealDeadlineDate', () => { const isFine = false // Act - const actualDate = getAppealDeadlineDate({ baseDate, isFine }) + const actualDate = getIndictmentAppealDeadlineDate({ baseDate, isFine }) // Assert expect(actualDate).toStrictEqual(new Date(2024, 1, 29, 23, 59, 59, 999)) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts index 7c72d0cfb5f5..592a79b2cbe7 100644 --- a/libs/judicial-system/types/src/lib/dates.ts +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -3,11 +3,13 @@ import addDays from 'date-fns/addDays' const VERDICT_APPEAL_WINDOW_DAYS = 28 const FINE_APPEAL_WINDOW_DAYS = 3 +const APPEAL_WINDOW_DAYS = 3 + const setEndOfDay = (date: Date) => new Date(date.setHours(23, 59, 59, 999)) export const hasDatePassed = (deadline: Date) => Date.now() > deadline.getTime() -export const getAppealDeadlineDate = ({ +export const getIndictmentAppealDeadlineDate = ({ baseDate, isFine, }: { @@ -21,3 +23,7 @@ export const getAppealDeadlineDate = ({ return setEndOfDay(deadlineDate) } +export const getAppealDeadlineDate = ({ baseDate }: { baseDate: Date }) => { + const deadlineDate = addDays(baseDate, APPEAL_WINDOW_DAYS) + return setEndOfDay(deadlineDate) +} diff --git a/libs/judicial-system/types/src/lib/indictmentCase.ts b/libs/judicial-system/types/src/lib/indictmentCase.ts index 758482ea79cd..543c63879019 100644 --- a/libs/judicial-system/types/src/lib/indictmentCase.ts +++ b/libs/judicial-system/types/src/lib/indictmentCase.ts @@ -1,4 +1,4 @@ -import { getAppealDeadlineDate, hasDatePassed } from './dates' +import { getIndictmentAppealDeadlineDate, hasDatePassed } from './dates' /* This function takes an array of verdict info tuples: @@ -32,7 +32,7 @@ export const getIndictmentVerdictAppealDeadlineStatus = ( (newest, [_, current]) => (current && current > newest ? current : newest), new Date(0), ) - const deadline = getAppealDeadlineDate({ + const deadline = getIndictmentAppealDeadlineDate({ baseDate: newestViewDate, isFine, }) From 1c67458c0e864ca523b74a26f951f2086731c966 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 11:08:17 +0000 Subject: [PATCH 07/20] fix(j-s): add test for appeal deadline date --- libs/judicial-system/types/src/lib/dates.spec.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index 9cb990f37104..83ec65175e2e 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -1,4 +1,4 @@ -import { getIndictmentAppealDeadlineDate } from './dates' +import { getAppealDeadlineDate, getIndictmentAppealDeadlineDate } from './dates' describe('getIndictmentAppealDeadlineDate', () => { test('should return fine appeal deadline', () => { @@ -25,3 +25,17 @@ describe('getIndictmentAppealDeadlineDate', () => { expect(actualDate).toStrictEqual(new Date(2024, 1, 29, 23, 59, 59, 999)) }) }) + +describe('getAppealDeadlineDate', () => { + test('should return expected appeal deadline', () => { + // Arrange + const baseDate = new Date(2024, 1, 1) + + // Act + const actualDate = getAppealDeadlineDate({ baseDate }) + + // Assert + expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) + }) + }) + From 91397b4e212148498e4dc43784a627d9500c50fa Mon Sep 17 00:00:00 2001 From: andes-it Date: Tue, 21 Jan 2025 11:23:46 +0000 Subject: [PATCH 08/20] chore: nx format:write update dirty files --- .../types/src/lib/dates.spec.ts | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index 83ec65175e2e..06d7778933c7 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -27,15 +27,14 @@ describe('getIndictmentAppealDeadlineDate', () => { }) describe('getAppealDeadlineDate', () => { - test('should return expected appeal deadline', () => { - // Arrange - const baseDate = new Date(2024, 1, 1) - - // Act - const actualDate = getAppealDeadlineDate({ baseDate }) - - // Assert - expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) - }) + test('should return expected appeal deadline', () => { + // Arrange + const baseDate = new Date(2024, 1, 1) + + // Act + const actualDate = getAppealDeadlineDate({ baseDate }) + + // Assert + expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) }) - +}) From f1afa5a7130f4b02aecf2eafbe33e0a5e3e0c64a Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 11:50:31 +0000 Subject: [PATCH 09/20] fix(j-s): add description for different appeal props --- .../api/src/app/modules/case/models/case.model.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/models/case.model.ts b/apps/judicial-system/api/src/app/modules/case/models/case.model.ts index ea5b2a0956c5..e3366ee76222 100644 --- a/apps/judicial-system/api/src/app/modules/case/models/case.model.ts +++ b/apps/judicial-system/api/src/app/modules/case/models/case.model.ts @@ -352,7 +352,7 @@ export class Case { @Field(() => Boolean, { nullable: true }) readonly hasBeenAppealed?: boolean - @Field(() => String, { nullable: true }) + @Field(() => String, { nullable: true, description: "appeal deadline in R cases" }) readonly appealDeadline?: string @Field(() => UserRole, { nullable: true }) @@ -430,7 +430,7 @@ export class Case { @Field(() => IndictmentCaseReviewDecision, { nullable: true }) readonly indictmentReviewDecision?: IndictmentCaseReviewDecision - @Field(() => String, { nullable: true }) + @Field(() => String, { nullable: true, description: "appeal deadline for public prosecutor review" }) readonly indictmentAppealDeadline?: string @Field(() => Boolean, { nullable: true }) From 0e2fa85b4d3f469f1b3d8fb5a46e97dd8c3f2359 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 11:54:38 +0000 Subject: [PATCH 10/20] fix(j-s): formatting and tiny adjustments --- .../src/app/modules/case/models/case.model.ts | 10 +++++++-- .../types/src/lib/dates.spec.ts | 21 +++++++++---------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/models/case.model.ts b/apps/judicial-system/api/src/app/modules/case/models/case.model.ts index e3366ee76222..537f113ccb0c 100644 --- a/apps/judicial-system/api/src/app/modules/case/models/case.model.ts +++ b/apps/judicial-system/api/src/app/modules/case/models/case.model.ts @@ -352,7 +352,10 @@ export class Case { @Field(() => Boolean, { nullable: true }) readonly hasBeenAppealed?: boolean - @Field(() => String, { nullable: true, description: "appeal deadline in R cases" }) + @Field(() => String, { + nullable: true, + description: 'appeal deadline in R cases', + }) readonly appealDeadline?: string @Field(() => UserRole, { nullable: true }) @@ -430,7 +433,10 @@ export class Case { @Field(() => IndictmentCaseReviewDecision, { nullable: true }) readonly indictmentReviewDecision?: IndictmentCaseReviewDecision - @Field(() => String, { nullable: true, description: "appeal deadline for public prosecutor review" }) + @Field(() => String, { + nullable: true, + description: 'appeal deadline for public prosecutor', + }) readonly indictmentAppealDeadline?: string @Field(() => Boolean, { nullable: true }) diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index 83ec65175e2e..06d7778933c7 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -27,15 +27,14 @@ describe('getIndictmentAppealDeadlineDate', () => { }) describe('getAppealDeadlineDate', () => { - test('should return expected appeal deadline', () => { - // Arrange - const baseDate = new Date(2024, 1, 1) - - // Act - const actualDate = getAppealDeadlineDate({ baseDate }) - - // Assert - expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) - }) + test('should return expected appeal deadline', () => { + // Arrange + const baseDate = new Date(2024, 1, 1) + + // Act + const actualDate = getAppealDeadlineDate({ baseDate }) + + // Assert + expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) }) - +}) From 862a0d6d0f2fdc8e74e140f0cfd41903b38b8db6 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 13:27:03 +0000 Subject: [PATCH 11/20] fix(j-s): add test for hasDatePassed --- .../types/src/lib/dates.spec.ts | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index 06d7778933c7..5640975760c3 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -1,4 +1,9 @@ -import { getAppealDeadlineDate, getIndictmentAppealDeadlineDate } from './dates' +import { + getAppealDeadlineDate, + getIndictmentAppealDeadlineDate, + hasDatePassed, +} from './dates' + describe('getIndictmentAppealDeadlineDate', () => { test('should return fine appeal deadline', () => { @@ -38,3 +43,27 @@ describe('getAppealDeadlineDate', () => { expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) }) }) + + +describe('hasDatePassed', () => { + test('should return true for past dates', () => { + // Arrange + const pastDate = new Date(2024, 0, 1) + + // Act + // Assert + expect(hasDatePassed(pastDate)).toBe(true) + }) + + test('should return false for future dates', () => { + // Arrange + const futureDate = new Date(2024, 1, 1) + const mockTodayDate = new Date(2024, 0, 1) + + jest.useFakeTimers().setSystemTime(mockTodayDate); + + // Act + // Assert + expect(hasDatePassed(futureDate)).toBe(false) + }) +}) From 245ffed5670ed3d12771ee3d729e33207226dd67 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 13:28:54 +0000 Subject: [PATCH 12/20] fix(j-s): format --- libs/judicial-system/types/src/lib/dates.spec.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index 5640975760c3..bfe362ec6129 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -4,7 +4,6 @@ import { hasDatePassed, } from './dates' - describe('getIndictmentAppealDeadlineDate', () => { test('should return fine appeal deadline', () => { // Arrange @@ -44,7 +43,6 @@ describe('getAppealDeadlineDate', () => { }) }) - describe('hasDatePassed', () => { test('should return true for past dates', () => { // Arrange @@ -60,7 +58,7 @@ describe('hasDatePassed', () => { const futureDate = new Date(2024, 1, 1) const mockTodayDate = new Date(2024, 0, 1) - jest.useFakeTimers().setSystemTime(mockTodayDate); + jest.useFakeTimers().setSystemTime(mockTodayDate) // Act // Assert From c19307382cf07385881c6a0fd128230e53a33ee1 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 15:10:52 +0000 Subject: [PATCH 13/20] fix(j-s): tests --- .../interceptors/case.transformer.spec.ts | 54 ++++++++----------- .../case/interceptors/case.transformer.ts | 5 +- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts index 6bde70759b8b..a828ae6b5210 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts @@ -149,7 +149,7 @@ describe('transformCase', () => { it('should be true when the appeal window has closed', () => { // Arrange const rulingDate = new Date() - rulingDate.setDate(rulingDate.getDate() - 3) + rulingDate.setDate(rulingDate.getDate() - 4) const theCase = { type: CaseType.CUSTODY, rulingDate: rulingDate.toISOString(), @@ -339,6 +339,7 @@ describe('transformCase', () => { } as Case const appealInfo = transformCase(theCase) + console.log({appealInfo}) expect(appealInfo).toEqual( expect.objectContaining({ @@ -540,8 +541,8 @@ describe('getAppealInfo', () => { expect(appealInfo).toEqual({}) }) - it('should return not return appealedDate if case has not been appealed', () => { - const rulingDate = new Date().toISOString() + it('should not return appealedDate if case has not been appealed', () => { + const rulingDate = '2022-06-15T19:50:08.033Z' const theCase = { type: CaseType.CUSTODY, rulingDate, @@ -551,22 +552,20 @@ describe('getAppealInfo', () => { accusedPostponedAppealDate: '2022-06-15T19:50:08.033Z', prosecutorPostponedAppealDate: '2022-06-15T19:50:08.033Z', } as Case - + const appealInfo = getAppealInfo(theCase) expect(appealInfo).toEqual({ canBeAppealed: true, hasBeenAppealed: false, - appealDeadline: new Date( - new Date(rulingDate).setDate(new Date(rulingDate).getDate() + 3), - ).toISOString(), + appealDeadline: '2022-06-18T23:59:59.999Z', canDefenderAppeal: true, canProsecutorAppeal: true, }) }) it('should return correct appeal info when ruling date is provided', () => { - const rulingDate = new Date().toISOString() + const rulingDate = '2022-06-15T19:50:08.033Z' const theCase = { type: CaseType.CUSTODY, rulingDate, @@ -608,7 +607,7 @@ describe('getAppealInfo', () => { canBeAppealed: false, hasBeenAppealed: false, appealedDate: undefined, - appealDeadline: '2022-06-18T19:50:08.033Z', + appealDeadline: '2022-06-18T23:59:59.999Z', canDefenderAppeal: false, canProsecutorAppeal: false, }) @@ -667,7 +666,7 @@ describe('getIndictmentInfo', () => { }) it('should return correct indictment info when ruling date is provided', () => { - const rulingDate = new Date().toISOString() + const rulingDate = '2022-06-15T19:50:08.033Z' const indictmentInfo = getIndictmentInfo( CaseIndictmentRulingDecision.RULING, @@ -675,18 +674,16 @@ describe('getIndictmentInfo', () => { ) expect(indictmentInfo).toEqual({ - indictmentAppealDeadline: new Date( - new Date(rulingDate).setDate(new Date(rulingDate).getDate() + 28), - ).toISOString(), + indictmentAppealDeadline: '2022-07-13T23:59:59.999Z', indictmentVerdictViewedByAll: true, indictmentVerdictAppealDeadlineExpired: true, }) }) it('should return correct indictment info when some defendants have yet to view the verdict', () => { - const rulingDate = new Date().toISOString() + const rulingDate = '2022-06-14T19:50:08.033Z' const defendants = [ - { verdictViewDate: new Date().toISOString() } as Defendant, + { verdictViewDate: '2022-06-15T19:50:08.033Z' } as Defendant, { verdictViewDate: undefined } as Defendant, ] @@ -697,18 +694,16 @@ describe('getIndictmentInfo', () => { ) expect(indictmentInfo).toEqual({ - indictmentAppealDeadline: new Date( - new Date(rulingDate).setDate(new Date(rulingDate).getDate() + 28), - ).toISOString(), + indictmentAppealDeadline: '2022-07-12T23:59:59.999Z', indictmentVerdictViewedByAll: false, indictmentVerdictAppealDeadlineExpired: false, }) }) it('should return correct indictment info when no defendants have yet to view the verdict', () => { - const rulingDate = new Date().toISOString() + const rulingDate = '2022-06-14T19:50:08.033Z' const defendants = [ - { verdictViewDate: new Date().toISOString() } as Defendant, + { verdictViewDate: '2022-06-15T19:50:08.033Z' } as Defendant, { serviceRequirement: ServiceRequirement.NOT_REQUIRED, verdictViewDate: undefined, @@ -722,16 +717,14 @@ describe('getIndictmentInfo', () => { ) expect(indictmentInfo).toEqual({ - indictmentAppealDeadline: new Date( - new Date(rulingDate).setDate(new Date(rulingDate).getDate() + 28), - ).toISOString(), + indictmentAppealDeadline: '2022-07-12T23:59:59.999Z', indictmentVerdictViewedByAll: true, indictmentVerdictAppealDeadlineExpired: false, }) }) it('should return correct indictment info when the indictment ruling decision is FINE and the appeal deadline is not expired', () => { - const rulingDate = new Date().toISOString() + const rulingDate = new Date() const defendants = [ { serviceRequirement: ServiceRequirement.NOT_REQUIRED, @@ -741,14 +734,13 @@ describe('getIndictmentInfo', () => { const indictmentInfo = getIndictmentInfo( CaseIndictmentRulingDecision.FINE, - rulingDate, + rulingDate.toISOString(), defendants, ) + const expectedAppealDeadline = new Date(rulingDate.getFullYear(),rulingDate.getMonth(), rulingDate.getDate() + 3, 23, 59, 59, 999) expect(indictmentInfo).toEqual({ - indictmentAppealDeadline: new Date( - new Date(rulingDate).setDate(new Date(rulingDate).getDate() + 3), - ).toISOString(), + indictmentAppealDeadline: expectedAppealDeadline.toISOString(), indictmentVerdictViewedByAll: true, indictmentVerdictAppealDeadlineExpired: false, }) @@ -770,9 +762,7 @@ describe('getIndictmentInfo', () => { ) expect(indictmentInfo).toEqual({ - indictmentAppealDeadline: new Date( - new Date(rulingDate).setDate(new Date(rulingDate).getDate() + 3), - ).toISOString(), + indictmentAppealDeadline: '2024-05-29T23:59:59.999Z', indictmentVerdictViewedByAll: true, indictmentVerdictAppealDeadlineExpired: true, }) @@ -799,7 +789,7 @@ describe('getIndictmentDefendantsInfo', () => { { verdictViewDate: '2022-06-15T19:50:08.033Z', serviceRequirement: ServiceRequirement.REQUIRED, - verdictAppealDeadline: '2022-07-13T19:50:08.033Z', + verdictAppealDeadline: '2022-07-13T23:59:59.999Z', isVerdictAppealDeadlineExpired: true, }, { diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts index dbde5607204d..7a76d1a090f7 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts @@ -100,6 +100,9 @@ export const getAppealInfo = (theCase: Case): AppealInfo => { baseDate: theRulingDate, }).toISOString() + console.log({rulingDate}) + console.log({appealDeadline: appealInfo.appealDeadline}) + appealInfo.canProsecutorAppeal = !hasBeenAppealed && isAppealableDecision(prosecutorAppealDecision) @@ -212,7 +215,7 @@ export const getIndictmentDefendantsInfo = (theCase: Case) => { }) : undefined const isVerdictAppealDeadlineExpired = - verdictAppealDeadline && hasDatePassed(verdictAppealDeadline) + !!verdictAppealDeadline && hasDatePassed(verdictAppealDeadline) return { ...defendant, From 9777093b4bf24544d2f0d6ad3f934aae3d4f991d Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Tue, 21 Jan 2025 15:23:57 +0000 Subject: [PATCH 14/20] fix(j-s): format --- .../case/interceptors/case.transformer.spec.ts | 15 +++++++++++---- .../modules/case/interceptors/case.transformer.ts | 3 --- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts index a828ae6b5210..52f1cc4ab36b 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts @@ -339,7 +339,6 @@ describe('transformCase', () => { } as Case const appealInfo = transformCase(theCase) - console.log({appealInfo}) expect(appealInfo).toEqual( expect.objectContaining({ @@ -552,7 +551,7 @@ describe('getAppealInfo', () => { accusedPostponedAppealDate: '2022-06-15T19:50:08.033Z', prosecutorPostponedAppealDate: '2022-06-15T19:50:08.033Z', } as Case - + const appealInfo = getAppealInfo(theCase) expect(appealInfo).toEqual({ @@ -694,7 +693,7 @@ describe('getIndictmentInfo', () => { ) expect(indictmentInfo).toEqual({ - indictmentAppealDeadline: '2022-07-12T23:59:59.999Z', + indictmentAppealDeadline: '2022-07-12T23:59:59.999Z', indictmentVerdictViewedByAll: false, indictmentVerdictAppealDeadlineExpired: false, }) @@ -738,7 +737,15 @@ describe('getIndictmentInfo', () => { defendants, ) - const expectedAppealDeadline = new Date(rulingDate.getFullYear(),rulingDate.getMonth(), rulingDate.getDate() + 3, 23, 59, 59, 999) + const expectedAppealDeadline = new Date( + rulingDate.getFullYear(), + rulingDate.getMonth(), + rulingDate.getDate() + 3, + 23, + 59, + 59, + 999, + ) expect(indictmentInfo).toEqual({ indictmentAppealDeadline: expectedAppealDeadline.toISOString(), indictmentVerdictViewedByAll: true, diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts index 7a76d1a090f7..5c24967e6d36 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts @@ -100,9 +100,6 @@ export const getAppealInfo = (theCase: Case): AppealInfo => { baseDate: theRulingDate, }).toISOString() - console.log({rulingDate}) - console.log({appealDeadline: appealInfo.appealDeadline}) - appealInfo.canProsecutorAppeal = !hasBeenAppealed && isAppealableDecision(prosecutorAppealDecision) From 3b0f0f97eca58602b7e0ae1622905c0e161eb459 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Wed, 22 Jan 2025 10:01:57 +0000 Subject: [PATCH 15/20] fix(j-s): revert updates to appeal deadline date --- .../case/interceptors/case.transformer.spec.ts | 18 +++++++++--------- .../case/interceptors/case.transformer.ts | 2 +- .../types/src/lib/dates.spec.ts | 5 +++-- libs/judicial-system/types/src/lib/dates.ts | 5 +---- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts index 52f1cc4ab36b..800cc8c4d49d 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts @@ -343,7 +343,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ canBeAppealed: true, - appealDeadline: '2022-06-18T23:59:59.999Z', + appealDeadline: '2022-06-18T19:50:08.033Z', hasBeenAppealed: false, }), ) @@ -383,7 +383,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ canBeAppealed: true, - appealDeadline: '2022-06-18T23:59:59.999Z', + appealDeadline: '2022-06-18T19:50:08.033Z', hasBeenAppealed: false, }), ) @@ -460,7 +460,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ - appealDeadline: '2022-06-18T23:59:59.999Z', + appealDeadline: '2022-06-18T19:50:08.033Z', canBeAppealed: true, hasBeenAppealed: false, }), @@ -479,7 +479,7 @@ describe('transformCase', () => { expect(appealInfo).toEqual( expect.objectContaining({ - appealDeadline: '2022-06-18T23:59:59.999Z', + appealDeadline: '2022-06-18T19:50:08.033Z', canBeAppealed: false, hasBeenAppealed: false, }), @@ -557,7 +557,7 @@ describe('getAppealInfo', () => { expect(appealInfo).toEqual({ canBeAppealed: true, hasBeenAppealed: false, - appealDeadline: '2022-06-18T23:59:59.999Z', + appealDeadline: '2022-06-18T19:50:08.033Z', canDefenderAppeal: true, canProsecutorAppeal: true, }) @@ -582,7 +582,7 @@ describe('getAppealInfo', () => { hasBeenAppealed: true, appealedByRole: UserRole.DEFENDER, appealedDate: '2022-06-15T19:50:08.033Z', - appealDeadline: '2022-06-18T23:59:59.999Z', + appealDeadline: '2022-06-18T19:50:08.033Z', statementDeadline: '2021-06-16T19:50:08.033Z', canDefenderAppeal: false, canProsecutorAppeal: false, @@ -606,7 +606,7 @@ describe('getAppealInfo', () => { canBeAppealed: false, hasBeenAppealed: false, appealedDate: undefined, - appealDeadline: '2022-06-18T23:59:59.999Z', + appealDeadline: '2022-06-18T19:50:08.033Z', canDefenderAppeal: false, canProsecutorAppeal: false, }) @@ -737,7 +737,7 @@ describe('getIndictmentInfo', () => { defendants, ) - const expectedAppealDeadline = new Date( + const expectedIndictmentAppealDeadline = new Date( rulingDate.getFullYear(), rulingDate.getMonth(), rulingDate.getDate() + 3, @@ -747,7 +747,7 @@ describe('getIndictmentInfo', () => { 999, ) expect(indictmentInfo).toEqual({ - indictmentAppealDeadline: expectedAppealDeadline.toISOString(), + indictmentAppealDeadline: expectedIndictmentAppealDeadline.toISOString(), indictmentVerdictViewedByAll: true, indictmentVerdictAppealDeadlineExpired: false, }) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts index 5c24967e6d36..fbe2d8816738 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts @@ -129,7 +129,7 @@ const transformRequestCase = (theCase: Case): Case => { // TODO: Move remaining appeal fields to appealInfo isAppealDeadlineExpired: appealInfo.appealDeadline - ? hasDatePassed(new Date(appealInfo.appealDeadline)) + ? Date.now() >= new Date(appealInfo.appealDeadline).getTime() : false, isAppealGracePeriodExpired: theCase.rulingDate ? Date.now() >= new Date(theCase.rulingDate).getTime() + getDays(31) diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index bfe362ec6129..c0fb72a57f25 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -33,13 +33,14 @@ describe('getIndictmentAppealDeadlineDate', () => { describe('getAppealDeadlineDate', () => { test('should return expected appeal deadline', () => { // Arrange - const baseDate = new Date(2024, 1, 1) + const date = '2024-01-04T19:50:08.033Z' + const baseDate = new Date(date) // Act const actualDate = getAppealDeadlineDate({ baseDate }) // Assert - expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) + expect(actualDate).toStrictEqual(new Date(2024, 0, 7, 19, 50, 8, 33)) }) }) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts index 592a79b2cbe7..e65d07e04edb 100644 --- a/libs/judicial-system/types/src/lib/dates.ts +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -23,7 +23,4 @@ export const getIndictmentAppealDeadlineDate = ({ return setEndOfDay(deadlineDate) } -export const getAppealDeadlineDate = ({ baseDate }: { baseDate: Date }) => { - const deadlineDate = addDays(baseDate, APPEAL_WINDOW_DAYS) - return setEndOfDay(deadlineDate) -} +export const getAppealDeadlineDate = ({ baseDate }: { baseDate: Date }) => addDays(baseDate, APPEAL_WINDOW_DAYS) From 9d24f7dc432c9e4c087968c86492c1cebe623f58 Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Wed, 22 Jan 2025 10:07:04 +0000 Subject: [PATCH 16/20] fix(j-s): small fix --- .../src/app/modules/case/interceptors/case.transformer.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts index 800cc8c4d49d..07cdd84b68fa 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts @@ -149,7 +149,7 @@ describe('transformCase', () => { it('should be true when the appeal window has closed', () => { // Arrange const rulingDate = new Date() - rulingDate.setDate(rulingDate.getDate() - 4) + rulingDate.setDate(rulingDate.getDate() - 3) const theCase = { type: CaseType.CUSTODY, rulingDate: rulingDate.toISOString(), From 020b6589547f265a4697f455051dc58bb31feaf2 Mon Sep 17 00:00:00 2001 From: andes-it Date: Wed, 22 Jan 2025 11:43:30 +0000 Subject: [PATCH 17/20] chore: nx format:write update dirty files --- libs/judicial-system/types/src/lib/dates.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts index e65d07e04edb..05294c546920 100644 --- a/libs/judicial-system/types/src/lib/dates.ts +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -23,4 +23,5 @@ export const getIndictmentAppealDeadlineDate = ({ return setEndOfDay(deadlineDate) } -export const getAppealDeadlineDate = ({ baseDate }: { baseDate: Date }) => addDays(baseDate, APPEAL_WINDOW_DAYS) +export const getAppealDeadlineDate = ({ baseDate }: { baseDate: Date }) => + addDays(baseDate, APPEAL_WINDOW_DAYS) From bee910aac7a8d804664427e5d8956f463fc7c57a Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Fri, 24 Jan 2025 15:42:24 +0000 Subject: [PATCH 18/20] fix(j-s): small feedback fixes --- .../case/interceptors/case.transformer.spec.ts | 13 ++++--------- .../case/interceptors/case.transformer.ts | 15 +++++---------- .../BlueBoxWithIcon/BlueBoxWithDate.tsx | 8 ++++---- .../judicial-system/types/src/lib/dates.spec.ts | 17 ++++++++++------- libs/judicial-system/types/src/lib/dates.ts | 14 ++++++-------- 5 files changed, 29 insertions(+), 38 deletions(-) diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts index 07cdd84b68fa..59860b3e0807 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.spec.ts @@ -1,3 +1,5 @@ +import addDays from 'date-fns/addDays' +import endOfDay from 'date-fns/endOfDay' import each from 'jest-each' import { @@ -737,15 +739,8 @@ describe('getIndictmentInfo', () => { defendants, ) - const expectedIndictmentAppealDeadline = new Date( - rulingDate.getFullYear(), - rulingDate.getMonth(), - rulingDate.getDate() + 3, - 23, - 59, - 59, - 999, - ) + const expectedIndictmentAppealDeadline = endOfDay(addDays(rulingDate, 3)) + expect(indictmentInfo).toEqual({ indictmentAppealDeadline: expectedIndictmentAppealDeadline.toISOString(), indictmentVerdictViewedByAll: true, diff --git a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts index fbe2d8816738..49617355f482 100644 --- a/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts +++ b/apps/judicial-system/api/src/app/modules/case/interceptors/case.transformer.ts @@ -96,9 +96,7 @@ export const getAppealInfo = (theCase: Case): AppealInfo => { ) const theRulingDate = new Date(rulingDate) - appealInfo.appealDeadline = getAppealDeadlineDate({ - baseDate: theRulingDate, - }).toISOString() + appealInfo.appealDeadline = getAppealDeadlineDate(theRulingDate).toISOString() appealInfo.canProsecutorAppeal = !hasBeenAppealed && isAppealableDecision(prosecutorAppealDecision) @@ -162,10 +160,10 @@ export const getIndictmentInfo = ( } const theRulingDate = new Date(rulingDate) - const indictmentAppealDeadline = getIndictmentAppealDeadlineDate({ - baseDate: theRulingDate, + const indictmentAppealDeadline = getIndictmentAppealDeadlineDate( + theRulingDate, isFine, - }).toISOString() + ).toISOString() const verdictInfo = defendants?.map<[boolean, Date | undefined]>( (defendant) => [ @@ -206,10 +204,7 @@ export const getIndictmentDefendantsInfo = (theCase: Case) => { const baseDate = serviceRequired ? verdictViewDate : theCase.rulingDate const verdictAppealDeadline = baseDate - ? getIndictmentAppealDeadlineDate({ - baseDate: new Date(baseDate), - isFine, - }) + ? getIndictmentAppealDeadlineDate(new Date(baseDate), isFine) : undefined const isVerdictAppealDeadlineExpired = !!verdictAppealDeadline && hasDatePassed(verdictAppealDeadline) diff --git a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx index 966cec567f6e..b3e4223cdc41 100644 --- a/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx +++ b/apps/judicial-system/web/src/components/BlueBoxWithIcon/BlueBoxWithDate.tsx @@ -140,10 +140,10 @@ const BlueBoxWithDate: FC = (props) => { const deadline = defendant.verdictAppealDeadline || (dates.verdictViewDate && - getIndictmentAppealDeadlineDate({ - baseDate: dates.verdictViewDate, - isFine: false, - }).toISOString()) + getIndictmentAppealDeadlineDate( + dates.verdictViewDate, + false, + ).toISOString()) return getAppealExpirationInfo( deadline, diff --git a/libs/judicial-system/types/src/lib/dates.spec.ts b/libs/judicial-system/types/src/lib/dates.spec.ts index c0fb72a57f25..492c664f625e 100644 --- a/libs/judicial-system/types/src/lib/dates.spec.ts +++ b/libs/judicial-system/types/src/lib/dates.spec.ts @@ -1,3 +1,5 @@ +import endOfDay from 'date-fns/endOfDay' + import { getAppealDeadlineDate, getIndictmentAppealDeadlineDate, @@ -11,10 +13,10 @@ describe('getIndictmentAppealDeadlineDate', () => { const isFine = true // Act - const actualDate = getIndictmentAppealDeadlineDate({ baseDate, isFine }) + const actualDate = getIndictmentAppealDeadlineDate(baseDate, isFine) // Assert - expect(actualDate).toStrictEqual(new Date(2024, 1, 4, 23, 59, 59, 999)) + expect(actualDate).toStrictEqual(endOfDay(new Date(2024, 1, 4))) }) test('should return verdict appeal deadline', () => { @@ -23,10 +25,10 @@ describe('getIndictmentAppealDeadlineDate', () => { const isFine = false // Act - const actualDate = getIndictmentAppealDeadlineDate({ baseDate, isFine }) + const actualDate = getIndictmentAppealDeadlineDate(baseDate, isFine) // Assert - expect(actualDate).toStrictEqual(new Date(2024, 1, 29, 23, 59, 59, 999)) + expect(actualDate).toStrictEqual(endOfDay(new Date(2024, 1, 29))) }) }) @@ -37,7 +39,7 @@ describe('getAppealDeadlineDate', () => { const baseDate = new Date(date) // Act - const actualDate = getAppealDeadlineDate({ baseDate }) + const actualDate = getAppealDeadlineDate(baseDate) // Assert expect(actualDate).toStrictEqual(new Date(2024, 0, 7, 19, 50, 8, 33)) @@ -59,10 +61,11 @@ describe('hasDatePassed', () => { const futureDate = new Date(2024, 1, 1) const mockTodayDate = new Date(2024, 0, 1) + // Act jest.useFakeTimers().setSystemTime(mockTodayDate) + const isFutureDate = hasDatePassed(futureDate) - // Act // Assert - expect(hasDatePassed(futureDate)).toBe(false) + expect(isFutureDate).toBe(false) }) }) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts index e65d07e04edb..fb39a3aa8b19 100644 --- a/libs/judicial-system/types/src/lib/dates.ts +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -9,13 +9,10 @@ const setEndOfDay = (date: Date) => new Date(date.setHours(23, 59, 59, 999)) export const hasDatePassed = (deadline: Date) => Date.now() > deadline.getTime() -export const getIndictmentAppealDeadlineDate = ({ - baseDate, - isFine, -}: { - baseDate: Date - isFine?: boolean -}) => { +export const getIndictmentAppealDeadlineDate = ( + baseDate: Date, + isFine?: boolean, +) => { const windowDays = isFine ? FINE_APPEAL_WINDOW_DAYS : VERDICT_APPEAL_WINDOW_DAYS @@ -23,4 +20,5 @@ export const getIndictmentAppealDeadlineDate = ({ return setEndOfDay(deadlineDate) } -export const getAppealDeadlineDate = ({ baseDate }: { baseDate: Date }) => addDays(baseDate, APPEAL_WINDOW_DAYS) +export const getAppealDeadlineDate = (baseDate: Date) => + addDays(baseDate, APPEAL_WINDOW_DAYS) From addc331423d415328096afbd6b3e8f45964ba20e Mon Sep 17 00:00:00 2001 From: Thorhildur Thorleiksdottir Date: Fri, 24 Jan 2025 16:15:58 +0000 Subject: [PATCH 19/20] fix(j-s): use endOfDay from date-fns --- libs/judicial-system/types/src/lib/dates.ts | 5 ++--- libs/judicial-system/types/src/lib/indictmentCase.ts | 6 ++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/libs/judicial-system/types/src/lib/dates.ts b/libs/judicial-system/types/src/lib/dates.ts index fb39a3aa8b19..b3e15e24ffb9 100644 --- a/libs/judicial-system/types/src/lib/dates.ts +++ b/libs/judicial-system/types/src/lib/dates.ts @@ -1,12 +1,11 @@ import addDays from 'date-fns/addDays' +import endOfDay from 'date-fns/endOfDay' const VERDICT_APPEAL_WINDOW_DAYS = 28 const FINE_APPEAL_WINDOW_DAYS = 3 const APPEAL_WINDOW_DAYS = 3 -const setEndOfDay = (date: Date) => new Date(date.setHours(23, 59, 59, 999)) - export const hasDatePassed = (deadline: Date) => Date.now() > deadline.getTime() export const getIndictmentAppealDeadlineDate = ( @@ -17,7 +16,7 @@ export const getIndictmentAppealDeadlineDate = ( ? FINE_APPEAL_WINDOW_DAYS : VERDICT_APPEAL_WINDOW_DAYS const deadlineDate = addDays(baseDate, windowDays) - return setEndOfDay(deadlineDate) + return endOfDay(deadlineDate) } export const getAppealDeadlineDate = (baseDate: Date) => diff --git a/libs/judicial-system/types/src/lib/indictmentCase.ts b/libs/judicial-system/types/src/lib/indictmentCase.ts index 543c63879019..f58fbfe58f92 100644 --- a/libs/judicial-system/types/src/lib/indictmentCase.ts +++ b/libs/judicial-system/types/src/lib/indictmentCase.ts @@ -32,10 +32,8 @@ export const getIndictmentVerdictAppealDeadlineStatus = ( (newest, [_, current]) => (current && current > newest ? current : newest), new Date(0), ) - const deadline = getIndictmentAppealDeadlineDate({ - baseDate: newestViewDate, - isFine, - }) + const deadline = getIndictmentAppealDeadlineDate(newestViewDate, + isFine) return [true, hasDatePassed(deadline)] } From 69d583109b21c24e3182094da7e7c08557998ad0 Mon Sep 17 00:00:00 2001 From: andes-it Date: Fri, 24 Jan 2025 16:32:01 +0000 Subject: [PATCH 20/20] chore: nx format:write update dirty files --- libs/judicial-system/types/src/lib/indictmentCase.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libs/judicial-system/types/src/lib/indictmentCase.ts b/libs/judicial-system/types/src/lib/indictmentCase.ts index f58fbfe58f92..3ec2192059f4 100644 --- a/libs/judicial-system/types/src/lib/indictmentCase.ts +++ b/libs/judicial-system/types/src/lib/indictmentCase.ts @@ -32,8 +32,7 @@ export const getIndictmentVerdictAppealDeadlineStatus = ( (newest, [_, current]) => (current && current > newest ? current : newest), new Date(0), ) - const deadline = getIndictmentAppealDeadlineDate(newestViewDate, - isFine) + const deadline = getIndictmentAppealDeadlineDate(newestViewDate, isFine) return [true, hasDatePassed(deadline)] }