Skip to content

Commit

Permalink
Oppdater tildel endepunkt til å håndere både behandling og kontroll. …
Browse files Browse the repository at this point in the history
…Legg til fane for kontroll
  • Loading branch information
ssaegrov committed Oct 25, 2024
1 parent d33865e commit 807d6aa
Show file tree
Hide file tree
Showing 9 changed files with 121 additions and 21 deletions.
9 changes: 4 additions & 5 deletions app/components/oppgave-handlinger/OppgaveHandlinger.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export type IGyldigeOppgaveHandlinger =
function hentGyldigeOppgaveValg(
oppgave: IOppgave,
toTrinnsAktiv: boolean,
kreverBeslutter: boolean,
kreverTotrinnskontroll: boolean,
): IGyldigeOppgaveHandlinger[] {
switch (oppgave.tilstand) {
case "UNDER_BEHANDLING":
Expand All @@ -35,7 +35,7 @@ function hentGyldigeOppgaveValg(
"utsett",
"send-til-arena",

...((kreverBeslutter && toTrinnsAktiv
...((kreverTotrinnskontroll && toTrinnsAktiv
? ["send-til-kontroll"]
: ["fatt-vedtak"]) as IGyldigeOppgaveHandlinger[]),
];
Expand All @@ -48,13 +48,12 @@ function hentGyldigeOppgaveValg(

export function OppgaveHandlinger() {
const { featureFlags } = useTypedRouteLoaderData("root");
const { oppgave } = useTypedRouteLoaderData("routes/oppgave.$oppgaveId");
let kreverBeslutter = oppgave.emneknagger.find((knagg) => knagg === "Totrinnskontroll");
const { oppgave, behandling } = useTypedRouteLoaderData("routes/oppgave.$oppgaveId");

const gyldigeOppgaveValg = hentGyldigeOppgaveValg(
oppgave,
featureFlags.totrinnsKontroll,
!!kreverBeslutter,
behandling.kreverTotrinnskontroll,
);

return (
Expand Down
16 changes: 14 additions & 2 deletions app/components/oppgave-informasjon/OppgaveInformasjon.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { Tabs } from "@navikt/ds-react";
import { ClockDashedIcon, DatabaseIcon, FilesIcon } from "@navikt/aksel-icons";
import { ClockDashedIcon, DatabaseIcon, FilesIcon, PuzzlePieceIcon } from "@navikt/aksel-icons";
import { DokumentOversikt } from "~/components/dokument-oversikt/DokumentOversikt";
import { OppgaveLenker } from "~/components/oppgave-lenker/OppgaveLenker";
import { OppgaveHistorikk } from "~/components/oppgave-historikk/OppgaveHistorikk";
import { useTypedRouteLoaderData } from "~/hooks/useTypedRouteLoaderData";
import { OppgaveKontroll } from "~/components/oppgave-kontroll/OppgaveKontroll";

export function OppgaveInformasjon() {
interface IProps {
visKontrollFane?: boolean;
}

export function OppgaveInformasjon(props: IProps) {
const { featureFlags } = useTypedRouteLoaderData("root");
return (
<Tabs defaultValue="dokumenter" size="medium">
Expand All @@ -23,6 +28,9 @@ export function OppgaveInformasjon() {
icon={<ClockDashedIcon title="Historikk" />}
/>
)}
{featureFlags.totrinnsKontroll && props.visKontrollFane && (
<Tabs.Tab value="kontroll" label="Kontroll" icon={<PuzzlePieceIcon title="Kontroll" />} />
)}
</Tabs.List>

<Tabs.Panel value="dokumenter">
Expand All @@ -36,6 +44,10 @@ export function OppgaveInformasjon() {
<Tabs.Panel value="historikk">
<OppgaveHistorikk />
</Tabs.Panel>

<Tabs.Panel value="kontroll">
<OppgaveKontroll />
</Tabs.Panel>
</Tabs>
);
}
7 changes: 7 additions & 0 deletions app/components/oppgave-kontroll/OppgaveKontroll.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.container {
padding: var(--a-spacing-4);
}

.sjekkliste {
margin-top: var(--a-spacing-4);
}
74 changes: 74 additions & 0 deletions app/components/oppgave-kontroll/OppgaveKontroll.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { Fragment } from "react";
import { Detail, Heading, List, Textarea } from "@navikt/ds-react";
import styles from "./oppgaveKontroll.module.css";

export function OppgaveKontroll() {
return (
<div className={styles.container}>
<Textarea
label={
<>
<Heading size="small">
Notat - hvorfor returneres oppgaven tilbake fra kontroll?
</Heading>
<Detail textColor="subtle">Notat vil være synlig for bruker ved innsyn. </Detail>
</>
}
/>

<List className={styles.sjekkliste} as="ol" title="Sjekkliste" size="small">
{sjekkliste.map((punkt) => (
<Fragment key={punkt.navn}>
<List.Item>{punkt.navn}</List.Item>
{punkt.underpunkter && (
<List size="small">
{punkt.underpunkter.map((underpunkt) => (
<List.Item key={underpunkt}>{underpunkt}</List.Item>
))}
</List>
)}
</Fragment>
))}
</List>
</div>
);
}

interface ISjekkliste {
navn: string;
underpunkter?: string[];
}

const sjekkliste: ISjekkliste[] = [
{
navn: "Se raskt gjennom søknad, relevante dokumenter og vedtak: Er det noe spesielt ved saken/ røde flagg/ grensesnitt (konkurs, sammenlegging og grensearbeidere etc)?",
},
{
navn: "Skal det være gjenopptak/ny rettighet?",
},
{
navn: "Er det riktig antall barnetillegg?",
},
{
navn: "Er virkningstidspunkt satt riktig, og begrunnelse i vedtak stemmer med Arena? (Se om dato og tekst er lik i Arena og melding om vedtak.)",
},
{
navn: "FVA",
underpunkter: [
"Riktig beregningsregel? (Ikke dobbeltkontroll av selve beregningen)",
"Stemmer begrunnelsen i vedtak med Arena?",
],
},
{
navn: "Sanksjon",
underpunkter: ["Er det riktig å gi sanksjon?", "Er sanksjonen begrunnet?"],
},
{
navn: "Ved permitteringssaker",
underpunkter: [
"Er telleverk justert for permittering siste 18 måneder? (ikke dobbeltkontroll av antall uker justert)",
"Var det riktig å godkjenne eller avslå permitteringsårsak (hvis saksbehandler også har gjort førstegangsvurdering av permitteringsårsak)?",
"Ved avslag: Er alt vurdert korrekt og tilstrekkelig dokumentert?",
],
},
];
1 change: 1 addition & 0 deletions app/models/behandling.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { handleErrorResponse } from "~/utils/error-response.server";
export interface IBehandling {
behandlingId: string;
tilstand: string;
kreverTotrinnskontroll: boolean;
opplysning: IOpplysning[];
}

Expand Down
27 changes: 17 additions & 10 deletions app/routes/action-tildel-oppgave.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { ActionFunctionArgs } from "@remix-run/node";
import { json, redirect } from "@remix-run/node";
import type { IOppgave } from "~/models/oppgave.server";
import { tildelOppgave } from "~/models/oppgave.server";
import { logger } from "~/utils/logger.utils";
import { handleTildelOppgaveMessages } from "~/utils/alert-message.utils";
Expand All @@ -15,19 +16,25 @@ export async function action({ request }: ActionFunctionArgs) {

const response = await tildelOppgave(request, oppgaveId);

if (response.ok) {
return redirect(`/oppgave/${oppgaveId}/behandle`);
}
if (!response.ok) {
logger.warn(`${response.status} - Feil ved kall til ${response.url}`);

logger.warn(`${response.status} - Feil ved kall til ${response.url}`);
const httpProblem: IHttpProblem = await response.json();
if (httpProblem.status === 403) {
const ikkeTilgangVariant = httpProblem.type.split(":")[3];
const alert = handleTildelOppgaveMessages(httpProblem.status, ikkeTilgangVariant);
return json(alert);
}

const httpProblem: IHttpProblem = await response.json();
if (httpProblem.status === 403) {
const ikkeTilgangVariant = httpProblem.type.split(":")[3];
const alert = handleTildelOppgaveMessages(httpProblem.status, ikkeTilgangVariant);
const alert = handleTildelOppgaveMessages(httpProblem.status);
return json(alert);
}

const alert = handleTildelOppgaveMessages(httpProblem.status);
return json(alert);
const nyOppgaveTilstand = (await response.json()) as IOppgave["tilstand"];
if (nyOppgaveTilstand === "UNDER_BEHANDLING") return redirect(`/oppgave/${oppgaveId}/behandle`);
if (nyOppgaveTilstand === "UNDER_KONTROLL") return redirect(`/oppgave/${oppgaveId}/kontroll`);

throw new Error(
`Oppgave med id ${oppgaveId} har uventet tilstand. Forventet tilstand er UNDER_BEHANDLING eller UNDER_KONTROLL, fikk ${nyOppgaveTilstand}`,
);
}
5 changes: 2 additions & 3 deletions app/routes/oppgave.$oppgaveId.kontroll.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Alert, Tabs } from "@navikt/ds-react";
import { Tabs } from "@navikt/ds-react";
import { DocPencilIcon, TasklistSendIcon } from "@navikt/aksel-icons";
import { MeldingOmVedtakProvider } from "~/context/melding-om-vedtak-context";
import { useTypedRouteLoaderData } from "~/hooks/useTypedRouteLoaderData";
Expand All @@ -15,7 +15,6 @@ export default function Oppgave() {

return (
<MeldingOmVedtakProvider utvidedeBeskrivelser={meldingOmVedtak.utvidedeBeskrivelser}>
<Alert variant="warning">Kontroll</Alert>
<div className={styles.behandling}>
<div className={"card"}>
<Tabs size="medium" defaultValue="behandling">
Expand Down Expand Up @@ -51,7 +50,7 @@ export default function Oppgave() {
</div>

<div className={"card"}>
<OppgaveInformasjon />
<OppgaveInformasjon visKontrollFane={true} />
</div>

<Outlet />
Expand Down
1 change: 1 addition & 0 deletions mocks/data/mock-behandling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { IBehandling } from "~/models/behandling.server";
export const mockBehandling: IBehandling = {
behandlingId: "018f05a0-667a-7597-a835-fab53189d051",
tilstand: "ForslagTilVedtak",
kreverTotrinnskontroll: true,
opplysning: [
{
id: "0191ea5d-57ec-7f2e-a2c9-e9f0caf7a6a2",
Expand Down
2 changes: 1 addition & 1 deletion mocks/mock-dp-saksbehandling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export const mockDpSaksbehandling = [
const mockOppgave = mockOppgaver.find((oppgave) => oppgave.oppgaveId === oppgaveId);

if (mockOppgave) {
return new HttpResponse(null, { status: 204 });
return HttpResponse.json(mockOppgave.tilstand);
}

return new HttpResponse("Oppgaven er allerede tatt til behandling", {
Expand Down

0 comments on commit 807d6aa

Please sign in to comment.