Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/afp offentlig frontend #3635

Merged
merged 11 commits into from
Sep 27, 2024
3 changes: 3 additions & 0 deletions apps/dolly-frontend/src/main/js/playwright/globalSetup.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { test as base } from '@playwright/test'
import {
aaregMock,
afpOffentligMock,
ameldingMock,
arenaMock,
backendBestillingerMock,
Expand Down Expand Up @@ -86,6 +87,7 @@ const pensjonTp = new RegExp(/testnav-pensjon-testdata-facade-proxy\/api\/v1\/tp
const pensjonPensjonsavtale = new RegExp(
/testnav-pensjon-testdata-facade-proxy\/api\/v2\/pensjonsavtale\/hent/,
)
const afpOffentlig = new RegExp(/testnav-pensjon-testdata-facade-proxy\/q1\/api\/mock-oppsett/)
const krrstub = new RegExp(/testnav-krrstub-proxy\/api\/v2/)
const udistub = new RegExp(/testnav-udistub-proxy\/api\/v1/)
const brregstub = new RegExp(/testnav-brregstub/)
Expand Down Expand Up @@ -147,6 +149,7 @@ const mockRoutes: RouteInfo[] = [
{ url: pensjon, response: pensjonMock },
{ url: pensjonTp, response: pensjonTpMock },
{ url: pensjonPensjonsavtale, response: pensjonPensjonsavtaleMock },
{ url: afpOffentlig, response: afpOffentligMock },
{ url: sigrunstub, response: sigrunstubMock },
{ url: udistub, response: udistubMock },
{ url: kodeverk, response: kodeverkMock },
Expand Down
50 changes: 50 additions & 0 deletions apps/dolly-frontend/src/main/js/playwright/mocks/BasicMocks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -898,6 +898,24 @@ export const pensjonTpMock = [{ ordning: '4095' }, { ordning: '3010' }]

export const pensjonPensjonsavtaleMock = [{}, {}]

export const afpOffentligMock = {
direktekall: [],
mocksvar: [
{
tpId: '4099',
statusAfp: 'INNVILGET',
virkningsDato: '2024-09-01T00:00:00',
sistBenyttetG: 2024,
belopsListe: [
{
fomDato: '2024-09-02T00:00:00',
belop: '10000',
},
],
},
],
}

export const tagsMock = [{ tag: 'DUMMY', beskrivelse: 'Dummy' }]

export const kontoregisterMock = {
Expand Down Expand Up @@ -1501,6 +1519,21 @@ export const backendBestillingerMock = [
},
],
},
{
id: 'PEN_AFP_OFFENTLIG',
navn: 'AFP offentlig (PEN)',
statuser: [
{
melding: 'OK',
detaljert: [
{
miljo: 'q1',
identer: ['12345678912'],
},
],
},
],
},
{
id: 'INNTKMELD',
navn: 'Inntektsmelding (ALTINN/JOARK)',
Expand Down Expand Up @@ -1698,6 +1731,23 @@ export const backendBestillingerMock = [
],
},
],
afpOffentlig: {
direktekall: [],
mocksvar: [
{
tpId: '4099',
statusAfp: 'INNVILGET',
virkningsDato: '2024-09-01T00:00:00',
sistBenyttetG: 2024,
belopsListe: [
{
fomDato: '2024-09-02T00:00:00',
belop: '10000',
},
],
},
],
},
},
inntektsmelding: {
inntekter: [
Expand Down
2 changes: 1 addition & 1 deletion apps/dolly-frontend/src/main/js/proxy-routes.json
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@
"changeOrigin": true,
"secure": false
},
"/testnav-pensjon-testdata-facade-proxy/api": {
"/testnav-pensjon-testdata-facade-proxy/": {
"target": "http://localhost:8020",
"changeOrigin": true,
"secure": false
Expand Down
14 changes: 14 additions & 0 deletions apps/dolly-frontend/src/main/js/src/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,20 @@ export const multiFetcherPensjon = (miljoUrlListe, headers = null as any) => {
)
}

export const multiFetcherAfpOffentlig = (miljoUrlListe, headers = null, path = null) => {
return Promise.allSettled(
miljoUrlListe.map((obj) =>
fetcher(obj.url, headers)
.then((result) => {
return { miljo: obj.miljo, data: result }
})
.catch((feil) => {
return { miljo: obj.miljo, feil: feil }
}),
),
).then((liste) => liste?.map((item) => item?.value))
}

export const multiFetcherDokarkiv = (miljoUrlListe) =>
Promise.all(
miljoUrlListe?.map((obj) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { kodeverkKeyToLabel } from '@/components/fagsystem/sigrunstubPensjonsgiv
import { useContext } from 'react'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'
import { showKodeverkLabel } from '@/components/fagsystem/skattekort/visning/Visning'
import { showTpNavn } from '@/components/fagsystem/afpOffentlig/visning/AfpOffentligVisning'

// TODO: Flytte til selector?
// - Denne kan forminskes ved bruk av hjelpefunksjoner
Expand Down Expand Up @@ -2048,6 +2049,31 @@ const mapPensjon = (bestillingData, data, navEnheter) => {
}
data.push(pensjonforvalterUforetrygd)
}

if (pensjonKriterier?.afpOffentlig) {
const afpOffentlig = pensjonKriterier.afpOffentlig

const pensjonforvalterAfpOffentlig = {
header: 'AFP Offentlig',
items: [
obj('Direktekall', afpOffentlig.direktekall?.map((tpId) => showTpNavn(tpId))?.join(', ')),
],
itemRows: [],
}

afpOffentlig?.mocksvar?.forEach((mocksvar, i) => {
pensjonforvalterAfpOffentlig.itemRows.push([
{ numberHeader: `AFP offentlig ${i + 1}` },
obj('TP-ordning', showTpNavn(mocksvar.tpId)),
obj('Status AFP', showLabel('statusAfp', mocksvar.statusAfp)),
obj('Virkningsdato', formatDate(mocksvar.virkningsDato)),
obj('Sist benyttet G', mocksvar.sistBenyttetG),
obj('Antall beløp', mocksvar.belopsListe?.length),
])
})

data.push(pensjonforvalterAfpOffentlig)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useContext } from 'react'
import React from 'react'
import Panel from '@/components/ui/panel/Panel'
import { Attributt, AttributtKategori } from '../Attributt'
import {
Expand All @@ -9,62 +9,37 @@ import {
import { harValgtAttributt } from '@/components/ui/form/formUtils'
import { pensjonPath } from '@/components/fagsystem/pensjon/form/Form'
import { genInitialAlderspensjonVedtak } from '@/components/fagsystem/alderspensjon/form/initialValues'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'
import { initialUforetrygd } from '@/components/fagsystem/uforetrygd/initialValues'
import _ from 'lodash'
import { alderspensjonPath } from '@/components/fagsystem/alderspensjon/form/Form'
import { uforetrygdPath } from '@/components/fagsystem/uforetrygd/form/Form'
import { initialPensjonInntekt } from '@/components/fagsystem/aareg/form/initialValues'
import { initialPensjonsavtale } from '@/components/fagsystem/pensjonsavtale/initalValues'
import { initialAfpOffentlig } from '@/components/fagsystem/afpOffentlig/initialValues'
import { avtalePath } from '@/components/fagsystem/pensjonsavtale/form/Form'
import { afpOffentligPath } from '@/components/fagsystem/afpOffentlig/form/Form'

export const PensjonPanel = ({ stateModifier, formValues }: any) => {
const sm = stateModifier(PensjonPanel.initialValues)
const opts = useContext(BestillingsveilederContext)

const harValgtUforetrygd = _.has(formValues, 'pensjonforvalter.uforetrygd')

const harGyldigApBestilling = opts?.tidligereBestillinger?.some((bestilling) =>
bestilling.status?.some(
(status) => status.id === 'PEN_AP' && status.statuser?.some((item) => item?.melding === 'OK'),
),
)

const harGyldigUforetrygdBestilling = opts?.tidligereBestillinger?.some((bestilling) =>
bestilling.status?.some(
(status) => status.id === 'PEN_UT' && status.statuser?.some((item) => item.melding === 'OK'),
),
)

const infoTekst =
'Pensjon: \nPensjonsgivende inntekt: \nInntektene blir lagt til i POPP-register. \n\n' +
'Tjenestepensjon: \nTjenestepensjonsforhold lagt til i TP. \n\n' +
'Alderspensjon: \nAlderspensjonssak med vedtak blir lagt til i PEN.'

const getIgnoreKeys = () => {
const ignoreKeys = []
if (harGyldigApBestilling || harGyldigUforetrygdBestilling || harValgtUforetrygd) {
ignoreKeys.push('alderspensjon')
}
if (harGyldigUforetrygdBestilling || harGyldigApBestilling || !harValgtUforetrygd) {
ignoreKeys.push('uforetrygd')
}
return ignoreKeys
}

return (
<Panel
heading={PensjonPanel.heading}
informasjonstekst={infoTekst}
checkAttributeArray={() => {
sm.batchAdd(getIgnoreKeys())
}}
checkAttributeArray={sm.batchAdd}
uncheckAttributeArray={sm.batchRemove}
iconType="pensjon"
startOpen={harValgtAttributt(formValues, [
pensjonPath,
avtalePath,
tpPath,
alderspensjonPath,
uforetrygdPath,
afpOffentligPath,
])}
>
<AttributtKategori title="Pensjonsgivende inntekt (POPP)" attr={sm.attrs}>
Expand All @@ -82,6 +57,9 @@ export const PensjonPanel = ({ stateModifier, formValues }: any) => {
<AttributtKategori title="Uføretrygd" attr={sm.attrs}>
<Attributt attr={sm.attrs.uforetrygd} />
</AttributtKategori>
<AttributtKategori title="AFP offentlig" attr={sm.attrs}>
<Attributt attr={sm.attrs.afpOffentlig} />
</AttributtKategori>
</Panel>
)
}
Expand All @@ -96,6 +74,7 @@ PensjonPanel.initialValues = ({ set, del, has }: any) => {
alderspensjon: 'pensjonforvalter.alderspensjon',
uforetrygd: 'pensjonforvalter.uforetrygd',
pensjonsavtale: 'pensjonforvalter.pensjonsavtale',
afpOffentlig: 'pensjonforvalter.afpOffentlig',
}
return {
inntekt: {
Expand Down Expand Up @@ -137,5 +116,13 @@ PensjonPanel.initialValues = ({ set, del, has }: any) => {
},
remove: () => del(paths.pensjonsavtale),
},
afpOffentlig: {
label: 'Har AFP offentlig',
checked: has(paths.afpOffentlig),
add: () => {
set(paths.afpOffentlig, initialAfpOffentlig)
},
remove: () => del(paths.afpOffentlig),
},
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { KrrstubForm } from '@/components/fagsystem/krrstub/form/KrrForm'
import { useFormContext } from 'react-hook-form'
import { SkattekortForm } from '@/components/fagsystem/skattekort/form/Form'
import { PensjonsavtaleForm } from '@/components/fagsystem/pensjonsavtale/form/Form'
import { AfpOffentligForm } from '@/components/fagsystem/afpOffentlig/form/Form'

const gruppeNavn = (gruppe) => <span style={{ fontWeight: 'bold' }}>{gruppe.navn}</span>

Expand Down Expand Up @@ -77,6 +78,7 @@ export const Steg2 = () => {
<TjenestepensjonForm />
<AlderspensjonForm />
<UforetrygdForm />
<AfpOffentligForm />
<ArenaForm />
<SykdomForm />
<BrregstubForm />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
export type BeloepTypes = {
fomDato: Date
belop: string
}

export type MocksvarTypes = {
tpId: string
statusAfp: string
virkningsDato: Date
sistBenyttetG: number
belopsListe: Array<BeloepTypes>
}

export type AfpOffentligTypes = {
direktekall: Array<string>
mocksvar: Array<MocksvarTypes>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { FormDollyFieldArray } from '@/components/ui/form/fieldArray/DollyFieldArray'
import { initialBeloep } from '@/components/fagsystem/afpOffentlig/initialValues'
import React from 'react'
import { FormTextInput } from '@/components/ui/form/inputs/textInput/TextInput'
import { FormDatepicker } from '@/components/ui/form/inputs/datepicker/Datepicker'

export const BelopForm = ({ path }: { path: string }) => {
return (
<FormDollyFieldArray name={path} header="Beløp" newEntry={initialBeloep} nested>
{(belop: string, idx: number) => (
<div key={idx} className="flexbox">
<FormDatepicker name={`${belop}.fomDato`} label="F.o.m. dato" />
<FormTextInput name={`${belop}.belop`} label="Beløp" type="number" />
</div>
)}
</FormDollyFieldArray>
)
}
Loading