-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #16 from navikt/dev/beregn-dagpenger-status
Dev/beregn dagpenger status
- Loading branch information
Showing
11 changed files
with
996 additions
and
31 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
91 changes: 91 additions & 0 deletions
91
src/api/data/dagpengerStatus/beregnArbeidssokerPerioder.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
import ukerFraDato from '@alheimsins/uker-fra-dato'; | ||
import { BeregnedePerioder } from './typer'; | ||
|
||
export function dagerFraDato(from: Date, to?: Date): number { | ||
const todate = to || new Date(); | ||
const start = new Date(from.toISOString().substr(0, 10)); | ||
const end = new Date(todate.toISOString().substr(0, 10)); | ||
const millis = end.getTime() - start.getTime(); | ||
const days = millis / 3600000 / 24; | ||
return Math.floor(days); | ||
} | ||
|
||
export interface Periode { | ||
fraOgMed: string; | ||
tilOgMed?: string; | ||
} | ||
|
||
interface Props { | ||
arbeidssokerperioder: [] | Periode[]; | ||
} | ||
|
||
function sorterArbeidssokerperioderSisteForst(a: Periode, b: Periode) { | ||
return new Date(b.fraOgMed).getTime() - new Date(a.fraOgMed).getTime(); | ||
} | ||
|
||
function harAktivArbeidssokerperiode(perioder: Periode[]) { | ||
const sistePeriode = perioder[0]; | ||
return sistePeriode.tilOgMed === null || sistePeriode.tilOgMed === undefined; | ||
} | ||
|
||
function beregnAntallDagerSidenSisteArbeidssokerperiode(dato: string | null) { | ||
return dagerFraDato(dato ? new Date(dato) : new Date()); | ||
} | ||
|
||
function beregnAntallUkerSidenSisteArbeidssokerperiode(dato: string | null) { | ||
return ukerFraDato(dato ? new Date(dato) : new Date()); | ||
} | ||
|
||
function beregnAntallUkerMellomSisteArbeidssokerperioder(perioder: Periode[]) { | ||
const sistePeriode = perioder[0]; | ||
const nestSistePeriode = perioder[1]; | ||
return ukerFraDato(new Date(nestSistePeriode?.tilOgMed || '2020-01-01'), new Date(sistePeriode.fraOgMed)); | ||
} | ||
|
||
function beregnArbeidssokerperioder(props: Props | null | undefined): BeregnedePerioder { | ||
const { arbeidssokerperioder } = props ? props : { arbeidssokerperioder: null }; | ||
|
||
if (arbeidssokerperioder === null) { | ||
return { | ||
harAktivArbeidssokerperiode: 'INGEN_DATA', | ||
aktivPeriodeStart: 'INGEN_DATA', | ||
antallDagerSidenSisteArbeidssokerperiode: 'INGEN_DATA', | ||
antallUkerSidenSisteArbeidssokerperiode: 'INGEN_DATA', | ||
antallUkerMellomSisteArbeidssokerperioder: 'INGEN_DATA', | ||
}; | ||
} | ||
|
||
if (arbeidssokerperioder.length === 0) { | ||
return { | ||
harAktivArbeidssokerperiode: 'N/A', | ||
aktivPeriodeStart: 'N/A', | ||
antallDagerSidenSisteArbeidssokerperiode: 'N/A', | ||
antallUkerSidenSisteArbeidssokerperiode: 'N/A', | ||
antallUkerMellomSisteArbeidssokerperioder: 'N/A', | ||
}; | ||
} | ||
|
||
arbeidssokerperioder.sort(sorterArbeidssokerperioderSisteForst); | ||
|
||
const aktivArbeidssokerperiode = harAktivArbeidssokerperiode(arbeidssokerperioder); | ||
const sluttDatoSistePeriode = arbeidssokerperioder[0].tilOgMed ?? null; | ||
const harMerEnnEnPeriode = arbeidssokerperioder.length > 1; | ||
|
||
return { | ||
harAktivArbeidssokerperiode: aktivArbeidssokerperiode ? 'Ja' : 'Nei', | ||
aktivPeriodeStart: aktivArbeidssokerperiode | ||
? new Date(arbeidssokerperioder[0].fraOgMed).toISOString().substring(0, 10) | ||
: 'Ingen aktive perioder', | ||
antallDagerSidenSisteArbeidssokerperiode: aktivArbeidssokerperiode | ||
? 'Ikke avsluttet' | ||
: beregnAntallDagerSidenSisteArbeidssokerperiode(sluttDatoSistePeriode), | ||
antallUkerSidenSisteArbeidssokerperiode: aktivArbeidssokerperiode | ||
? 'Ikke avsluttet' | ||
: beregnAntallUkerSidenSisteArbeidssokerperiode(sluttDatoSistePeriode), | ||
antallUkerMellomSisteArbeidssokerperioder: harMerEnnEnPeriode | ||
? beregnAntallUkerMellomSisteArbeidssokerperioder(arbeidssokerperioder) | ||
: 'Første periode', | ||
}; | ||
} | ||
|
||
export default beregnArbeidssokerperioder; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
import { | ||
BeregnedePerioder, | ||
BrukerInfoData, | ||
BrukerregistreringData, | ||
DagpengeStatus, | ||
DpInnsynPaabegyntSoknad, | ||
DpInnsynSoknad, | ||
Vedtak, | ||
} from './typer'; | ||
|
||
export const sorterEtterNyesteDatoInnsendt = (a: DpInnsynSoknad, b: DpInnsynSoknad) => | ||
new Date(b.datoInnsendt).getTime() - new Date(a.datoInnsendt).getTime(); | ||
|
||
export const sorterEtterNyesteVedtak = (a: Vedtak, b: Vedtak) => | ||
new Date(b.datoFattet).getTime() - new Date(a.datoFattet).getTime(); | ||
|
||
function beregnDagpengeStatus({ | ||
brukerInfoData, | ||
registreringData, | ||
paabegynteSoknader, | ||
innsendteSoknader, | ||
dagpengeVedtak, | ||
arbeidssokerperioder, | ||
}: { | ||
brukerInfoData: BrukerInfoData; | ||
registreringData: BrukerregistreringData | null; | ||
paabegynteSoknader: DpInnsynPaabegyntSoknad[]; | ||
innsendteSoknader: DpInnsynSoknad[]; | ||
dagpengeVedtak: Vedtak[]; | ||
arbeidssokerperioder: BeregnedePerioder; | ||
}): DagpengeStatus { | ||
const { rettighetsgruppe } = brukerInfoData; | ||
const { aktivPeriodeStart, harAktivArbeidssokerperiode } = arbeidssokerperioder; | ||
const erIaktivPeriode = harAktivArbeidssokerperiode === 'Ja'; | ||
const harOpprettetDato = registreringData?.registrering?.opprettetDato; | ||
|
||
if (rettighetsgruppe === 'DAGP') { | ||
return 'mottar'; | ||
} | ||
|
||
if (!harOpprettetDato && !erIaktivPeriode) { | ||
return 'ukjent'; | ||
} | ||
|
||
const registreringsDato = harOpprettetDato | ||
? new Date(registreringData?.registrering!.opprettetDato) | ||
: new Date(aktivPeriodeStart); | ||
const sistInnsendteSoknad = innsendteSoknader.sort(sorterEtterNyesteDatoInnsendt)[0]; | ||
const sisteDagpengevedtak = dagpengeVedtak.sort(sorterEtterNyesteVedtak)[0]; | ||
|
||
const erVedtakNyereEnnSoknad = | ||
sisteDagpengevedtak && | ||
sistInnsendteSoknad && | ||
new Date(sisteDagpengevedtak.datoFattet).getTime() > new Date(sistInnsendteSoknad.datoInnsendt).getTime(); | ||
|
||
if (erVedtakNyereEnnSoknad) { | ||
const vedtakErNyereEnnSisteRegistreringsdato = | ||
new Date(sisteDagpengevedtak.datoFattet).getTime() > registreringsDato.getTime(); | ||
if (sisteDagpengevedtak && sisteDagpengevedtak.status === 'AVSLÅTT' && vedtakErNyereEnnSisteRegistreringsdato) { | ||
return 'avslag'; | ||
} | ||
|
||
const erVedtakAvsluttet = sisteDagpengevedtak.tilDato | ||
? new Date(sisteDagpengevedtak.tilDato).getTime() < new Date().getTime() | ||
: false; | ||
|
||
if (sisteDagpengevedtak && sisteDagpengevedtak.status === 'INNVILGET' && !erVedtakAvsluttet) { | ||
return vedtakErNyereEnnSisteRegistreringsdato ? 'innvilget' : 'tidligere-innvilget'; | ||
} | ||
|
||
if (erVedtakAvsluttet) { | ||
return 'stanset'; | ||
} | ||
} | ||
|
||
const sistPaabegynteSoknad = paabegynteSoknader.sort( | ||
(a: DpInnsynPaabegyntSoknad, b: DpInnsynPaabegyntSoknad) => | ||
new Date(a.sistEndret).getTime() - new Date(b.sistEndret).getTime() | ||
)[0]; | ||
|
||
const harPaabegyntEtterInnsendt = | ||
sistPaabegynteSoknad && | ||
sistInnsendteSoknad && | ||
new Date(sistPaabegynteSoknad.sistEndret).getTime() > new Date(sistInnsendteSoknad?.datoInnsendt).getTime(); | ||
|
||
if (harPaabegyntEtterInnsendt) { | ||
return 'soktogpaabegynt'; | ||
} | ||
|
||
if (sistInnsendteSoknad) { | ||
return 'sokt'; | ||
} | ||
|
||
if (sistPaabegynteSoknad) { | ||
return 'paabegynt'; | ||
} | ||
|
||
return 'ukjent'; | ||
} | ||
|
||
export default beregnDagpengeStatus; |
Oops, something went wrong.