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

Commit

Permalink
feat(per): met les PER en survie provisoire si une prolongation a été…
Browse files Browse the repository at this point in the history
… déposée (#901)
  • Loading branch information
vmaubert authored Jan 31, 2022
1 parent 45c5833 commit d73da16
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 27 deletions.
6 changes: 5 additions & 1 deletion src/business/processes/titres-statut-ids-update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ const titresStatutIdsUpdate = async (titresIds?: string[]) => {
const aujourdhui = dateFormat(new Date(), 'yyyy-mm-dd')

titres.forEach(titre => {
const statutId = titreStatutIdFind(aujourdhui, titre.demarches)
const statutId = titreStatutIdFind(
aujourdhui,
titre.demarches,
titre.typeId
)

if (statutId !== titre.statutId) {
queue.add(async () => {
Expand Down
35 changes: 34 additions & 1 deletion src/business/rules/__mocks__/titre-statut-id-find-titres.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,38 @@ const titreDemarchesInstruction = [
}
] as ITitreDemarche[]

const titrePERDemarchesProlongation = [
{
id: 'm-pr-saint-pierre-2014-pro01',
titreId: 'm-pr-saint-pierre-2014',
type: { id: 'pr1' },
typeId: 'pr1',
statutId: 'dep',
ordre: 1,
etapes: [{ date: '2020-01-01', typeId: 'mfr', statutId: 'fai' }]
},
{
id: 'm-pr-saint-pierre-2014-oct01',
titreId: 'm-pr-saint-pierre-2014',
type: { id: 'oct' },
typeId: 'oct',
statutId: 'acc',
ordre: 1,
etapes: [
{
id: 'm-pr-saint-pierre-2014-oct01-dex01',
titreDemarcheId: 'm-pr-saint-pierre-2014-oct01',
typeId: 'dex',
statutId: 'acc',
ordre: 1,
date: '1014-04-01',
dateDebut: null,
dateFin: '2020-04-01'
}
]
}
] as ITitreDemarche[]

export {
titreDemarchesIndefini,
titreDemarchesValide,
Expand All @@ -133,5 +165,6 @@ export {
titreDemarchesOctroiRejete,
titreDemarchesOctroiClasse,
titreDemarchesOctroiRetire,
titreDemarchesInstruction
titreDemarchesInstruction,
titrePERDemarchesProlongation
}
6 changes: 5 additions & 1 deletion src/business/rules/titre-etape-prop-find.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ const titreEtapePropFind = (
)

// calcule le statut du titre
const titreStatutId = titreStatutIdFind(date, titreDemarchesFiltered)
const titreStatutId = titreStatutIdFind(
date,
titreDemarchesFiltered,
titreTypeId
)

// cherche la première occurrence de la propriété
// dans une démarche et une étape valides
Expand Down
53 changes: 32 additions & 21 deletions src/business/rules/titre-statut-id-find.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,61 +9,72 @@ import {
titreDemarchesOctroiRejete,
titreDemarchesOctroiClasse,
titreDemarchesOctroiRetire,
titreDemarchesInstruction
titreDemarchesInstruction,
titrePERDemarchesProlongation
} from './__mocks__/titre-statut-id-find-titres'

describe("statut d'un titre", () => {
const aujourdhui = '2020-12-01'

test("le statut d'un titre sans démarche est “ind”", () => {
expect(titreStatutIdFind(aujourdhui, undefined)).toEqual('ind')
expect(titreStatutIdFind(aujourdhui, undefined, '')).toEqual('ind')
})

test("le statut d'un titre avec des démarches dont le statut est “ind” est également “ind”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesIndefini)).toEqual('ind')
expect(titreStatutIdFind(aujourdhui, titreDemarchesIndefini, '')).toEqual(
'ind'
)
})

test("le statut d'un titre dont la date de fin est dans le futur est “val”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesValide)).toEqual('val')
expect(titreStatutIdFind(aujourdhui, titreDemarchesValide, '')).toEqual(
'val'
)
})

test("le statut d'un titre dont la date de fin est dans le passé est “ech”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesEchu)).toEqual('ech')
expect(titreStatutIdFind(aujourdhui, titreDemarchesEchu, '')).toEqual('ech')
})

test("le statut d'un titre dont l'unique démarche est un octroi en instruction est “dmi”", () => {
expect(
titreStatutIdFind(aujourdhui, titreDemarchesOctroiInstruction)
titreStatutIdFind(aujourdhui, titreDemarchesOctroiInstruction, '')
).toEqual('dmi')
})

test("le statut d'un titre dont l'unique démarche est un octroi déposé est “dmi”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesOctroiDepose)).toEqual(
'dmi'
)
expect(
titreStatutIdFind(aujourdhui, titreDemarchesOctroiDepose, '')
).toEqual('dmi')
})

test("le statut d'un titre dont l'unique démarche est un octroi rejeté est “dmc”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesOctroiRejete)).toEqual(
'dmc'
)
expect(
titreStatutIdFind(aujourdhui, titreDemarchesOctroiRejete, '')
).toEqual('dmc')
})

test("le statut d'un titre dont l'unique démarche est un octroi classé sans suite est “dmc”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesOctroiClasse)).toEqual(
'dmc'
)
expect(
titreStatutIdFind(aujourdhui, titreDemarchesOctroiClasse, '')
).toEqual('dmc')
})

