Skip to content

Commit

Permalink
Merge branch 'master' into feature/sigrunstub_nytt_api
Browse files Browse the repository at this point in the history
  • Loading branch information
krharum committed Sep 19, 2023
2 parents bcc9224 + 9b1c224 commit 532c385
Show file tree
Hide file tree
Showing 26 changed files with 713 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public static Mono<String> getAapStatus(AapResponse response, ErrorStatusDecoder

public static String fmtResponse(String miljoe, String system, String status) {

return encodeStatus(String.format(MILJOE_FMT, miljoe, system, status));
return String.format(MILJOE_FMT, miljoe, system, encodeStatus(status));
}

public static String getMessage(String jsonFeilmelding) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ public Flux<PersonMiljoeDTO> call() {
.header(HttpHeaders.AUTHORIZATION, "Bearer " + token)
.retrieve()
.bodyToFlux(PersonMiljoeDTO.class)
.map(resultat -> {
resultat.setIdent(ident);
return resultat;
})
.onErrorResume(throwable -> Mono.just(PersonMiljoeDTO.builder()
.status("FEIL")
.melding(WebClientFilter.getStatus(throwable).getReasonPhrase())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import lombok.extern.slf4j.Slf4j;
import no.nav.dolly.bestilling.ClientFuture;
import no.nav.dolly.bestilling.tpsmessagingservice.TpsMessagingConsumer;
import no.nav.dolly.consumer.pdlperson.PdlPersonConsumer;
import no.nav.dolly.domain.PdlPerson;
import no.nav.dolly.domain.PdlPersonBolk;
import no.nav.dolly.domain.jpa.BestillingProgress;
import no.nav.dolly.domain.resultset.RsDollyUtvidetBestilling;
import no.nav.dolly.domain.resultset.SystemTyper;
Expand All @@ -20,6 +23,7 @@
import java.time.Duration;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
Expand All @@ -41,21 +45,46 @@ public class TpsPersonService {
private final TpsMessagingConsumer tpsMessagingConsumer;
private final TransactionHelperService transactionHelperService;
private final TransaksjonMappingService transaksjonMappingService;
private final PdlPersonConsumer pdlPersonConsumer;

public Flux<ClientFuture> syncPerson(DollyPerson dollyPerson, RsDollyUtvidetBestilling bestilling, BestillingProgress progress, boolean isOpprettEndre) {

long startTime = System.currentTimeMillis();

return Flux.from(Flux.fromIterable(bestilling.getEnvironments())
return Flux.fromIterable(bestilling.getEnvironments())
.filter(PENSJON_MILJOER::contains)
.collectList()
.filter(penMiljoer -> !penMiljoer.isEmpty())
.filter(penMiljoer -> isRelevantBestilling(bestilling) &&
(isOpprettEndre || !isTransaksjonMapping(dollyPerson.getIdent(), bestilling, penMiljoer)))
.flatMap(penMiljoer -> getTpsPerson(startTime, dollyPerson.getIdent(),
penMiljoer, Collections.emptyList(), progress))
.map(status -> prepareResult(dollyPerson.getIdent(), status, bestilling.getEnvironments(), startTime))
.map(status -> futurePersist(progress, status)));
.flatMapMany(penMiljoer ->
getRelasjoner(dollyPerson.getIdent())
.flatMap(relasjon -> Flux.from(getTpsPerson(startTime, dollyPerson.getIdent(),
penMiljoer, Collections.emptyList(), progress)
.map(status -> prepareResult(relasjon, status, bestilling.getEnvironments(), startTime)))))
.collectList()
.flatMapIterable(list -> list)
.map(status -> futurePersist(progress, dollyPerson.getIdent(), status));
}

private Flux<String> getRelasjoner(String ident) {

return pdlPersonConsumer.getPdlPersoner(List.of(ident))
.filter(pdlPersonBolk -> nonNull(pdlPersonBolk.getData()))
.map(PdlPersonBolk::getData)
.map(PdlPersonBolk.Data::getHentPersonBolk)
.flatMap(Flux::fromIterable)
.filter(personBolk -> nonNull(personBolk.getPerson()))
.flatMap(person -> Flux.fromStream(Stream.of(
Stream.of(ident),
person.getPerson().getSivilstand().stream()
.map(PdlPerson.Sivilstand::getRelatertVedSivilstand)
.filter(Objects::nonNull),
person.getPerson().getForelderBarnRelasjon().stream()
.map(PdlPerson.ForelderBarnRelasjon::getRelatertPersonsIdent)
.filter(Objects::nonNull))
.flatMap(Function.identity())))
.distinct();
}

private boolean isRelevantBestilling(RsDollyUtvidetBestilling bestilling) {
Expand Down Expand Up @@ -120,6 +149,7 @@ private List<PersonMiljoeDTO> prepareResult(String ident, List<PersonMiljoeDTO>
miljoer.stream()
.filter(miljoe -> status.stream().noneMatch(status1 -> miljoe.equals(status1.getMiljoe())))
.map(miljoe -> PersonMiljoeDTO.builder()
.ident(ident)
.miljoe(miljoe)
.status("NOK")
.utfyllendeMelding(String.format("Feil: Synkronisering mot TPS gitt opp etter %d sekunder.", MAX_MILLIES / 1000))
Expand All @@ -128,17 +158,19 @@ private List<PersonMiljoeDTO> prepareResult(String ident, List<PersonMiljoeDTO>
.toList();
}

private ClientFuture futurePersist(BestillingProgress progress, List<PersonMiljoeDTO> status) {
private ClientFuture futurePersist(BestillingProgress progress, String ident, List<PersonMiljoeDTO> status) {

return () -> {

progress.setIsTpsSyncEnv(status.stream()
.filter(status1 -> ident.equals(status1.getIdent()))
.filter(PersonMiljoeDTO::isOk)
.map(PersonMiljoeDTO::getMiljoe)
.toList());

transactionHelperService.persister(progress, BestillingProgress::setTpsSyncStatus,
status.stream()
.filter(detalj -> ident.equals(detalj.getIdent()))
.map(detalj -> String.format("%s:%s", detalj.getMiljoe(),
ErrorStatusDecoder.encodeStatus(detalj.isOk() ? detalj.getStatus() :
StringUtils.trimToEmpty(String.format("FEIL: %s", detalj.getUtfyllendeMelding())))))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public static String encodeStatus(String toBeEncoded) {
.replace("]", "")
.replace(',', ';')
.replace(':', '=')
.replace("\"", ""): "";
.replace("\"", "")
.replace("$", "§") : "";
}

public String getErrorText(HttpStatus errorStatus, String errorMsg) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-----------------------------
-- A L T E R T A B L E S --
-----------------------------

alter table transaksjon_mapping
alter column transaksjon_id type varchar(2000);
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { SelectOptionsManager as Options } from '@/service/SelectOptions'
import _get from 'lodash/get'
import _has from 'lodash/has'
import { MedlKodeverk } from '@/components/fagsystem/medl/MedlConstants'
import { useNavEnheter } from '@/utils/hooks/useNorg2'

// TODO: Flytte til selector?
// - Denne kan forminskes ved bruk av hjelpefunksjoner
Expand Down Expand Up @@ -1850,6 +1851,47 @@ const mapPensjon = (bestillingData, data) => {
}
data.push(pensjonforvalterAlderspensjon)
}

if (pensjonKriterier.uforetrygd) {
const uforetrygd = pensjonKriterier.uforetrygd

const { navEnheter } = useNavEnheter()
const navEnhetLabel = navEnheter?.find(
(enhet) => enhet.value === uforetrygd.navEnhetId?.toString(),
)?.label

const pensjonforvalterUforetrygd = {
header: 'Uføretrygd',
items: [
obj('Krav fremsatt dato', formatDate(uforetrygd.kravFremsattDato)),
obj('Ønsket virkningsdato', formatDate(uforetrygd.onsketVirkningsDato)),
obj('Uføretidspunkt', formatDate(uforetrygd.uforetidspunkt)),
obj('Inntekt før uførhet', uforetrygd.inntektForUforhet),
obj('Har barnetillegg', oversettBoolean(uforetrygd.barnetilleggDetaljer !== null)),
obj(
'Type barnetillegg',
showLabel('barnetilleggType', uforetrygd.barnetilleggDetaljer?.barnetilleggType),
),
obj(
'Antall forventede inntekter for søker',
uforetrygd.barnetilleggDetaljer?.forventedeInntekterSoker?.length,
),
obj(
'Antall forventede inntekter for partner',
uforetrygd.barnetilleggDetaljer?.forventedeInntekterEP?.length,
),
obj(
'Sats for minimum IFU',
showLabel('minimumInntektForUforhetType', uforetrygd.minimumInntektForUforhetType),
),
obj('Uføregrad', uforetrygd.uforegrad ? `${uforetrygd.uforegrad}%` : null),
obj('Saksbehandler', uforetrygd.saksbehandler),
obj('Attesterer', uforetrygd.attesterer),
obj('NAV-enhet', navEnhetLabel || uforetrygd.navEnhetId),
],
}
data.push(pensjonforvalterUforetrygd)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,20 @@ import { aaregAttributt } from '@/components/fagsystem/aareg/form/Form'
import { sigrunAttributt } from '@/components/fagsystem/sigrunstub/form/Form'
import { inntektstubAttributt } from '@/components/fagsystem/inntektstub/form/Form'
import { inntektsmeldingAttributt } from '@/components/fagsystem/inntektsmelding/form/Form'
import { useContext } from 'react'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'

export const ArbeidInntektPanel = ({ stateModifier, formikBag }) => {
const sm = stateModifier(ArbeidInntektPanel.initialValues)
const opts = useContext(BestillingsveilederContext)

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

const infoTekst =
'Arbeidsforhold: \nDataene her blir lagt til AAREG. \n\nInntekt: \nSkatte- og inntektsgrunnlag. Inntektene blir lagt i Sigrun-stub.' +
Expand All @@ -18,7 +29,9 @@ export const ArbeidInntektPanel = ({ stateModifier, formikBag }) => {
<Panel
heading={ArbeidInntektPanel.heading}
informasjonstekst={infoTekst}
checkAttributeArray={sm.batchAdd}
checkAttributeArray={() =>
sm.batchAdd(harGyldigInntektsmeldingBestilling ? ['inntektsmelding'] : [])
}
uncheckAttributeArray={sm.batchRemove}
iconType="arbeid"
startOpen={harValgtAttributt(formikBag.values, [
Expand All @@ -38,7 +51,14 @@ export const ArbeidInntektPanel = ({ stateModifier, formikBag }) => {
<Attributt attr={sm.attrs.inntektstub} />
</AttributtKategori>
<AttributtKategori title="Inntektsmelding (fra Altinn)" attr={sm.attrs}>
<Attributt attr={sm.attrs.inntektsmelding} id="inntekt_inntektstub" />
<Attributt
attr={sm.attrs.inntektsmelding}
id="inntekt_inntektstub"
disabled={harGyldigInntektsmeldingBestilling}
title={
harGyldigInntektsmeldingBestilling ? 'Personen har allerede inntektsmelding' : null
}
/>
</AttributtKategori>
</Panel>
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,51 @@ import { harValgtAttributt } from '@/components/ui/form/formUtils'
import { pensjonPath } from '@/components/fagsystem/pensjon/form/Form'
import { initialAlderspensjon } from '@/components/fagsystem/alderspensjon/form/initialValues'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'
import { initialUforetrygd } from '@/components/fagsystem/uforetrygd/initialValues'

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

const harGyldigApBestilling = opts?.tidligereBestillinger?.some((bestilling) =>
bestilling.status?.some(
(status) => status.id === 'PEN_AP' && status.statuser?.[0]?.melding === 'OK'
)
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) {
ignoreKeys.push('alderspensjon')
}
if (harGyldigUforetrygdBestilling) {
ignoreKeys.push('uforetrygd')
}
return ignoreKeys
}

return (
<Panel
heading={PensjonPanel.heading}
informasjonstekst={infoTekst}
checkAttributeArray={() => sm.batchAdd(harGyldigApBestilling ? ['alderspensjon'] : [])}
checkAttributeArray={() => {
sm.batchAdd(getIgnoreKeys())
}}
uncheckAttributeArray={sm.batchRemove}
iconType="pensjon"
startOpen={harValgtAttributt(formikBag.values, [pensjonPath, tpPath])}
Expand All @@ -41,11 +65,20 @@ export const PensjonPanel = ({ stateModifier, formikBag }: any) => {
<AttributtKategori title="Tjenestepensjon (TP)" attr={sm.attrs}>
<Attributt attr={sm.attrs.tp} />
</AttributtKategori>
{!harGyldigApBestilling && (
<AttributtKategori title="Alderspensjon" attr={sm.attrs}>
<Attributt attr={sm.attrs.alderspensjon} />
</AttributtKategori>
)}
<AttributtKategori title="Alderspensjon" attr={sm.attrs}>
<Attributt
attr={sm.attrs.alderspensjon}
disabled={harGyldigApBestilling}
title={harGyldigApBestilling ? 'Personen har allerede alderspensjon' : null}
/>
</AttributtKategori>
<AttributtKategori title="Uføretrygd" attr={sm.attrs}>
<Attributt
attr={sm.attrs.uforetrygd}
disabled={harGyldigUforetrygdBestilling}
title={harGyldigUforetrygdBestilling ? 'Personen har allerede uføretrygd' : null}
/>
</AttributtKategori>
</Panel>
)
}
Expand All @@ -57,6 +90,7 @@ PensjonPanel.initialValues = ({ set, del, has }: any) => {
inntekt: 'pensjonforvalter.inntekt',
tp: 'pensjonforvalter.tp',
alderspensjon: 'pensjonforvalter.alderspensjon',
uforetrygd: 'pensjonforvalter.uforetrygd',
}
return {
inntekt: {
Expand Down Expand Up @@ -88,5 +122,13 @@ PensjonPanel.initialValues = ({ set, del, has }: any) => {
},
remove: () => del(paths.alderspensjon),
},
uforetrygd: {
label: 'Har uføretrygdvedtak',
checked: has(paths.uforetrygd),
add: () => {
set(paths.uforetrygd, initialUforetrygd)
},
remove: () => del(paths.uforetrygd),
},
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,36 @@ import Panel from '@/components/ui/panel/Panel'
import { Attributt, AttributtKategori } from '../Attributt'
import { harValgtAttributt } from '@/components/ui/form/formUtils'
import { sykdomAttributt } from '@/components/fagsystem/sykdom/form/Form'
import { useContext } from 'react'
import { BestillingsveilederContext } from '@/components/bestillingsveileder/BestillingsveilederContext'

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

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

return (
// @ts-ignore
<Panel
heading={SykdomPanel.heading}
checkAttributeArray={sm.batchAdd}
checkAttributeArray={() => sm.batchAdd(harGyldigSykemeldingBestilling ? ['sykemelding'] : [])}
uncheckAttributeArray={sm.batchRemove}
iconType="sykdom"
startOpen={harValgtAttributt(formikBag.values, [sykdomAttributt])}
>
<AttributtKategori title={null} attr={sm.attrs}>
<Attributt attr={sm.attrs.sykemelding} />
<Attributt
attr={sm.attrs.sykemelding}
disabled={harGyldigSykemeldingBestilling}
title={harGyldigSykemeldingBestilling ? 'Personen har allerede sykemelding' : null}
/>
</AttributtKategori>
</Panel>
)
Expand Down
Loading

0 comments on commit 532c385

Please sign in to comment.