heor-agent-mcp 1.11.3 → 1.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -2
- package/dist/audit/builder.d.ts +2 -1
- package/dist/audit/builder.d.ts.map +1 -1
- package/dist/audit/builder.js +4 -0
- package/dist/audit/builder.js.map +1 -1
- package/dist/audit/types.d.ts +7 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/formatters/disclosure.d.ts +16 -0
- package/dist/formatters/disclosure.d.ts.map +1 -0
- package/dist/formatters/disclosure.js +68 -0
- package/dist/formatters/disclosure.js.map +1 -0
- package/dist/formatters/governanceMarkdown.d.ts +11 -0
- package/dist/formatters/governanceMarkdown.d.ts.map +1 -0
- package/dist/formatters/governanceMarkdown.js +26 -0
- package/dist/formatters/governanceMarkdown.js.map +1 -0
- package/dist/formatters/markdown.d.ts +7 -2
- package/dist/formatters/markdown.d.ts.map +1 -1
- package/dist/formatters/markdown.js +10 -3
- package/dist/formatters/markdown.js.map +1 -1
- package/dist/governance/crosswalk.d.ts +19 -0
- package/dist/governance/crosswalk.d.ts.map +1 -0
- package/dist/governance/crosswalk.js +78 -0
- package/dist/governance/crosswalk.js.map +1 -0
- package/dist/governance/scoring.d.ts +24 -0
- package/dist/governance/scoring.d.ts.map +1 -0
- package/dist/governance/scoring.js +68 -0
- package/dist/governance/scoring.js.map +1 -0
- package/dist/models/modelUtils.d.ts +18 -0
- package/dist/models/modelUtils.d.ts.map +1 -1
- package/dist/models/modelUtils.js +34 -0
- package/dist/models/modelUtils.js.map +1 -1
- package/dist/providers/direct/biorxiv.d.ts +1 -0
- package/dist/providers/direct/biorxiv.d.ts.map +1 -1
- package/dist/providers/direct/biorxiv.js +43 -27
- package/dist/providers/direct/biorxiv.js.map +1 -1
- package/dist/providers/direct/cmsNadac.d.ts.map +1 -1
- package/dist/providers/direct/cmsNadac.js +25 -16
- package/dist/providers/direct/cmsNadac.js.map +1 -1
- package/dist/providers/direct/embase.d.ts +18 -1
- package/dist/providers/direct/embase.d.ts.map +1 -1
- package/dist/providers/direct/embase.js +82 -36
- package/dist/providers/direct/embase.js.map +1 -1
- package/dist/providers/direct/googleScholar.d.ts.map +1 -1
- package/dist/providers/direct/googleScholar.js +40 -34
- package/dist/providers/direct/googleScholar.js.map +1 -1
- package/dist/providers/direct/index.d.ts.map +1 -1
- package/dist/providers/direct/index.js +12 -13
- package/dist/providers/direct/index.js.map +1 -1
- package/dist/providers/direct/pubmed.d.ts.map +1 -1
- package/dist/providers/direct/pubmed.js +42 -43
- package/dist/providers/direct/pubmed.js.map +1 -1
- package/dist/providers/direct/purpleBook.d.ts.map +1 -1
- package/dist/providers/direct/purpleBook.js +36 -37
- package/dist/providers/direct/purpleBook.js.map +1 -1
- package/dist/providers/direct/scienceDirect.d.ts.map +1 -1
- package/dist/providers/direct/scienceDirect.js +38 -36
- package/dist/providers/direct/scienceDirect.js.map +1 -1
- package/dist/providers/direct/whoGho.d.ts.map +1 -1
- package/dist/providers/direct/whoGho.js +29 -27
- package/dist/providers/direct/whoGho.js.map +1 -1
- package/dist/providers/types.d.ts +1 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/server.js +127 -20
- package/dist/server.js.map +1 -1
- package/dist/tools/budgetImpactModel.d.ts +5 -0
- package/dist/tools/budgetImpactModel.d.ts.map +1 -1
- package/dist/tools/budgetImpactModel.js +11 -2
- package/dist/tools/budgetImpactModel.js.map +1 -1
- package/dist/tools/claimsQuery.d.ts +105 -0
- package/dist/tools/claimsQuery.d.ts.map +1 -0
- package/dist/tools/claimsQuery.js +842 -0
- package/dist/tools/claimsQuery.js.map +1 -0
- package/dist/tools/costEffectivenessModel.d.ts +5 -0
- package/dist/tools/costEffectivenessModel.d.ts.map +1 -1
- package/dist/tools/costEffectivenessModel.js +65 -5
- package/dist/tools/costEffectivenessModel.js.map +1 -1
- package/dist/tools/governanceSelfCheck.d.ts +322 -0
- package/dist/tools/governanceSelfCheck.d.ts.map +1 -0
- package/dist/tools/governanceSelfCheck.js +226 -0
- package/dist/tools/governanceSelfCheck.js.map +1 -0
- package/dist/tools/htaDossierPrep.d.ts +5 -0
- package/dist/tools/htaDossierPrep.d.ts.map +1 -1
- package/dist/tools/htaDossierPrep.js +14 -4
- package/dist/tools/htaDossierPrep.js.map +1 -1
- package/dist/tools/htaWorkflow.d.ts +5 -0
- package/dist/tools/htaWorkflow.d.ts.map +1 -1
- package/dist/tools/htaWorkflow.js +9 -1
- package/dist/tools/htaWorkflow.js.map +1 -1
- package/dist/tools/icfReadabilityCheck.d.ts +5 -0
- package/dist/tools/icfReadabilityCheck.d.ts.map +1 -1
- package/dist/tools/icfReadabilityCheck.js +7 -1
- package/dist/tools/icfReadabilityCheck.js.map +1 -1
- package/dist/tools/irbReview.d.ts +5 -0
- package/dist/tools/irbReview.d.ts.map +1 -1
- package/dist/tools/irbReview.js +7 -1
- package/dist/tools/irbReview.js.map +1 -1
- package/dist/tools/itcFeasibility.d.ts +5 -0
- package/dist/tools/itcFeasibility.d.ts.map +1 -1
- package/dist/tools/itcFeasibility.js +7 -1
- package/dist/tools/itcFeasibility.js.map +1 -1
- package/dist/tools/jcaPicoScope.d.ts +5 -0
- package/dist/tools/jcaPicoScope.d.ts.map +1 -1
- package/dist/tools/jcaPicoScope.js +8 -2
- package/dist/tools/jcaPicoScope.js.map +1 -1
- package/dist/tools/literatureSearch.d.ts.map +1 -1
- package/dist/tools/literatureSearch.js +8 -2
- package/dist/tools/literatureSearch.js.map +1 -1
- package/dist/tools/maicWorkflow.d.ts +7 -2
- package/dist/tools/maicWorkflow.d.ts.map +1 -1
- package/dist/tools/maicWorkflow.js +28 -28
- package/dist/tools/maicWorkflow.js.map +1 -1
- package/dist/tools/populationAdjustedComparison.d.ts +5 -0
- package/dist/tools/populationAdjustedComparison.d.ts.map +1 -1
- package/dist/tools/populationAdjustedComparison.js +7 -1
- package/dist/tools/populationAdjustedComparison.js.map +1 -1
- package/dist/tools/pvClassify.d.ts +5 -0
- package/dist/tools/pvClassify.d.ts.map +1 -1
- package/dist/tools/pvClassify.js +7 -1
- package/dist/tools/pvClassify.js.map +1 -1
- package/dist/tools/pvSignalWorkflow.d.ts +5 -0
- package/dist/tools/pvSignalWorkflow.d.ts.map +1 -1
- package/dist/tools/pvSignalWorkflow.js +7 -1
- package/dist/tools/pvSignalWorkflow.js.map +1 -1
- package/dist/tools/queryAgent.d.ts +88 -0
- package/dist/tools/queryAgent.d.ts.map +1 -0
- package/dist/tools/queryAgent.js +530 -0
- package/dist/tools/queryAgent.js.map +1 -0
- package/dist/tools/riskOfBias.d.ts +5 -0
- package/dist/tools/riskOfBias.d.ts.map +1 -1
- package/dist/tools/riskOfBias.js +7 -1
- package/dist/tools/riskOfBias.js.map +1 -1
- package/dist/tools/screenAbstracts.d.ts +5 -0
- package/dist/tools/screenAbstracts.d.ts.map +1 -1
- package/dist/tools/screenAbstracts.js +7 -1
- package/dist/tools/screenAbstracts.js.map +1 -1
- package/dist/tools/survivalFitting.d.ts +5 -0
- package/dist/tools/survivalFitting.d.ts.map +1 -1
- package/dist/tools/survivalFitting.js +14 -4
- package/dist/tools/survivalFitting.js.map +1 -1
- package/dist/tools/utilityValueSet.d.ts +5 -0
- package/dist/tools/utilityValueSet.d.ts.map +1 -1
- package/dist/tools/utilityValueSet.js +7 -1
- package/dist/tools/utilityValueSet.js.map +1 -1
- package/dist/tools/validateLinks.d.ts.map +1 -1
- package/dist/tools/validateLinks.js +57 -10
- package/dist/tools/validateLinks.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -126,7 +126,23 @@ The first prompt exercises `literature_search` + `validate_links` (free, no API
|
|
|
126
126
|
|
|
127
127
|
## What's new
|
|
128
128
|
|
|
129
|
-
See [CHANGELOG.md](./CHANGELOG.md) for full version history. Current: **v1.
|
|
129
|
+
See [CHANGELOG.md](./CHANGELOG.md) for full version history. Current: **v1.13.0** (28 tools, 44 data sources).
|
|
130
|
+
|
|
131
|
+
### v1.13.0 — AI Transparency Disclosure (ISPOR ELEVATE-GenAI aligned)
|
|
132
|
+
|
|
133
|
+
16 tools now accept an `ai_disclosure_level` parameter:
|
|
134
|
+
|
|
135
|
+
| Value | Behaviour |
|
|
136
|
+
|-------|-----------|
|
|
137
|
+
| `"off"` | No disclosure block appended |
|
|
138
|
+
| `"standard"` | Model ID · tools called · data sources · date · human-review reminder |
|
|
139
|
+
| `"submission"` | Standard block + ISPOR ELEVATE-GenAI full citation |
|
|
140
|
+
|
|
141
|
+
**Default by tool tier**: HTA/regulatory tools (`hta_dossier`, `hta_workflow`, `jca_pico_scope`, `pv_classify`, etc.) default to `"submission"`; analysis tools (`risk_of_bias`, `cost_effectiveness_model`, etc.) default to `"standard"`. Pass `ai_disclosure_level: "off"` to suppress.
|
|
142
|
+
|
|
143
|
+
**Environment-level default**: set `HEORAGENT_DISCLOSURE_LEVEL=off|standard|submission` to override the built-in per-tool defaults globally.
|
|
144
|
+
|
|
145
|
+
**Web UI persona defaults**: payer and HTA-reviewer personas always use `"submission"`; analyst personas default to `"standard"` and switch to `"off"` for scratch / exploratory prompts.
|
|
130
146
|
|
|
131
147
|
### v1.0.4 highlights (still in v1.6.3)
|
|
132
148
|
|
|
@@ -145,7 +161,7 @@ See [CHANGELOG.md](./CHANGELOG.md) for the full diff.
|
|
|
145
161
|
|
|
146
162
|
---
|
|
147
163
|
|
|
148
|
-
## Tools (
|
|
164
|
+
## Tools (28)
|
|
149
165
|
|
|
150
166
|
| Tool | Purpose |
|
|
151
167
|
|------|---------|
|
package/dist/audit/builder.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { AuditRecord, SourceAudit, ExclusionRecord } from "./types.js";
|
|
1
|
+
import type { AuditRecord, SourceAudit, ExclusionRecord, ToolCallTrace } from "./types.js";
|
|
2
2
|
export declare function createAuditRecord(tool: string, query: Record<string, unknown>, output_format: string, methodology?: string): AuditRecord;
|
|
3
|
+
export declare function addToolCall(record: AuditRecord, trace: ToolCallTrace): AuditRecord;
|
|
3
4
|
export declare function addSource(record: AuditRecord, source: SourceAudit): AuditRecord;
|
|
4
5
|
export declare function addExclusion(record: AuditRecord, exclusion: ExclusionRecord): AuditRecord;
|
|
5
6
|
export declare function addAssumption(record: AuditRecord, assumption: string): AuditRecord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,SAAK,GACf,WAAW,CAcb;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,aAAa,GACnB,WAAW,CAEb;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,GAClB,WAAW,CAMb;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,eAAe,GACzB,WAAW,CAKb;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,WAAW,CAEb;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAE5E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,WAAW,CAEb"}
|
package/dist/audit/builder.js
CHANGED
|
@@ -10,8 +10,12 @@ export function createAuditRecord(tool, query, output_format, methodology = "")
|
|
|
10
10
|
assumptions: [],
|
|
11
11
|
warnings: [],
|
|
12
12
|
output_format,
|
|
13
|
+
tools_called: [],
|
|
13
14
|
};
|
|
14
15
|
}
|
|
16
|
+
export function addToolCall(record, trace) {
|
|
17
|
+
return { ...record, tools_called: [...record.tools_called, trace] };
|
|
18
|
+
}
|
|
15
19
|
export function addSource(record, source) {
|
|
16
20
|
return {
|
|
17
21
|
...record,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAA8B,EAC9B,aAAqB,EACrB,WAAW,GAAG,EAAE;IAEhB,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,eAAe,EAAE,EAAE;QACnB,WAAW;QACX,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,aAAa;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAmB,EACnB,KAAoB;IAEpB,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAmB,EACnB,MAAmB;IAEnB,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;QACpD,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAmB,EACnB,SAA0B;IAE1B,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAmB,EACnB,UAAkB;IAElB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,OAAe;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,WAAmB;IAEnB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC"}
|
package/dist/audit/types.d.ts
CHANGED
|
@@ -19,6 +19,12 @@ export interface SourceSelectionRow {
|
|
|
19
19
|
used: boolean;
|
|
20
20
|
reason: string;
|
|
21
21
|
}
|
|
22
|
+
export interface ToolCallTrace {
|
|
23
|
+
name: string;
|
|
24
|
+
ms: number;
|
|
25
|
+
outcome: "ok" | "degraded" | "skipped" | "error";
|
|
26
|
+
output_size_bytes?: number;
|
|
27
|
+
}
|
|
22
28
|
export interface AuditRecord {
|
|
23
29
|
tool: string;
|
|
24
30
|
/** ISO 8601 timestamp when the tool invocation began (query start time, not completion time) */
|
|
@@ -35,5 +41,6 @@ export interface AuditRecord {
|
|
|
35
41
|
assumptions: string[];
|
|
36
42
|
warnings: string[];
|
|
37
43
|
output_format: string;
|
|
44
|
+
tools_called: ToolCallTrace[];
|
|
38
45
|
}
|
|
39
46
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,0LAA0L;IAC1L,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,0LAA0L;IAC1L,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,aAAa,EAAE,CAAC;CAC/B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AuditRecord } from "../audit/types.js";
|
|
2
|
+
export declare const ISPOR_TASK_FORCE_CITATION: string;
|
|
3
|
+
export type AiDisclosureLevel = "off" | "standard" | "submission";
|
|
4
|
+
export type DisclosureOpts = {
|
|
5
|
+
level: AiDisclosureLevel;
|
|
6
|
+
modelId?: string;
|
|
7
|
+
dateISO?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function extractDisclosureLevel(args: unknown, defaultLevel: AiDisclosureLevel): AiDisclosureLevel;
|
|
10
|
+
export declare const AI_DISCLOSURE_LEVEL_SCHEMA_PROPERTY: {
|
|
11
|
+
readonly type: "string";
|
|
12
|
+
readonly enum: readonly ["off", "standard", "submission"];
|
|
13
|
+
readonly description: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function buildDisclosure(audit: AuditRecord, opts: DisclosureOpts): string;
|
|
16
|
+
//# sourceMappingURL=disclosure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disclosure.d.ts","sourceRoot":"","sources":["../../src/formatters/disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,yBAAyB,QAKiC,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAUF,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,iBAAiB,GAC9B,iBAAiB,CAKnB;AAED,eAAO,MAAM,mCAAmC;;;;CAQtC,CAAC;AAaX,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,cAAc,GACnB,MAAM,CAyCR"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export const ISPOR_TASK_FORCE_CITATION = "Fleurence RL, Dawoud D, Bian J, Higashi MK, Wang X, Xu H, Chhatwal J, Ayer T; " +
|
|
2
|
+
"ISPOR Working Group on Generative AI. " +
|
|
3
|
+
"ELEVATE-GenAI: Reporting Guidelines for the Use of Large Language Models in " +
|
|
4
|
+
"Health Economics and Outcomes Research: An ISPOR Working Group Report. " +
|
|
5
|
+
"Value Health. 2025;28(11):1611–1625. doi:10.1016/j.jval.2025.06.018";
|
|
6
|
+
const DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
7
|
+
const VALID_LEVELS = new Set([
|
|
8
|
+
"off",
|
|
9
|
+
"standard",
|
|
10
|
+
"submission",
|
|
11
|
+
]);
|
|
12
|
+
export function extractDisclosureLevel(args, defaultLevel) {
|
|
13
|
+
const raw = args?.ai_disclosure_level;
|
|
14
|
+
return VALID_LEVELS.has(raw)
|
|
15
|
+
? raw
|
|
16
|
+
: defaultLevel;
|
|
17
|
+
}
|
|
18
|
+
export const AI_DISCLOSURE_LEVEL_SCHEMA_PROPERTY = {
|
|
19
|
+
type: "string",
|
|
20
|
+
enum: ["off", "standard", "submission"],
|
|
21
|
+
description: "AI assistance disclosure level appended to the output. " +
|
|
22
|
+
'"off" = no disclosure (analyst scratch mode); ' +
|
|
23
|
+
'"standard" = default visible block (model, tools called, sources, date, human-review reminder); ' +
|
|
24
|
+
'"submission" = standard + ISPOR ELEVATE-GenAI citation (use for regulatory or payer submissions).',
|
|
25
|
+
};
|
|
26
|
+
function formatToolCalls(audit) {
|
|
27
|
+
if (audit.tools_called.length === 0)
|
|
28
|
+
return "this tool only";
|
|
29
|
+
return audit.tools_called
|
|
30
|
+
.map((t) => {
|
|
31
|
+
const ms = t.ms >= 1000 ? `${(t.ms / 1000).toFixed(1)} s` : `${t.ms} ms`;
|
|
32
|
+
const suffix = t.outcome !== "ok" ? ` — ${t.outcome}` : "";
|
|
33
|
+
return `${t.name} (${ms}${suffix})`;
|
|
34
|
+
})
|
|
35
|
+
.join(", ");
|
|
36
|
+
}
|
|
37
|
+
export function buildDisclosure(audit, opts) {
|
|
38
|
+
if (opts.level === "off")
|
|
39
|
+
return "";
|
|
40
|
+
const model = opts.modelId ?? DEFAULT_MODEL;
|
|
41
|
+
const date = opts.dateISO ?? new Date().toISOString().slice(0, 10);
|
|
42
|
+
const lines = [];
|
|
43
|
+
lines.push("---");
|
|
44
|
+
lines.push("### AI Assistance Disclosure (ISPOR-aligned)");
|
|
45
|
+
lines.push("");
|
|
46
|
+
lines.push("This output was generated with AI assistance and " +
|
|
47
|
+
"**requires human review before use in regulatory submission, " +
|
|
48
|
+
"payer dossier, or clinical decision-making.**");
|
|
49
|
+
lines.push("");
|
|
50
|
+
lines.push(`- **Model:** ${model} (Anthropic)`);
|
|
51
|
+
lines.push(`- **Generated:** ${date}`);
|
|
52
|
+
lines.push(`- **Tools called:** ${formatToolCalls(audit)}`);
|
|
53
|
+
if (audit.sources_queried.length > 0) {
|
|
54
|
+
const sourceParts = audit.sources_queried.map((s) => `${s.source} (n=${s.results_included} hits)`);
|
|
55
|
+
lines.push(`- **Sources queried:** ${sourceParts.join(", ")}`);
|
|
56
|
+
}
|
|
57
|
+
lines.push("");
|
|
58
|
+
lines.push("_Per ISPOR Task Force on GenAI in HEOR (2025), the user/reviewer remains responsible " +
|
|
59
|
+
"for verifying clinical claims, regulatory status, and any cost-effectiveness or " +
|
|
60
|
+
"budget-impact figures against the cited primary sources._");
|
|
61
|
+
if (opts.level === "submission") {
|
|
62
|
+
lines.push("");
|
|
63
|
+
lines.push("**Submission-grade detail:**");
|
|
64
|
+
lines.push(`- **ISPOR citation:** ${ISPOR_TASK_FORCE_CITATION}`);
|
|
65
|
+
}
|
|
66
|
+
return lines.join("\n");
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=disclosure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../../src/formatters/disclosure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Rag, Scorecard } from "../governance/scoring.js";
|
|
2
|
+
export interface RenderedDimension {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
rag: Rag;
|
|
6
|
+
elevate_refs: string[];
|
|
7
|
+
finding: string;
|
|
8
|
+
recommended_mitigation: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function renderGovernanceScorecard(dims: RenderedDimension[], scorecard: Scorecard, verdict: string): string;
|
|
11
|
+
//# sourceMappingURL=governanceMarkdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governanceMarkdown.d.ts","sourceRoot":"","sources":["../../src/formatters/governanceMarkdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG/D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AASD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,iBAAiB,EAAE,EACzB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,GACd,MAAM,CAuBR"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { UNSCORED_DOMAINS } from "../governance/crosswalk.js";
|
|
2
|
+
const RAG_ICON = {
|
|
3
|
+
green: "🟢",
|
|
4
|
+
amber: "🟡",
|
|
5
|
+
red: "🔴",
|
|
6
|
+
insufficient: "⚪",
|
|
7
|
+
};
|
|
8
|
+
export function renderGovernanceScorecard(dims, scorecard, verdict) {
|
|
9
|
+
const lines = [];
|
|
10
|
+
lines.push("## GenAI-in-HTA Governance Self-Check");
|
|
11
|
+
lines.push("");
|
|
12
|
+
lines.push(`**Verdict:** ${verdict}`);
|
|
13
|
+
lines.push("");
|
|
14
|
+
lines.push(`**Scorecard:** 🟢 ${scorecard.green} · 🟡 ${scorecard.amber} · 🔴 ${scorecard.red} · ⚪ ${scorecard.insufficient} (insufficient)`);
|
|
15
|
+
lines.push("");
|
|
16
|
+
lines.push("| Dimension | Score | ELEVATE domain(s) | Finding | Recommended mitigation |");
|
|
17
|
+
lines.push("|---|---|---|---|---|");
|
|
18
|
+
for (const d of dims) {
|
|
19
|
+
const mit = d.recommended_mitigation || "—";
|
|
20
|
+
lines.push(`| ${d.label} | ${RAG_ICON[d.rag]} ${d.rag} | ${d.elevate_refs.join("; ")} | ${d.finding} | ${mit} |`);
|
|
21
|
+
}
|
|
22
|
+
lines.push("");
|
|
23
|
+
lines.push(`_Scope: this tool scores 6 governance dimensions. ELEVATE-GenAI also defines model-evaluation domains not scored here (${UNSCORED_DOMAINS.join(", ")}). "Insufficient" means no evidence was supplied — it is never a pass._`);
|
|
24
|
+
return lines.join("\n");
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=governanceMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governanceMarkdown.js","sourceRoot":"","sources":["../../src/formatters/governanceMarkdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAW9D,MAAM,QAAQ,GAAwB;IACpC,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,YAAY,EAAE,GAAG;CAClB,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,IAAyB,EACzB,SAAoB,EACpB,OAAe;IAEf,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,qBAAqB,SAAS,CAAC,KAAK,SAAS,SAAS,CAAC,KAAK,SAAS,SAAS,CAAC,GAAG,QAAQ,SAAS,CAAC,YAAY,iBAAiB,CAClI,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC3F,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,CAAC,sBAAsB,IAAI,GAAG,CAAC;QAC5C,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,GAAG,IAAI,CACtG,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,0HAA0H,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAC/N,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { LiteratureResult } from "../providers/types.js";
|
|
2
2
|
import type { AuditRecord } from "../audit/types.js";
|
|
3
|
-
|
|
4
|
-
export declare function
|
|
3
|
+
import { type DisclosureOpts } from "./disclosure.js";
|
|
4
|
+
export declare function resultsToMarkdown(results: LiteratureResult[], audit: AuditRecord, opts?: {
|
|
5
|
+
disclosure?: DisclosureOpts;
|
|
6
|
+
}): string;
|
|
7
|
+
export declare function auditToMarkdown(audit: AuditRecord, opts?: {
|
|
8
|
+
disclosure?: DisclosureOpts;
|
|
9
|
+
}): string;
|
|
5
10
|
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,cAAc,CAAA;CAAE,GACrC,MAAM,CA4BR;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,cAAc,CAAA;CAAE,GACrC,MAAM,CAKR"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { buildDisclosure } from "./disclosure.js";
|
|
2
|
+
export function resultsToMarkdown(results, audit, opts) {
|
|
2
3
|
const lines = [];
|
|
3
4
|
lines.push(`## Literature Search Results`);
|
|
4
5
|
lines.push(`*${results.length} studies included across ${audit.sources_queried.length} sources*\n`);
|
|
@@ -16,10 +17,16 @@ export function resultsToMarkdown(results, audit) {
|
|
|
16
17
|
lines.push(`**URL:** ${r.url}\n`);
|
|
17
18
|
});
|
|
18
19
|
}
|
|
19
|
-
lines.push(auditToMarkdown(audit));
|
|
20
|
+
lines.push(auditToMarkdown(audit, opts));
|
|
20
21
|
return lines.join("\n");
|
|
21
22
|
}
|
|
22
|
-
export function auditToMarkdown(audit) {
|
|
23
|
+
export function auditToMarkdown(audit, opts) {
|
|
24
|
+
const disclosure = opts?.disclosure
|
|
25
|
+
? buildDisclosure(audit, opts.disclosure)
|
|
26
|
+
: "";
|
|
27
|
+
return (disclosure ? disclosure + "\n\n" : "") + renderAuditBody(audit);
|
|
28
|
+
}
|
|
29
|
+
function renderAuditBody(audit) {
|
|
23
30
|
const lines = [];
|
|
24
31
|
lines.push(`---`);
|
|
25
32
|
lines.push(`## Audit Report`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAuB,MAAM,iBAAiB,CAAC;AAEvE,MAAM,UAAU,iBAAiB,CAC/B,OAA2B,EAC3B,KAAkB,EAClB,IAAsC;IAEtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CACR,IAAI,OAAO,CAAC,MAAM,4BAA4B,KAAK,CAAC,eAAe,CAAC,MAAM,aAAa,CACxF,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACvC,KAAK,CAAC,IAAI,CACR,eAAe,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAC5E,CAAC;YACF,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,CAAC,QAAQ;gBACZ,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACvE,CAAC;YACJ,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAkB,EAClB,IAAsC;IAEtC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU;QACjC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;QACzC,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CACR,aAAa,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,SAAS,uBAAuB,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,CAC1G,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAEtD,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,IAAI,CACR,2BAA2B,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,gBAAgB,CAChI,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpD,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACnC,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,IAAI,CACzE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAChE,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,UAAU,QAAQ,CAAC,CAAC,gBAAgB,MAAM,CAAC,CAAC,gBAAgB,MAAM,CAAC,CAAC,MAAM,IAAI,CACtG,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5D,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** The ten ELEVATE-GenAI reporting domains, verbatim from arXiv 2501.12394 Table 1. */
|
|
2
|
+
export declare const ELEVATE_VERIFIED_DOMAINS: readonly ["Model Characteristics", "Accuracy Assessment", "Comprehensiveness Assessment", "Factuality Verification", "Reproducibility Protocols and Generalizability", "Robustness Checks", "Fairness and Bias", "Deployment Context and Efficiency Metrics", "Calibration and Uncertainty", "Security and Privacy"];
|
|
3
|
+
/** Model-evaluation domains this governance tool deliberately does NOT score. */
|
|
4
|
+
export declare const UNSCORED_DOMAINS: readonly ["Robustness Checks", "Deployment Context and Efficiency Metrics", "Calibration and Uncertainty"];
|
|
5
|
+
export type DimensionKey = "transparency" | "citation_validation" | "human_oversight" | "phi_data_handling" | "bias_equity" | "auditability";
|
|
6
|
+
export interface CrosswalkEntry {
|
|
7
|
+
key: DimensionKey;
|
|
8
|
+
label: string;
|
|
9
|
+
elevate_refs: string[];
|
|
10
|
+
/** Set only when the dimension is not a 1:1 ELEVATE domain. */
|
|
11
|
+
derivation_note?: string;
|
|
12
|
+
/** "Is the safeguard in place?" phrasing used to collect the probe. */
|
|
13
|
+
probe_question: string;
|
|
14
|
+
/** Standard fix shown as recommended_mitigation when rag !== green. */
|
|
15
|
+
remediation: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const DIMENSION_ORDER: DimensionKey[];
|
|
18
|
+
export declare const CROSSWALK: Record<DimensionKey, CrosswalkEntry>;
|
|
19
|
+
//# sourceMappingURL=crosswalk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crosswalk.d.ts","sourceRoot":"","sources":["../../src/governance/crosswalk.ts"],"names":[],"mappings":"AAEA,uFAAuF;AACvF,eAAO,MAAM,wBAAwB,sTAW3B,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,4GAInB,CAAC;AAEX,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,qBAAqB,GACrB,iBAAiB,GACjB,mBAAmB,GACnB,aAAa,GACb,cAAc,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,EAOzC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CA6D1D,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// heor-agent-mcp/src/governance/crosswalk.ts
|
|
2
|
+
/** The ten ELEVATE-GenAI reporting domains, verbatim from arXiv 2501.12394 Table 1. */
|
|
3
|
+
export const ELEVATE_VERIFIED_DOMAINS = [
|
|
4
|
+
"Model Characteristics",
|
|
5
|
+
"Accuracy Assessment",
|
|
6
|
+
"Comprehensiveness Assessment",
|
|
7
|
+
"Factuality Verification",
|
|
8
|
+
"Reproducibility Protocols and Generalizability",
|
|
9
|
+
"Robustness Checks",
|
|
10
|
+
"Fairness and Bias",
|
|
11
|
+
"Deployment Context and Efficiency Metrics",
|
|
12
|
+
"Calibration and Uncertainty",
|
|
13
|
+
"Security and Privacy",
|
|
14
|
+
];
|
|
15
|
+
/** Model-evaluation domains this governance tool deliberately does NOT score. */
|
|
16
|
+
export const UNSCORED_DOMAINS = [
|
|
17
|
+
"Robustness Checks",
|
|
18
|
+
"Deployment Context and Efficiency Metrics",
|
|
19
|
+
"Calibration and Uncertainty",
|
|
20
|
+
];
|
|
21
|
+
export const DIMENSION_ORDER = [
|
|
22
|
+
"transparency",
|
|
23
|
+
"citation_validation",
|
|
24
|
+
"human_oversight",
|
|
25
|
+
"phi_data_handling",
|
|
26
|
+
"bias_equity",
|
|
27
|
+
"auditability",
|
|
28
|
+
];
|
|
29
|
+
export const CROSSWALK = {
|
|
30
|
+
transparency: {
|
|
31
|
+
key: "transparency",
|
|
32
|
+
label: "Transparency & disclosure",
|
|
33
|
+
elevate_refs: ["Model Characteristics"],
|
|
34
|
+
probe_question: "Is AI assistance disclosed in the output — model used, prompts/sources, and a human-review note?",
|
|
35
|
+
remediation: "Append an ISPOR ELEVATE-GenAI disclosure block (model, sources, human-review note) to every AI-assisted output.",
|
|
36
|
+
},
|
|
37
|
+
citation_validation: {
|
|
38
|
+
key: "citation_validation",
|
|
39
|
+
label: "Citation validation",
|
|
40
|
+
elevate_refs: [
|
|
41
|
+
"Factuality Verification",
|
|
42
|
+
"Accuracy Assessment",
|
|
43
|
+
"Comprehensiveness Assessment",
|
|
44
|
+
],
|
|
45
|
+
probe_question: "Are AI-produced claims and citations verified against primary sources (e.g. automated link/source validation)?",
|
|
46
|
+
remediation: "Validate every AI-produced citation/URL against the primary source before use; flag and remove hallucinated references.",
|
|
47
|
+
},
|
|
48
|
+
human_oversight: {
|
|
49
|
+
key: "human_oversight",
|
|
50
|
+
label: "Human-in-the-loop oversight",
|
|
51
|
+
elevate_refs: ["Factuality Verification", "Accuracy Assessment"],
|
|
52
|
+
derivation_note: "Derived from ELEVATE Factuality Verification / Accuracy Assessment plus the HTAi Community-of-Practice human-oversight principle; ELEVATE has no standalone oversight domain.",
|
|
53
|
+
probe_question: "Does a named human review every AI-generated claim before it is used in a dossier or decision?",
|
|
54
|
+
remediation: "Require a named human reviewer to sign off on every AI-generated claim before it enters a dossier or decision.",
|
|
55
|
+
},
|
|
56
|
+
phi_data_handling: {
|
|
57
|
+
key: "phi_data_handling",
|
|
58
|
+
label: "PHI & data handling",
|
|
59
|
+
elevate_refs: ["Security and Privacy"],
|
|
60
|
+
probe_question: "Is patient-identifiable data kept out of unregulated AI systems and otherwise protected?",
|
|
61
|
+
remediation: "Keep patient-identifiable data out of unregulated AI tools; use BYOK / in-tenant inference and document the data flow.",
|
|
62
|
+
},
|
|
63
|
+
bias_equity: {
|
|
64
|
+
key: "bias_equity",
|
|
65
|
+
label: "Bias & equity",
|
|
66
|
+
elevate_refs: ["Fairness and Bias"],
|
|
67
|
+
probe_question: "Are subgroup/equity effects and training-data bias considered and documented?",
|
|
68
|
+
remediation: "Assess subgroup/equity impact and training-data representativeness; document limitations.",
|
|
69
|
+
},
|
|
70
|
+
auditability: {
|
|
71
|
+
key: "auditability",
|
|
72
|
+
label: "Auditability & reproducibility",
|
|
73
|
+
elevate_refs: ["Reproducibility Protocols and Generalizability"],
|
|
74
|
+
probe_question: "Is there a reproducible audit trail (inputs, sources, tool/model versions, timestamp)?",
|
|
75
|
+
remediation: "Record a reproducible audit trail (inputs, sources, tool/model versions, timestamp) for every run.",
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=crosswalk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crosswalk.js","sourceRoot":"","sources":["../../src/governance/crosswalk.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,uFAAuF;AACvF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,uBAAuB;IACvB,qBAAqB;IACrB,8BAA8B;IAC9B,yBAAyB;IACzB,gDAAgD;IAChD,mBAAmB;IACnB,mBAAmB;IACnB,2CAA2C;IAC3C,6BAA6B;IAC7B,sBAAsB;CACd,CAAC;AAEX,iFAAiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB;IACnB,2CAA2C;IAC3C,6BAA6B;CACrB,CAAC;AAsBX,MAAM,CAAC,MAAM,eAAe,GAAmB;IAC7C,cAAc;IACd,qBAAqB;IACrB,iBAAiB;IACjB,mBAAmB;IACnB,aAAa;IACb,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAyC;IAC7D,YAAY,EAAE;QACZ,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,2BAA2B;QAClC,YAAY,EAAE,CAAC,uBAAuB,CAAC;QACvC,cAAc,EACZ,kGAAkG;QACpG,WAAW,EACT,iHAAiH;KACpH;IACD,mBAAmB,EAAE;QACnB,GAAG,EAAE,qBAAqB;QAC1B,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE;YACZ,yBAAyB;YACzB,qBAAqB;YACrB,8BAA8B;SAC/B;QACD,cAAc,EACZ,gHAAgH;QAClH,WAAW,EACT,yHAAyH;KAC5H;IACD,eAAe,EAAE;QACf,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,6BAA6B;QACpC,YAAY,EAAE,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;QAChE,eAAe,EACb,+KAA+K;QACjL,cAAc,EACZ,gGAAgG;QAClG,WAAW,EACT,gHAAgH;KACnH;IACD,iBAAiB,EAAE;QACjB,GAAG,EAAE,mBAAmB;QACxB,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE,CAAC,sBAAsB,CAAC;QACtC,cAAc,EACZ,0FAA0F;QAC5F,WAAW,EACT,wHAAwH;KAC3H;IACD,WAAW,EAAE;QACX,GAAG,EAAE,aAAa;QAClB,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,CAAC,mBAAmB,CAAC;QACnC,cAAc,EACZ,+EAA+E;QACjF,WAAW,EACT,2FAA2F;KAC9F;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,gCAAgC;QACvC,YAAY,EAAE,CAAC,gDAAgD,CAAC;QAChE,cAAc,EACZ,wFAAwF;QAC1F,WAAW,EACT,oGAAoG;KACvG;CACF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AuditRecord } from "../audit/types.js";
|
|
2
|
+
export type Rag = "green" | "amber" | "red" | "insufficient";
|
|
3
|
+
export type ProbeAnswer = "yes" | "no" | "partial" | null | undefined;
|
|
4
|
+
export type UseCase = "regulatory_submission" | "payer_dossier" | "internal_analysis" | "exploratory";
|
|
5
|
+
export interface Scorecard {
|
|
6
|
+
green: number;
|
|
7
|
+
amber: number;
|
|
8
|
+
red: number;
|
|
9
|
+
insufficient: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function scoreDimension(answer: ProbeAnswer): Rag;
|
|
12
|
+
export declare function tallyScorecard(rags: Rag[]): Scorecard;
|
|
13
|
+
export declare function aggregateVerdict(rags: Rag[], useCase: UseCase): string;
|
|
14
|
+
export interface DerivedProbes {
|
|
15
|
+
transparency: ProbeAnswer;
|
|
16
|
+
citation_validation: ProbeAnswer;
|
|
17
|
+
auditability: ProbeAnswer;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Honestly derive ONLY the dimensions a trace can evidence (1, 2, 6).
|
|
21
|
+
* Human-oversight, PHI, and bias cannot be proven from a trace → caller leaves them null.
|
|
22
|
+
*/
|
|
23
|
+
export declare function deriveFromAudit(audit: AuditRecord): DerivedProbes;
|
|
24
|
+
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/governance/scoring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,cAAc,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;AACtE,MAAM,MAAM,OAAO,GACf,uBAAuB,GACvB,eAAe,GACf,mBAAmB,GACnB,aAAa,CAAC;AAElB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAWvD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,CAOrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAyBtE;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,WAAW,CAAC;IAC1B,mBAAmB,EAAE,WAAW,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAyBjE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export function scoreDimension(answer) {
|
|
2
|
+
switch (answer) {
|
|
3
|
+
case "yes":
|
|
4
|
+
return "green";
|
|
5
|
+
case "partial":
|
|
6
|
+
return "amber";
|
|
7
|
+
case "no":
|
|
8
|
+
return "red";
|
|
9
|
+
default:
|
|
10
|
+
return "insufficient";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function tallyScorecard(rags) {
|
|
14
|
+
return {
|
|
15
|
+
green: rags.filter((r) => r === "green").length,
|
|
16
|
+
amber: rags.filter((r) => r === "amber").length,
|
|
17
|
+
red: rags.filter((r) => r === "red").length,
|
|
18
|
+
insufficient: rags.filter((r) => r === "insufficient").length,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function aggregateVerdict(rags, useCase) {
|
|
22
|
+
const highStakes = useCase === "regulatory_submission" || useCase === "payer_dossier";
|
|
23
|
+
const blocking = highStakes || useCase === "internal_analysis";
|
|
24
|
+
const hasRed = rags.includes("red");
|
|
25
|
+
const hasInsufficient = rags.includes("insufficient");
|
|
26
|
+
const hasAmber = rags.includes("amber");
|
|
27
|
+
if (hasRed) {
|
|
28
|
+
return blocking
|
|
29
|
+
? "Not submission-ready — material governance gap (Red)"
|
|
30
|
+
: "Governance gaps noted (advisory — exploratory use)";
|
|
31
|
+
}
|
|
32
|
+
if (hasInsufficient) {
|
|
33
|
+
if (highStakes)
|
|
34
|
+
return "Cannot certify — missing governance evidence";
|
|
35
|
+
if (useCase === "internal_analysis")
|
|
36
|
+
return "Adequate with gaps — missing evidence flagged";
|
|
37
|
+
return "Informational — missing evidence (advisory — exploratory use)";
|
|
38
|
+
}
|
|
39
|
+
if (hasAmber) {
|
|
40
|
+
return useCase === "exploratory"
|
|
41
|
+
? "Minor gaps (advisory)"
|
|
42
|
+
: "Adequate with gaps — resolve ambers before use";
|
|
43
|
+
}
|
|
44
|
+
return "Strong governance posture";
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Honestly derive ONLY the dimensions a trace can evidence (1, 2, 6).
|
|
48
|
+
* Human-oversight, PHI, and bias cannot be proven from a trace → caller leaves them null.
|
|
49
|
+
*/
|
|
50
|
+
export function deriveFromAudit(audit) {
|
|
51
|
+
const hasCore = Boolean(audit.tool && audit.timestamp);
|
|
52
|
+
const transparency = hasCore
|
|
53
|
+
? audit.methodology && audit.methodology.trim().length > 0
|
|
54
|
+
? "yes"
|
|
55
|
+
: "partial"
|
|
56
|
+
: null;
|
|
57
|
+
const calledValidate = audit.tools_called.some((t) => t.name === "utils.validate_links" || t.name === "validate_links");
|
|
58
|
+
const hasSources = audit.sources_queried.length > 0;
|
|
59
|
+
const citation_validation = calledValidate && hasSources ? "yes" : hasSources ? "partial" : "no";
|
|
60
|
+
const auditability = audit.timestamp &&
|
|
61
|
+
(audit.tools_called.length > 0 || audit.sources_queried.length > 0)
|
|
62
|
+
? "yes"
|
|
63
|
+
: audit.timestamp
|
|
64
|
+
? "partial"
|
|
65
|
+
: null;
|
|
66
|
+
return { transparency, citation_validation, auditability };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/governance/scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,24 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { CEModelParams } from "../providers/types.js";
|
|
6
6
|
import type { MarkovParams } from "./markov.js";
|
|
7
|
+
/**
|
|
8
|
+
* Structural assumptions baked into `buildMarkovParamsFromCE`.
|
|
9
|
+
*
|
|
10
|
+
* These are simplified illustrative defaults used when no indication-specific
|
|
11
|
+
* epidemiological data are supplied. They materially drive every Markov-based
|
|
12
|
+
* ICER produced by this tool. They MUST be replaced with indication-specific
|
|
13
|
+
* values before the model is used for any regulatory submission, HTA dossier,
|
|
14
|
+
* or payer negotiation.
|
|
15
|
+
*
|
|
16
|
+
* Callers (e.g. costEffectivenessModel.ts) should surface all three strings
|
|
17
|
+
* via `addAssumption` so they appear in the audit trail and visible output.
|
|
18
|
+
*
|
|
19
|
+
* Rationale for exporting rather than calling addAssumption here:
|
|
20
|
+
* modelUtils is a pure computation module with no audit dependency — it has
|
|
21
|
+
* no access to an AuditRecord instance. The caller owns the audit lifecycle
|
|
22
|
+
* and is the correct place to wire these strings in.
|
|
23
|
+
*/
|
|
24
|
+
export declare const MARKOV_STRUCTURAL_ASSUMPTIONS: readonly string[];
|
|
7
25
|
export declare function getTimeHorizonYears(horizon: CEModelParams["time_horizon"]): number;
|
|
8
26
|
/**
|
|
9
27
|
* Build MarkovParams from CEModelParams using a 3-state model
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelUtils.d.ts","sourceRoot":"","sources":["../../src/models/modelUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAiC,MAAM,aAAa,CAAC;AAK/E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,GACrC,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAgG3E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAgEA"}
|
|
1
|
+
{"version":3,"file":"modelUtils.d.ts","sourceRoot":"","sources":["../../src/models/modelUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAiC,MAAM,aAAa,CAAC;AAK/E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAkBjD,CAAC;AAEX,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,GACrC,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAgG3E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB,CAgEA"}
|
|
@@ -4,6 +4,40 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { runMarkovModel } from "./markov.js";
|
|
6
6
|
const DISCOUNT_RATE = 0.035;
|
|
7
|
+
/**
|
|
8
|
+
* Structural assumptions baked into `buildMarkovParamsFromCE`.
|
|
9
|
+
*
|
|
10
|
+
* These are simplified illustrative defaults used when no indication-specific
|
|
11
|
+
* epidemiological data are supplied. They materially drive every Markov-based
|
|
12
|
+
* ICER produced by this tool. They MUST be replaced with indication-specific
|
|
13
|
+
* values before the model is used for any regulatory submission, HTA dossier,
|
|
14
|
+
* or payer negotiation.
|
|
15
|
+
*
|
|
16
|
+
* Callers (e.g. costEffectivenessModel.ts) should surface all three strings
|
|
17
|
+
* via `addAssumption` so they appear in the audit trail and visible output.
|
|
18
|
+
*
|
|
19
|
+
* Rationale for exporting rather than calling addAssumption here:
|
|
20
|
+
* modelUtils is a pure computation module with no audit dependency — it has
|
|
21
|
+
* no access to an AuditRecord instance. The caller owns the audit lifecycle
|
|
22
|
+
* and is the correct place to wire these strings in.
|
|
23
|
+
*/
|
|
24
|
+
export const MARKOV_STRUCTURAL_ASSUMPTIONS = [
|
|
25
|
+
"STRUCTURAL ASSUMPTION (illustrative, not epidemiologically derived): " +
|
|
26
|
+
"Background annual mortality fixed at 2% (0.02). " +
|
|
27
|
+
"This is a generic placeholder. Replace with indication-specific life-table " +
|
|
28
|
+
"mortality for submission use.",
|
|
29
|
+
"STRUCTURAL ASSUMPTION (illustrative, not epidemiologically derived): " +
|
|
30
|
+
"Annual probability of staying on intervention derived as " +
|
|
31
|
+
"0.5 + efficacy_delta × 0.5 — a heuristic mapping from the unitless " +
|
|
32
|
+
"efficacy_delta input to a Markov transition probability with no " +
|
|
33
|
+
"epidemiological basis. Replace with a clinical-trial-derived " +
|
|
34
|
+
"treatment-discontinuation rate for submission use.",
|
|
35
|
+
"STRUCTURAL ASSUMPTION (illustrative, not epidemiologically derived): " +
|
|
36
|
+
"Comparator retention set to 70% of intervention retention " +
|
|
37
|
+
"(baselineProbStayOn = probStayOnIntervention × 0.7) — an arbitrary scalar " +
|
|
38
|
+
"with no indication-specific basis. Replace with trial-observed or " +
|
|
39
|
+
"registry-derived comparator discontinuation data for submission use.",
|
|
40
|
+
];
|
|
7
41
|
export function getTimeHorizonYears(horizon) {
|
|
8
42
|
if (horizon === "lifetime")
|
|
9
43
|
return 40;
|