test("le statut d'un titre dont l'unique démarche est un octroi retiré est “dmc”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesOctroiRetire)).toEqual(
'dmc'
)
expect(
titreStatutIdFind(aujourdhui, titreDemarchesOctroiRetire, '')
).toEqual('dmc')
})

test("le statut d'un titre avec une démarche en instruction est “mod”", () => {
expect(titreStatutIdFind(aujourdhui, titreDemarchesInstruction)).toEqual(
'mod'
)
expect(
titreStatutIdFind(aujourdhui, titreDemarchesInstruction, '')
).toEqual('mod')
})

test("le statut d'un titre PER M ou W avec une prolongation déposée est “mod”", () => {
expect(
titreStatutIdFind(aujourdhui, titrePERDemarchesProlongation, 'prm')
).toEqual('mod')
})
})
32 changes: 30 additions & 2 deletions src/business/rules/titre-statut-id-find.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { ITitreDemarche } from '../../types'
import { DemarchesStatutsTypes, ITitreDemarche } from '../../types'

import { titreDateFinFind } from './titre-date-fin-find'

const titreStatutIdFind = (
aujourdhui: string,
demarches?: ITitreDemarche[] | null
demarches: ITitreDemarche[] | null | undefined,
titreTypeId: string
) => {
const titreDemarches = demarches
? demarches.filter(d => !d.type!.travaux)
Expand Down Expand Up @@ -49,6 +50,33 @@ const titreStatutIdFind = (
return 'val'
}

// si le titre est un PER M ou W
// et qu'une démarche de prolongation est déposée et a été déposée avant l'échéance de l'octroi
// -> le statut du titre est modification en instance (survie provisoire)
if (['prm', 'prw'].includes(titreTypeId)) {
const octroi = titreDemarches.find(d => d.typeId === 'oct')

const dateFinOctroi = octroi ? titreDateFinFind([octroi]) : null
if (
dateFinOctroi &&
titreDemarches.some(d => {
if (!['pr1', 'pr2'].includes(d.typeId)) {
return false
}

if (d.statutId !== DemarchesStatutsTypes.Depose) {
return false
}

const demandeProlongation = d.etapes?.find(e => e.typeId === 'mfr')

return demandeProlongation && demandeProlongation.date < dateFinOctroi
})
) {
return 'mod'
}
}

// sinon le statut du titre est échu
return 'ech'
}
Expand Down
6 changes: 5 additions & 1 deletion src/business/utils/titre-valide-check.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,11 @@ const titreValideCheck = (
)

// si le titre a le statut "modification en instance" au moment de dateDebut
const titreStatutId = titreStatutIdFind(dateDebut, newTitreDemarches)
const titreStatutId = titreStatutIdFind(
dateDebut,
newTitreDemarches,
titreTypeId
)

if (titreStatutId === 'mod') return true

Expand Down

0 comments on commit d73da16

Please sign in to comment.