diff --git a/services/app-api/forms/defaultMeasures.ts b/services/app-api/forms/defaultMeasures.ts index e76110cb..6f281d6a 100644 --- a/services/app-api/forms/defaultMeasures.ts +++ b/services/app-api/forms/defaultMeasures.ts @@ -16,7 +16,7 @@ export const defaultMeasures: MeasureOptions[] = [ stratified: false, measureTemplate: [ MeasureTemplateName["LTSS-1"], - MeasureTemplateName["FFS960"], + MeasureTemplateName["FFS-1"], MeasureTemplateName["MLTSS"], ], }, @@ -104,13 +104,12 @@ export const defaultMeasureTemplates = { id: "LTSS-1", title: "LTSS-1: Comprehensive Assessment and Update", type: PageType.Measure, - substitutable: true, + substitutable: MeasureTemplateName["FASI-1"], sidebar: false, elements: [ { type: ElementType.ButtonLink, label: "Return to Required Measures Dashboard", - to: "req-measure-result", }, { type: ElementType.Header, @@ -202,22 +201,31 @@ export const defaultMeasureTemplates = { }, ], }, - [MeasureTemplateName["FFS960"]]: { - id: "FFS", + [MeasureTemplateName["FFS-1"]]: { + id: "FFS-1", title: "LTSS-1: FFS LTSS Measure Results", type: PageType.MeasureResults, - substitutable: true, sidebar: false, elements: [ { type: ElementType.ButtonLink, label: "Return to Required Measures Dashboard", - to: "LTSS-1960", + to: "LTSS-1", }, { type: ElementType.Header, text: "Fee-For-Service Measure Results", }, + { + type: ElementType.Accordion, + label: "Instructions", + value: + "[Optional instructional content that could support the user in completing this page]", + }, + { + type: ElementType.SubHeader, + text: "FSS LTSS Measure Details", + }, { type: ElementType.TextAreaField, label: "Which Medicaid HCBS programs are being reported? (optional)", @@ -236,12 +244,11 @@ export const defaultMeasureTemplates = { title: "LTSS-2: Comprehensive Person-Centered Plan and Update", type: PageType.Measure, sidebar: false, - substitutable: true, + substitutable: MeasureTemplateName["FASI-2"], elements: [ { type: ElementType.ButtonLink, label: "Return to Required Measures Dashboard", - to: "req-measure-result", }, { type: ElementType.Header, @@ -621,13 +628,13 @@ export const defaultMeasureTemplates = { [MeasureTemplateName["FASI-1"]]: { id: "FASI-1", title: "FASI-1: Identification of Person-Centered Priorities", + substitutable: MeasureTemplateName["LTSS-1"], type: PageType.Measure, sidebar: false, elements: [ { type: ElementType.ButtonLink, label: "Return to Optional Measures Dashboard", - to: "optional-measure-result", }, { type: ElementType.Header, @@ -708,12 +715,12 @@ export const defaultMeasureTemplates = { id: "FASI-2", title: "FASI-2: Documentation of a Person-Centered Service Plan", type: PageType.Measure, + substitutable: MeasureTemplateName["LTSS-2"], sidebar: false, elements: [ { type: ElementType.ButtonLink, label: "Return to Optional Measures Dashboard", - to: "optional-measure-result", }, { type: ElementType.Header, @@ -1126,7 +1133,7 @@ export const defaultMeasureTemplates = { [MeasureTemplateName["MLTSS"]]: { id: "MLTSS", title: "MLTSS: Plan All-Cause Readmission", - type: PageType.Measure, + type: PageType.MeasureResults, sidebar: false, elements: [ { diff --git a/services/app-api/handlers/reports/buildReport.ts b/services/app-api/handlers/reports/buildReport.ts index 81c71234..de750b79 100644 --- a/services/app-api/handlers/reports/buildReport.ts +++ b/services/app-api/handlers/reports/buildReport.ts @@ -61,7 +61,6 @@ export const buildReport = async ( return pages.map((page) => { // TODO: make reusable. This will be used on the optional page when adding a measure. page.cmit = measure.cmit; - page.id += measure.cmit; // TODO this will need some logic if a measure is substituted page.stratified = measure.stratified; page.required = measure.required; page.elements = [ diff --git a/services/app-api/types/reports.ts b/services/app-api/types/reports.ts index 9244d9cc..0a80e638 100644 --- a/services/app-api/types/reports.ts +++ b/services/app-api/types/reports.ts @@ -46,7 +46,7 @@ export interface MeasureOptions { export enum MeasureTemplateName { // required measures "LTSS-1" = "LTSS-1", - "FFS960" = "FFS960", + "FFS-1" = "FFS-1", "LTSS-2" = "LTSS-2", "LTSS-6" = "LTSS-6", "LTSS-7" = "LTSS-7", @@ -90,7 +90,7 @@ export interface MeasurePageTemplate extends FormPageTemplate { required?: boolean; stratified?: boolean; optional?: boolean; - substitutable?: boolean; + substitutable?: string; } export interface SectionTemplate { @@ -278,7 +278,7 @@ export type RadioTemplate = { export type ButtonLinkTemplate = { type: ElementType.ButtonLink; label: string; - to: PageId; + to?: PageId; }; export type MeasureFooterTemplate = { diff --git a/services/app-api/utils/reportValidation.ts b/services/app-api/utils/reportValidation.ts index c4fc12eb..0e4dff9c 100644 --- a/services/app-api/utils/reportValidation.ts +++ b/services/app-api/utils/reportValidation.ts @@ -128,7 +128,7 @@ const radioTemplateSchema = object().shape({ const buttonLinkTemplateSchema = object().shape({ type: string().required(ElementType.ButtonLink), label: string().required(), - to: string().required(), + to: string().optional(), }); const measureTableTemplateSchema = object().shape({ @@ -178,7 +178,7 @@ const measurePageTemplateSchema = formPageTemplateSchema.shape({ required: boolean().notRequired(), stratified: boolean().notRequired(), optional: boolean().notRequired(), - substitutable: boolean().notRequired(), + substitutable: string().notRequired(), }); const measureOptionsArraySchema = array().of( diff --git a/services/app-api/utils/tests/mockReport.ts b/services/app-api/utils/tests/mockReport.ts index 1ec08d18..d1d07d10 100644 --- a/services/app-api/utils/tests/mockReport.ts +++ b/services/app-api/utils/tests/mockReport.ts @@ -45,7 +45,7 @@ export const invalidMeasureTemplatesReport = { id: "LTSS-1", title: "LTSS-1: Comprehensive Assessment and Update", // type: PageType.Measure, - substitutable: true, + substitutable: MeasureTemplateName["FASI-1"], sidebar: false, elements: [ { @@ -141,7 +141,7 @@ export const invalidRadioCheckedChildrenReport = { id: "LTSS-1", title: "LTSS-1: Comprehensive Assessment and Update", type: PageType.Measure, - substitutable: true, + substitutable: MeasureTemplateName["FASI-2"], sidebar: false, elements: [ { diff --git a/services/ui-src/src/components/report/Elements.tsx b/services/ui-src/src/components/report/Elements.tsx index 389d4a90..f8d6236c 100644 --- a/services/ui-src/src/components/report/Elements.tsx +++ b/services/ui-src/src/components/report/Elements.tsx @@ -14,10 +14,11 @@ import { AccordionTemplate, ButtonLinkTemplate, PageElement, + MeasurePageTemplate, } from "types"; import { AccordionItem } from "components"; import arrowLeftIcon from "assets/icons/arrows/icon_arrow_left_blue.png"; -import { parseCustomHtml } from "utils"; +import { parseCustomHtml, useStore } from "utils"; export interface PageElementProps { element: PageElement; @@ -69,11 +70,22 @@ export const accordionElement = (props: PageElementProps) => { }; export const buttonLinkElement = (props: PageElementProps) => { - const { reportType, state, reportId } = useParams(); + const { reportType, state, reportId, pageId } = useParams(); + const { report } = useStore(); + const navigate = useNavigate(); const button = props.element as ButtonLinkTemplate; + + const findPrevPage = () => { + const measure = report?.pages.find( + (measure) => measure.id === pageId + ) as MeasurePageTemplate; + return measure?.required ? "req-measure-result" : "optional-measure-result"; + }; + + const page = button.to ?? findPrevPage(); const nav = () => - navigate(`/report/${reportType}/${state}/${reportId}/${button.to}`); + navigate(`/report/${reportType}/${state}/${reportId}/${page}`); return (