heor-agent-mcp 0.1.0

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.
Files changed (299) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/dist/audit/builder.d.ts +8 -0
  4. package/dist/audit/builder.d.ts.map +1 -0
  5. package/dist/audit/builder.js +37 -0
  6. package/dist/audit/builder.js.map +1 -0
  7. package/dist/audit/types.d.ts +30 -0
  8. package/dist/audit/types.d.ts.map +1 -0
  9. package/dist/audit/types.js +2 -0
  10. package/dist/audit/types.js.map +1 -0
  11. package/dist/formatters/docx.d.ts +5 -0
  12. package/dist/formatters/docx.d.ts.map +1 -0
  13. package/dist/formatters/docx.js +207 -0
  14. package/dist/formatters/docx.js.map +1 -0
  15. package/dist/formatters/json.d.ts +4 -0
  16. package/dist/formatters/json.d.ts.map +1 -0
  17. package/dist/formatters/json.js +4 -0
  18. package/dist/formatters/json.js.map +1 -0
  19. package/dist/formatters/markdown.d.ts +5 -0
  20. package/dist/formatters/markdown.d.ts.map +1 -0
  21. package/dist/formatters/markdown.js +50 -0
  22. package/dist/formatters/markdown.js.map +1 -0
  23. package/dist/knowledge/index.d.ts +8 -0
  24. package/dist/knowledge/index.d.ts.map +1 -0
  25. package/dist/knowledge/index.js +8 -0
  26. package/dist/knowledge/index.js.map +1 -0
  27. package/dist/knowledge/paths.d.ts +9 -0
  28. package/dist/knowledge/paths.d.ts.map +1 -0
  29. package/dist/knowledge/paths.js +35 -0
  30. package/dist/knowledge/paths.js.map +1 -0
  31. package/dist/knowledge/projectStore.d.ts +37 -0
  32. package/dist/knowledge/projectStore.d.ts.map +1 -0
  33. package/dist/knowledge/projectStore.js +112 -0
  34. package/dist/knowledge/projectStore.js.map +1 -0
  35. package/dist/knowledge/rawStore.d.ts +18 -0
  36. package/dist/knowledge/rawStore.d.ts.map +1 -0
  37. package/dist/knowledge/rawStore.js +103 -0
  38. package/dist/knowledge/rawStore.js.map +1 -0
  39. package/dist/knowledge/search.d.ts +19 -0
  40. package/dist/knowledge/search.d.ts.map +1 -0
  41. package/dist/knowledge/search.js +105 -0
  42. package/dist/knowledge/search.js.map +1 -0
  43. package/dist/knowledge/types.d.ts +6 -0
  44. package/dist/knowledge/types.d.ts.map +1 -0
  45. package/dist/knowledge/types.js +2 -0
  46. package/dist/knowledge/types.js.map +1 -0
  47. package/dist/knowledge/wikiStore.d.ts +18 -0
  48. package/dist/knowledge/wikiStore.d.ts.map +1 -0
  49. package/dist/knowledge/wikiStore.js +77 -0
  50. package/dist/knowledge/wikiStore.js.map +1 -0
  51. package/dist/knowledge/yaml.d.ts +17 -0
  52. package/dist/knowledge/yaml.d.ts.map +1 -0
  53. package/dist/knowledge/yaml.js +131 -0
  54. package/dist/knowledge/yaml.js.map +1 -0
  55. package/dist/models/distributions.d.ts +28 -0
  56. package/dist/models/distributions.d.ts.map +1 -0
  57. package/dist/models/distributions.js +99 -0
  58. package/dist/models/distributions.js.map +1 -0
  59. package/dist/models/index.d.ts +11 -0
  60. package/dist/models/index.d.ts.map +1 -0
  61. package/dist/models/index.js +7 -0
  62. package/dist/models/index.js.map +1 -0
  63. package/dist/models/markov.d.ts +42 -0
  64. package/dist/models/markov.d.ts.map +1 -0
  65. package/dist/models/markov.js +82 -0
  66. package/dist/models/markov.js.map +1 -0
  67. package/dist/models/modelUtils.d.ts +29 -0
  68. package/dist/models/modelUtils.d.ts.map +1 -0
  69. package/dist/models/modelUtils.js +139 -0
  70. package/dist/models/modelUtils.js.map +1 -0
  71. package/dist/models/owsa.d.ts +31 -0
  72. package/dist/models/owsa.d.ts.map +1 -0
  73. package/dist/models/owsa.js +103 -0
  74. package/dist/models/owsa.js.map +1 -0
  75. package/dist/models/partsa.d.ts +40 -0
  76. package/dist/models/partsa.d.ts.map +1 -0
  77. package/dist/models/partsa.js +65 -0
  78. package/dist/models/partsa.js.map +1 -0
  79. package/dist/models/psa.d.ts +33 -0
  80. package/dist/models/psa.d.ts.map +1 -0
  81. package/dist/models/psa.js +118 -0
  82. package/dist/models/psa.js.map +1 -0
  83. package/dist/providers/direct/aifa.d.ts +3 -0
  84. package/dist/providers/direct/aifa.d.ts.map +1 -0
  85. package/dist/providers/direct/aifa.js +30 -0
  86. package/dist/providers/direct/aifa.js.map +1 -0
  87. package/dist/providers/direct/allOfUs.d.ts +3 -0
  88. package/dist/providers/direct/allOfUs.d.ts.map +1 -0
  89. package/dist/providers/direct/allOfUs.js +37 -0
  90. package/dist/providers/direct/allOfUs.js.map +1 -0
  91. package/dist/providers/direct/anvisa.d.ts +3 -0
  92. package/dist/providers/direct/anvisa.d.ts.map +1 -0
  93. package/dist/providers/direct/anvisa.js +25 -0
  94. package/dist/providers/direct/anvisa.js.map +1 -0
  95. package/dist/providers/direct/biorxiv.d.ts +3 -0
  96. package/dist/providers/direct/biorxiv.d.ts.map +1 -0
  97. package/dist/providers/direct/biorxiv.js +33 -0
  98. package/dist/providers/direct/biorxiv.js.map +1 -0
  99. package/dist/providers/direct/bnf.d.ts +3 -0
  100. package/dist/providers/direct/bnf.d.ts.map +1 -0
  101. package/dist/providers/direct/bnf.js +30 -0
  102. package/dist/providers/direct/bnf.js.map +1 -0
  103. package/dist/providers/direct/cadthReviews.d.ts +3 -0
  104. package/dist/providers/direct/cadthReviews.d.ts.map +1 -0
  105. package/dist/providers/direct/cadthReviews.js +30 -0
  106. package/dist/providers/direct/cadthReviews.js.map +1 -0
  107. package/dist/providers/direct/chembl.d.ts +3 -0
  108. package/dist/providers/direct/chembl.d.ts.map +1 -0
  109. package/dist/providers/direct/chembl.js +24 -0
  110. package/dist/providers/direct/chembl.js.map +1 -0
  111. package/dist/providers/direct/citeline.d.ts +3 -0
  112. package/dist/providers/direct/citeline.d.ts.map +1 -0
  113. package/dist/providers/direct/citeline.js +50 -0
  114. package/dist/providers/direct/citeline.js.map +1 -0
  115. package/dist/providers/direct/clinicalTrials.d.ts +3 -0
  116. package/dist/providers/direct/clinicalTrials.d.ts.map +1 -0
  117. package/dist/providers/direct/clinicalTrials.js +29 -0
  118. package/dist/providers/direct/clinicalTrials.js.map +1 -0
  119. package/dist/providers/direct/cmsNadac.d.ts +3 -0
  120. package/dist/providers/direct/cmsNadac.d.ts.map +1 -0
  121. package/dist/providers/direct/cmsNadac.js +52 -0
  122. package/dist/providers/direct/cmsNadac.js.map +1 -0
  123. package/dist/providers/direct/cochrane.d.ts +3 -0
  124. package/dist/providers/direct/cochrane.d.ts.map +1 -0
  125. package/dist/providers/direct/cochrane.js +46 -0
  126. package/dist/providers/direct/cochrane.js.map +1 -0
  127. package/dist/providers/direct/conitec.d.ts +3 -0
  128. package/dist/providers/direct/conitec.d.ts.map +1 -0
  129. package/dist/providers/direct/conitec.js +25 -0
  130. package/dist/providers/direct/conitec.js.map +1 -0
  131. package/dist/providers/direct/cortellis.d.ts +3 -0
  132. package/dist/providers/direct/cortellis.d.ts.map +1 -0
  133. package/dist/providers/direct/cortellis.js +52 -0
  134. package/dist/providers/direct/cortellis.js.map +1 -0
  135. package/dist/providers/direct/datasus.d.ts +3 -0
  136. package/dist/providers/direct/datasus.d.ts.map +1 -0
  137. package/dist/providers/direct/datasus.js +30 -0
  138. package/dist/providers/direct/datasus.js.map +1 -0
  139. package/dist/providers/direct/embase.d.ts +3 -0
  140. package/dist/providers/direct/embase.d.ts.map +1 -0
  141. package/dist/providers/direct/embase.js +54 -0
  142. package/dist/providers/direct/embase.js.map +1 -0
  143. package/dist/providers/direct/fonasa.d.ts +3 -0
  144. package/dist/providers/direct/fonasa.d.ts.map +1 -0
  145. package/dist/providers/direct/fonasa.js +25 -0
  146. package/dist/providers/direct/fonasa.js.map +1 -0
  147. package/dist/providers/direct/gbaDecisions.d.ts +3 -0
  148. package/dist/providers/direct/gbaDecisions.d.ts.map +1 -0
  149. package/dist/providers/direct/gbaDecisions.js +30 -0
  150. package/dist/providers/direct/gbaDecisions.js.map +1 -0
  151. package/dist/providers/direct/googleScholar.d.ts +3 -0
  152. package/dist/providers/direct/googleScholar.d.ts.map +1 -0
  153. package/dist/providers/direct/googleScholar.js +39 -0
  154. package/dist/providers/direct/googleScholar.js.map +1 -0
  155. package/dist/providers/direct/hasTc.d.ts +3 -0
  156. package/dist/providers/direct/hasTc.d.ts.map +1 -0
  157. package/dist/providers/direct/hasTc.js +30 -0
  158. package/dist/providers/direct/hasTc.js.map +1 -0
  159. package/dist/providers/direct/hitap.d.ts +3 -0
  160. package/dist/providers/direct/hitap.d.ts.map +1 -0
  161. package/dist/providers/direct/hitap.js +30 -0
  162. package/dist/providers/direct/hitap.js.map +1 -0
  163. package/dist/providers/direct/icerReports.d.ts +3 -0
  164. package/dist/providers/direct/icerReports.d.ts.map +1 -0
  165. package/dist/providers/direct/icerReports.js +30 -0
  166. package/dist/providers/direct/icerReports.js.map +1 -0
  167. package/dist/providers/direct/iets.d.ts +3 -0
  168. package/dist/providers/direct/iets.d.ts.map +1 -0
  169. package/dist/providers/direct/iets.js +25 -0
  170. package/dist/providers/direct/iets.js.map +1 -0
  171. package/dist/providers/direct/ihmeGbd.d.ts +3 -0
  172. package/dist/providers/direct/ihmeGbd.d.ts.map +1 -0
  173. package/dist/providers/direct/ihmeGbd.js +74 -0
  174. package/dist/providers/direct/ihmeGbd.js.map +1 -0
  175. package/dist/providers/direct/index.d.ts +7 -0
  176. package/dist/providers/direct/index.d.ts.map +1 -0
  177. package/dist/providers/direct/index.js +186 -0
  178. package/dist/providers/direct/index.js.map +1 -0
  179. package/dist/providers/direct/inesss.d.ts +3 -0
  180. package/dist/providers/direct/inesss.d.ts.map +1 -0
  181. package/dist/providers/direct/inesss.js +30 -0
  182. package/dist/providers/direct/inesss.js.map +1 -0
  183. package/dist/providers/direct/iqwig.d.ts +3 -0
  184. package/dist/providers/direct/iqwig.d.ts.map +1 -0
  185. package/dist/providers/direct/iqwig.js +30 -0
  186. package/dist/providers/direct/iqwig.js.map +1 -0
  187. package/dist/providers/direct/ispor.d.ts +3 -0
  188. package/dist/providers/direct/ispor.d.ts.map +1 -0
  189. package/dist/providers/direct/ispor.js +35 -0
  190. package/dist/providers/direct/ispor.js.map +1 -0
  191. package/dist/providers/direct/nhsCosts.d.ts +3 -0
  192. package/dist/providers/direct/nhsCosts.d.ts.map +1 -0
  193. package/dist/providers/direct/nhsCosts.js +32 -0
  194. package/dist/providers/direct/nhsCosts.js.map +1 -0
  195. package/dist/providers/direct/niceTa.d.ts +3 -0
  196. package/dist/providers/direct/niceTa.d.ts.map +1 -0
  197. package/dist/providers/direct/niceTa.js +30 -0
  198. package/dist/providers/direct/niceTa.js.map +1 -0
  199. package/dist/providers/direct/oecd.d.ts +3 -0
  200. package/dist/providers/direct/oecd.d.ts.map +1 -0
  201. package/dist/providers/direct/oecd.js +102 -0
  202. package/dist/providers/direct/oecd.js.map +1 -0
  203. package/dist/providers/direct/orangeBook.d.ts +3 -0
  204. package/dist/providers/direct/orangeBook.d.ts.map +1 -0
  205. package/dist/providers/direct/orangeBook.js +48 -0
  206. package/dist/providers/direct/orangeBook.js.map +1 -0
  207. package/dist/providers/direct/paho.d.ts +3 -0
  208. package/dist/providers/direct/paho.d.ts.map +1 -0
  209. package/dist/providers/direct/paho.js +30 -0
  210. package/dist/providers/direct/paho.js.map +1 -0
  211. package/dist/providers/direct/pbacPsd.d.ts +3 -0
  212. package/dist/providers/direct/pbacPsd.d.ts.map +1 -0
  213. package/dist/providers/direct/pbacPsd.js +30 -0
  214. package/dist/providers/direct/pbacPsd.js.map +1 -0
  215. package/dist/providers/direct/pbsSchedule.d.ts +3 -0
  216. package/dist/providers/direct/pbsSchedule.d.ts.map +1 -0
  217. package/dist/providers/direct/pbsSchedule.js +37 -0
  218. package/dist/providers/direct/pbsSchedule.js.map +1 -0
  219. package/dist/providers/direct/pharmapendium.d.ts +3 -0
  220. package/dist/providers/direct/pharmapendium.d.ts.map +1 -0
  221. package/dist/providers/direct/pharmapendium.js +39 -0
  222. package/dist/providers/direct/pharmapendium.js.map +1 -0
  223. package/dist/providers/direct/proxyClient.d.ts +15 -0
  224. package/dist/providers/direct/proxyClient.d.ts.map +1 -0
  225. package/dist/providers/direct/proxyClient.js +76 -0
  226. package/dist/providers/direct/proxyClient.js.map +1 -0
  227. package/dist/providers/direct/pssru.d.ts +3 -0
  228. package/dist/providers/direct/pssru.d.ts.map +1 -0
  229. package/dist/providers/direct/pssru.js +33 -0
  230. package/dist/providers/direct/pssru.js.map +1 -0
  231. package/dist/providers/direct/pubmed.d.ts +3 -0
  232. package/dist/providers/direct/pubmed.d.ts.map +1 -0
  233. package/dist/providers/direct/pubmed.js +73 -0
  234. package/dist/providers/direct/pubmed.js.map +1 -0
  235. package/dist/providers/direct/purpleBook.d.ts +3 -0
  236. package/dist/providers/direct/purpleBook.d.ts.map +1 -0
  237. package/dist/providers/direct/purpleBook.js +52 -0
  238. package/dist/providers/direct/purpleBook.js.map +1 -0
  239. package/dist/providers/direct/tlv.d.ts +3 -0
  240. package/dist/providers/direct/tlv.d.ts.map +1 -0
  241. package/dist/providers/direct/tlv.js +30 -0
  242. package/dist/providers/direct/tlv.js.map +1 -0
  243. package/dist/providers/direct/whoGho.d.ts +3 -0
  244. package/dist/providers/direct/whoGho.d.ts.map +1 -0
  245. package/dist/providers/direct/whoGho.js +51 -0
  246. package/dist/providers/direct/whoGho.js.map +1 -0
  247. package/dist/providers/direct/worldBank.d.ts +3 -0
  248. package/dist/providers/direct/worldBank.d.ts.map +1 -0
  249. package/dist/providers/direct/worldBank.js +54 -0
  250. package/dist/providers/direct/worldBank.js.map +1 -0
  251. package/dist/providers/factory.d.ts +3 -0
  252. package/dist/providers/factory.d.ts.map +1 -0
  253. package/dist/providers/factory.js +8 -0
  254. package/dist/providers/factory.js.map +1 -0
  255. package/dist/providers/hosted/index.d.ts +9 -0
  256. package/dist/providers/hosted/index.d.ts.map +1 -0
  257. package/dist/providers/hosted/index.js +16 -0
  258. package/dist/providers/hosted/index.js.map +1 -0
  259. package/dist/providers/types.d.ts +176 -0
  260. package/dist/providers/types.d.ts.map +1 -0
  261. package/dist/providers/types.js +2 -0
  262. package/dist/providers/types.js.map +1 -0
  263. package/dist/server.d.ts +3 -0
  264. package/dist/server.d.ts.map +1 -0
  265. package/dist/server.js +80 -0
  266. package/dist/server.js.map +1 -0
  267. package/dist/tools/costEffectivenessModel.d.ts +98 -0
  268. package/dist/tools/costEffectivenessModel.d.ts.map +1 -0
  269. package/dist/tools/costEffectivenessModel.js +404 -0
  270. package/dist/tools/costEffectivenessModel.js.map +1 -0
  271. package/dist/tools/htaDossierPrep.d.ts +69 -0
  272. package/dist/tools/htaDossierPrep.d.ts.map +1 -0
  273. package/dist/tools/htaDossierPrep.js +399 -0
  274. package/dist/tools/htaDossierPrep.js.map +1 -0
  275. package/dist/tools/knowledgeRead.d.ts +21 -0
  276. package/dist/tools/knowledgeRead.d.ts.map +1 -0
  277. package/dist/tools/knowledgeRead.js +38 -0
  278. package/dist/tools/knowledgeRead.js.map +1 -0
  279. package/dist/tools/knowledgeSearch.d.ts +37 -0
  280. package/dist/tools/knowledgeSearch.d.ts.map +1 -0
  281. package/dist/tools/knowledgeSearch.js +51 -0
  282. package/dist/tools/knowledgeSearch.js.map +1 -0
  283. package/dist/tools/knowledgeWrite.d.ts +25 -0
  284. package/dist/tools/knowledgeWrite.d.ts.map +1 -0
  285. package/dist/tools/knowledgeWrite.js +40 -0
  286. package/dist/tools/knowledgeWrite.js.map +1 -0
  287. package/dist/tools/literatureSearch.d.ts +42 -0
  288. package/dist/tools/literatureSearch.d.ts.map +1 -0
  289. package/dist/tools/literatureSearch.js +142 -0
  290. package/dist/tools/literatureSearch.js.map +1 -0
  291. package/dist/tools/metabolicProfile.d.ts +19 -0
  292. package/dist/tools/metabolicProfile.d.ts.map +1 -0
  293. package/dist/tools/metabolicProfile.js +150 -0
  294. package/dist/tools/metabolicProfile.js.map +1 -0
  295. package/dist/tools/projectCreate.d.ts +37 -0
  296. package/dist/tools/projectCreate.d.ts.map +1 -0
  297. package/dist/tools/projectCreate.js +61 -0
  298. package/dist/tools/projectCreate.js.map +1 -0
  299. package/package.json +71 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Parse YAML frontmatter from a markdown string.
3
+ * Returns { frontmatter, body } where body is the content after the frontmatter.
4
+ * If no frontmatter present, returns { frontmatter: {}, body: content }.
5
+ */
6
+ export function parseFrontmatter(content) {
7
+ if (!content.startsWith("---\n") && !content.startsWith("---\r\n")) {
8
+ return { frontmatter: {}, body: content };
9
+ }
10
+ const lines = content.split(/\r?\n/);
11
+ // Find closing ---
12
+ let endIdx = -1;
13
+ for (let i = 1; i < lines.length; i++) {
14
+ if (lines[i] === "---") {
15
+ endIdx = i;
16
+ break;
17
+ }
18
+ }
19
+ if (endIdx === -1)
20
+ return { frontmatter: {}, body: content };
21
+ const yamlLines = lines.slice(1, endIdx);
22
+ const rawBody = lines.slice(endIdx + 1).join("\n");
23
+ // Strip a single leading newline that stringifyFrontmatter inserts
24
+ const body = rawBody.startsWith("\n") ? rawBody.slice(1) : rawBody;
25
+ const frontmatter = parseYamlLines(yamlLines);
26
+ return { frontmatter, body };
27
+ }
28
+ function parseYamlLines(lines) {
29
+ const result = {};
30
+ let i = 0;
31
+ while (i < lines.length) {
32
+ const line = lines[i];
33
+ if (!line.trim() || line.trim().startsWith("#")) {
34
+ i++;
35
+ continue;
36
+ }
37
+ // Key: value pattern
38
+ const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\s*(.*)$/);
39
+ if (!match) {
40
+ i++;
41
+ continue;
42
+ }
43
+ const key = match[1];
44
+ const rawValue = match[2].trim();
45
+ if (rawValue === "" || rawValue === "|" || rawValue === ">") {
46
+ // Multi-line or array follows. Check next line indentation.
47
+ const items = [];
48
+ let j = i + 1;
49
+ while (j < lines.length && lines[j].startsWith(" ")) {
50
+ const itemLine = lines[j].trim();
51
+ if (itemLine.startsWith("- ")) {
52
+ items.push(parseScalar(itemLine.slice(2).trim()));
53
+ }
54
+ j++;
55
+ }
56
+ if (items.length > 0)
57
+ result[key] = items;
58
+ else
59
+ result[key] = "";
60
+ i = j;
61
+ }
62
+ else {
63
+ result[key] = parseScalar(rawValue);
64
+ i++;
65
+ }
66
+ }
67
+ return result;
68
+ }
69
+ function parseScalar(value) {
70
+ const trimmed = value.trim();
71
+ if (trimmed === "null" || trimmed === "~" || trimmed === "")
72
+ return null;
73
+ if (trimmed === "true")
74
+ return true;
75
+ if (trimmed === "false")
76
+ return false;
77
+ // Number
78
+ if (/^-?\d+$/.test(trimmed))
79
+ return parseInt(trimmed, 10);
80
+ if (/^-?\d*\.\d+$/.test(trimmed))
81
+ return parseFloat(trimmed);
82
+ // Quoted string
83
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
84
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
85
+ return trimmed.slice(1, -1);
86
+ }
87
+ return trimmed;
88
+ }
89
+ /**
90
+ * Serialize a Frontmatter object + body into a markdown string with YAML frontmatter.
91
+ */
92
+ export function stringifyFrontmatter(frontmatter, body) {
93
+ const lines = ["---"];
94
+ for (const [key, value] of Object.entries(frontmatter)) {
95
+ if (value === undefined || value === null)
96
+ continue;
97
+ if (Array.isArray(value)) {
98
+ if (value.length === 0)
99
+ continue;
100
+ lines.push(`${key}:`);
101
+ value.forEach((item) => lines.push(` - ${stringifyScalar(item)}`));
102
+ }
103
+ else if (value instanceof Date) {
104
+ lines.push(`${key}: ${value.toISOString()}`);
105
+ }
106
+ else if (typeof value === "object") {
107
+ // Skip nested objects for now (v1 limitation)
108
+ continue;
109
+ }
110
+ else {
111
+ lines.push(`${key}: ${stringifyScalar(value)}`);
112
+ }
113
+ }
114
+ lines.push("---");
115
+ lines.push("");
116
+ lines.push(body);
117
+ return lines.join("\n");
118
+ }
119
+ function stringifyScalar(value) {
120
+ if (typeof value === "boolean")
121
+ return value ? "true" : "false";
122
+ if (typeof value === "number")
123
+ return String(value);
124
+ // String — quote if contains special chars
125
+ const str = String(value);
126
+ if (/[:#\[\]{}&*!|>'"%@`,\n]/.test(str) || str.includes(" ")) {
127
+ return `"${str.replace(/"/g, '\\"')}"`;
128
+ }
129
+ return str;
130
+ }
131
+ //# sourceMappingURL=yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/knowledge/yaml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pure functions for sampling from statistical distributions (used in PSA Monte Carlo).
3
+ * All functions use method of moments parameterization: convert mean/variance to distribution params.
4
+ */
5
+ /**
6
+ * Simple LCG (Linear Congruential Generator) seeded RNG.
7
+ * Returns values in [0, 1).
8
+ */
9
+ export declare function createSeededRng(seed: number): () => number;
10
+ /**
11
+ * Beta distribution sample using method of moments.
12
+ * Mean and variance parameterize Beta(alpha, beta).
13
+ * Output clamped to [0.001, 0.999].
14
+ */
15
+ export declare function betaSample(mean: number, variance: number, rng: () => number): number;
16
+ /**
17
+ * Gamma distribution sample using method of moments.
18
+ * shape = mean^2/variance, scale = variance/mean
19
+ * Returns positive value.
20
+ */
21
+ export declare function gammaSample(mean: number, variance: number, rng: () => number): number;
22
+ /**
23
+ * Log-Normal distribution sample using method of moments.
24
+ * params on log scale derived from mean/variance.
25
+ * Returns positive value.
26
+ */
27
+ export declare function logNormalSample(mean: number, variance: number, rng: () => number): number;
28
+ //# sourceMappingURL=distributions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributions.d.ts","sourceRoot":"","sources":["../../src/models/distributions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAO1D;AAcD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAYpF;AAsCD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAIrF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAQzF"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Pure functions for sampling from statistical distributions (used in PSA Monte Carlo).
3
+ * All functions use method of moments parameterization: convert mean/variance to distribution params.
4
+ */
5
+ /**
6
+ * Simple LCG (Linear Congruential Generator) seeded RNG.
7
+ * Returns values in [0, 1).
8
+ */
9
+ export function createSeededRng(seed) {
10
+ let state = seed >>> 0; // ensure unsigned 32-bit int
11
+ return function () {
12
+ // LCG parameters from Numerical Recipes
13
+ state = (Math.imul(1664525, state) + 1013904223) >>> 0;
14
+ return state / 0x100000000;
15
+ };
16
+ }
17
+ /**
18
+ * Box-Muller transform: produces a standard normal sample from two uniform samples.
19
+ */
20
+ function boxMullerNormal(rng) {
21
+ let u1 = rng();
22
+ let u2 = rng();
23
+ // Guard against log(0)
24
+ while (u1 === 0)
25
+ u1 = rng();
26
+ while (u2 === 0)
27
+ u2 = rng();
28
+ return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
29
+ }
30
+ /**
31
+ * Beta distribution sample using method of moments.
32
+ * Mean and variance parameterize Beta(alpha, beta).
33
+ * Output clamped to [0.001, 0.999].
34
+ */
35
+ export function betaSample(mean, variance, rng) {
36
+ // Method of moments
37
+ const factor = mean * (1 - mean) / variance - 1;
38
+ const alpha = mean * factor;
39
+ const beta = (1 - mean) * factor;
40
+ // Sample Beta via Gamma ratio: Beta = Gamma(alpha) / (Gamma(alpha) + Gamma(beta))
41
+ const x = gammaSampleShape(alpha, 1, rng);
42
+ const y = gammaSampleShape(beta, 1, rng);
43
+ const result = x / (x + y);
44
+ return Math.max(0.001, Math.min(0.999, result));
45
+ }
46
+ /**
47
+ * Gamma distribution sample using Marsaglia-Tsang method.
48
+ * shape >= 1 case — returns Gamma(shape, scale=1) sample.
49
+ */
50
+ function gammaSampleShape(shape, _scale, rng) {
51
+ if (shape < 1) {
52
+ // Boost: Gamma(shape) = Gamma(shape+1) * U^(1/shape)
53
+ const u = rng();
54
+ return gammaSampleShape(shape + 1, 1, rng) * Math.pow(u, 1 / shape);
55
+ }
56
+ // Marsaglia-Tsang
57
+ const d = shape - 1 / 3;
58
+ const c = 1 / Math.sqrt(9 * d);
59
+ while (true) {
60
+ let x;
61
+ let v;
62
+ do {
63
+ x = boxMullerNormal(rng);
64
+ v = 1 + c * x;
65
+ } while (v <= 0);
66
+ v = v * v * v;
67
+ const u = rng();
68
+ if (u < 1 - 0.0331 * (x * x) * (x * x)) {
69
+ return d * v;
70
+ }
71
+ if (Math.log(u) < 0.5 * x * x + d * (1 - v + Math.log(v))) {
72
+ return d * v;
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Gamma distribution sample using method of moments.
78
+ * shape = mean^2/variance, scale = variance/mean
79
+ * Returns positive value.
80
+ */
81
+ export function gammaSample(mean, variance, rng) {
82
+ const shape = (mean * mean) / variance;
83
+ const scale = variance / mean;
84
+ return gammaSampleShape(shape, 1, rng) * scale;
85
+ }
86
+ /**
87
+ * Log-Normal distribution sample using method of moments.
88
+ * params on log scale derived from mean/variance.
89
+ * Returns positive value.
90
+ */
91
+ export function logNormalSample(mean, variance, rng) {
92
+ // Log-scale parameters
93
+ const sigmaSquared = Math.log(1 + variance / (mean * mean));
94
+ const mu = Math.log(mean) - sigmaSquared / 2;
95
+ const sigma = Math.sqrt(sigmaSquared);
96
+ const z = boxMullerNormal(rng);
97
+ return Math.exp(mu + sigma * z);
98
+ }
99
+ //# sourceMappingURL=distributions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributions.js","sourceRoot":"","sources":["../../src/models/distributions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { runMarkovModel } from "./markov.js";
2
+ export type { MarkovParams, MarkovState, TransitionMatrix, MarkovRunResult } from "./markov.js";
3
+ export { runPartSA } from "./partsa.js";
4
+ export type { PartSAParams, PartSAResult, SurvivalParams } from "./partsa.js";
5
+ export { runPSA } from "./psa.js";
6
+ export type { PSAParams, PSAResult, PSAIteration } from "./psa.js";
7
+ export { runOWSA, buildDefaultOWSAParameters } from "./owsa.js";
8
+ export type { OWSAParameter, OWSAResult } from "./owsa.js";
9
+ export { betaSample, gammaSample, logNormalSample, createSeededRng } from "./distributions.js";
10
+ export { buildMarkovParamsFromCE, runMarkovAndComputeICER } from "./modelUtils.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEhG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE/F,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { runMarkovModel } from "./markov.js";
2
+ export { runPartSA } from "./partsa.js";
3
+ export { runPSA } from "./psa.js";
4
+ export { runOWSA, buildDefaultOWSAParameters } from "./owsa.js";
5
+ export { betaSample, gammaSample, logNormalSample, createSeededRng } from "./distributions.js";
6
+ export { buildMarkovParamsFromCE, runMarkovAndComputeICER } from "./modelUtils.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,OAAO,EAAE,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE/F,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Multi-state Markov cohort model with half-cycle correction and discounting.
3
+ */
4
+ export interface MarkovState {
5
+ name: string;
6
+ utility: number;
7
+ cost_annual: number;
8
+ }
9
+ export interface TransitionMatrix {
10
+ [fromState: string]: {
11
+ [toState: string]: number;
12
+ };
13
+ }
14
+ export interface MarkovParams {
15
+ states: MarkovState[];
16
+ transition_matrix_intervention: TransitionMatrix;
17
+ transition_matrix_comparator: TransitionMatrix;
18
+ initial_cohort: {
19
+ [stateName: string]: number;
20
+ };
21
+ cycle_length_years: number;
22
+ n_cycles: number;
23
+ discount_rate_costs: number;
24
+ discount_rate_outcomes: number;
25
+ }
26
+ export interface MarkovRunResult {
27
+ total_cost: number;
28
+ total_qaly: number;
29
+ total_lys: number;
30
+ state_trace: Array<{
31
+ cycle: number;
32
+ distribution: Record<string, number>;
33
+ }>;
34
+ }
35
+ /**
36
+ * Run Markov model for both intervention and comparator arms.
37
+ */
38
+ export declare function runMarkovModel(params: MarkovParams): {
39
+ intervention: MarkovRunResult;
40
+ comparator: MarkovRunResult;
41
+ };
42
+ //# sourceMappingURL=markov.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markov.d.ts","sourceRoot":"","sources":["../../src/models/markov.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAE/B,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,8BAA8B,EAAE,gBAAgB,CAAC;IACjD,4BAA4B,EAAE,gBAAgB,CAAC;IAC/C,cAAc,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAChD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAC7E;AA2FD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,GACnB;IAAE,YAAY,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,eAAe,CAAA;CAAE,CAIhE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Multi-state Markov cohort model with half-cycle correction and discounting.
3
+ */
4
+ /**
5
+ * Run one arm of a Markov cohort simulation.
6
+ * Uses half-cycle correction: add half a cycle's value at cycle 0 and final cycle.
7
+ */
8
+ function runArm(params, transitionMatrix) {
9
+ const { states, initial_cohort, cycle_length_years, n_cycles, discount_rate_costs, discount_rate_outcomes } = params;
10
+ const stateNames = states.map(s => s.name);
11
+ // Initialize cohort distribution
12
+ let cohort = {};
13
+ for (const name of stateNames) {
14
+ cohort[name] = initial_cohort[name] ?? 0;
15
+ }
16
+ let total_cost = 0;
17
+ let total_qaly = 0;
18
+ let total_lys = 0;
19
+ const state_trace = [];
20
+ // Half-cycle correction at cycle 0 (t=0)
21
+ const discountCost0 = 1 / Math.pow(1 + discount_rate_costs, 0);
22
+ const discountOutcome0 = 1 / Math.pow(1 + discount_rate_outcomes, 0);
23
+ for (const state of states) {
24
+ const prop = cohort[state.name] ?? 0;
25
+ // Half cycle at start
26
+ total_cost += prop * state.cost_annual * cycle_length_years * 0.5 * discountCost0;
27
+ total_qaly += prop * state.utility * cycle_length_years * 0.5 * discountOutcome0;
28
+ // Life years: any non-dead state contributes (assume "Dead" states have utility ~0 — but we track LYs by cohort alive)
29
+ if (state.utility > 0) {
30
+ total_lys += prop * cycle_length_years * 0.5 * discountOutcome0;
31
+ }
32
+ }
33
+ state_trace.push({ cycle: 0, distribution: { ...cohort } });
34
+ for (let cycle = 1; cycle <= n_cycles; cycle++) {
35
+ // Apply transition matrix: new cohort
36
+ const newCohort = {};
37
+ for (const name of stateNames) {
38
+ newCohort[name] = 0;
39
+ }
40
+ for (const fromName of stateNames) {
41
+ const fromProp = cohort[fromName] ?? 0;
42
+ if (fromProp <= 0)
43
+ continue;
44
+ const row = transitionMatrix[fromName];
45
+ if (!row) {
46
+ // No transitions defined: stay in same state
47
+ newCohort[fromName] = (newCohort[fromName] ?? 0) + fromProp;
48
+ continue;
49
+ }
50
+ for (const toName of stateNames) {
51
+ const prob = row[toName] ?? 0;
52
+ newCohort[toName] = (newCohort[toName] ?? 0) + fromProp * prob;
53
+ }
54
+ }
55
+ cohort = newCohort;
56
+ // Discount factors (time t = cycle in years from start)
57
+ const t = cycle * cycle_length_years;
58
+ const discountCost = 1 / Math.pow(1 + discount_rate_costs, t);
59
+ const discountOutcome = 1 / Math.pow(1 + discount_rate_outcomes, t);
60
+ const isLastCycle = cycle === n_cycles;
61
+ const cycleFraction = isLastCycle ? 0.5 : 1.0; // half-cycle at last cycle
62
+ for (const state of states) {
63
+ const prop = cohort[state.name] ?? 0;
64
+ total_cost += prop * state.cost_annual * cycle_length_years * cycleFraction * discountCost;
65
+ total_qaly += prop * state.utility * cycle_length_years * cycleFraction * discountOutcome;
66
+ if (state.utility > 0) {
67
+ total_lys += prop * cycle_length_years * cycleFraction * discountOutcome;
68
+ }
69
+ }
70
+ state_trace.push({ cycle, distribution: { ...cohort } });
71
+ }
72
+ return { total_cost, total_qaly, total_lys, state_trace };
73
+ }
74
+ /**
75
+ * Run Markov model for both intervention and comparator arms.
76
+ */
77
+ export function runMarkovModel(params) {
78
+ const intervention = runArm(params, params.transition_matrix_intervention);
79
+ const comparator = runArm(params, params.transition_matrix_comparator);
80
+ return { intervention, comparator };
81
+ }
82
+ //# sourceMappingURL=markov.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markov.js","sourceRoot":"","sources":["../../src/models/markov.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH;;;GAGG;AACH,SAAS,MAAM,CACb,MAAoB,EACpB,gBAAkC;IAElC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC;IACrH,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE3C,iCAAiC;IACjC,IAAI,MAAM,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,WAAW,GAAmE,EAAE,CAAC;IAEvF,yCAAyC;IACzC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,sBAAsB;QACtB,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,kBAAkB,GAAG,GAAG,GAAG,aAAa,CAAC;QAClF,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,kBAAkB,GAAG,GAAG,GAAG,gBAAgB,CAAC;QACjF,uHAAuH;QACvH,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,IAAI,IAAI,GAAG,kBAAkB,GAAG,GAAG,GAAG,gBAAgB,CAAC;QAClE,CAAC;IACH,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IAE5D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,sCAAsC;QACtC,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,QAAQ,IAAI,CAAC;gBAAE,SAAS;YAE5B,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,6CAA6C;gBAC7C,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9B,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;YACjE,CAAC;QACH,CAAC;QAED,MAAM,GAAG,SAAS,CAAC;QAEnB,wDAAwD;QACxD,MAAM,CAAC,GAAG,KAAK,GAAG,kBAAkB,CAAC;QACrC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAAC,CAAC;QAEpE,MAAM,WAAW,GAAG,KAAK,KAAK,QAAQ,CAAC;QACvC,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,2BAA2B;QAE1E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,kBAAkB,GAAG,aAAa,GAAG,YAAY,CAAC;YAC3F,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,kBAAkB,GAAG,aAAa,GAAG,eAAe,CAAC;YAC1F,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACtB,SAAS,IAAI,IAAI,GAAG,kBAAkB,GAAG,aAAa,GAAG,eAAe,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAoB;IAEpB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACvE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Shared utilities for building Markov params from CEModelParams
3
+ * and computing ICERs.
4
+ */
5
+ import type { CEModelParams } from "../providers/types.js";
6
+ import type { MarkovParams } from "./markov.js";
7
+ /**
8
+ * Build MarkovParams from CEModelParams using a 2-state model
9
+ * (On-Treatment, Off-Treatment).
10
+ */
11
+ export declare function buildMarkovParamsFromCE(params: CEModelParams): MarkovParams;
12
+ /**
13
+ * Run Markov model from CEModelParams and return delta_cost, delta_qaly, ICER.
14
+ *
15
+ * Runs the model twice — once with intervention state costs and once with
16
+ * comparator state costs — so each arm uses the correct drug cost.
17
+ */
18
+ export declare function runMarkovAndComputeICER(params: CEModelParams): {
19
+ delta_cost: number;
20
+ delta_qaly: number;
21
+ icer: number;
22
+ intervention_cost: number;
23
+ comparator_cost: number;
24
+ intervention_qaly: number;
25
+ comparator_qaly: number;
26
+ intervention_lys: number;
27
+ comparator_lys: number;
28
+ };
29
+ //# sourceMappingURL=modelUtils.d.ts.map
@@ -0,0 +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;AAY/E;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAqF3E;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,CA8DA"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Shared utilities for building Markov params from CEModelParams
3
+ * and computing ICERs.
4
+ */
5
+ import { runMarkovModel } from "./markov.js";
6
+ const DISCOUNT_RATE = 0.035;
7
+ function getTimeHorizonYears(horizon) {
8
+ if (horizon === "lifetime")
9
+ return 40;
10
+ if (horizon === "5yr")
11
+ return 5;
12
+ if (horizon === "10yr")
13
+ return 10;
14
+ return Number(horizon);
15
+ }
16
+ /**
17
+ * Build MarkovParams from CEModelParams using a 2-state model
18
+ * (On-Treatment, Off-Treatment).
19
+ */
20
+ export function buildMarkovParamsFromCE(params) {
21
+ const years = getTimeHorizonYears(params.time_horizon);
22
+ const cycle_length_years = 1;
23
+ const n_cycles = years;
24
+ // Utility values
25
+ const utilityOn = params.utility_inputs?.qaly_on_treatment ?? 0.75;
26
+ const utilityOff = params.utility_inputs?.qaly_comparator ?? 0.7;
27
+ // Costs
28
+ const costIntervention = params.cost_inputs.drug_cost_annual + (params.cost_inputs.admin_cost ?? 0);
29
+ const costComparator = params.cost_inputs.comparator_cost_annual +
30
+ (params.cost_inputs.admin_cost ?? 0);
31
+ // Efficacy delta used to derive annual probability of staying on treatment
32
+ // Higher efficacy → more cycles on treatment → better health
33
+ const efficacyDelta = Math.max(0, Math.min(0.999, params.clinical_inputs.efficacy_delta));
34
+ const mortalityReduction = params.clinical_inputs.mortality_reduction ?? 0;
35
+ // Transition: prob of staying in On-Treatment state for intervention
36
+ // Base: driven by efficacy (0.4 efficacy → ~0.8 prob of staying on treatment, modulated)
37
+ const probStayOnIntervention = Math.max(0.05, Math.min(0.95, 0.5 + efficacyDelta * 0.5));
38
+ // For comparator: lower stay probability (baseline)
39
+ const baselineProbStayOn = Math.max(0.05, Math.min(0.9, probStayOnIntervention * 0.7));
40
+ // Mortality reduction affects off-treatment → death transition
41
+ // (simplified: mortality reduction lowers probability of going to off-treatment)
42
+ const mortalityEffect = Math.max(0, Math.min(0.3, mortalityReduction * 0.3));
43
+ const states = [
44
+ { name: "On-Treatment", utility: utilityOn, cost_annual: costIntervention },
45
+ { name: "Off-Treatment", utility: utilityOff, cost_annual: 0 },
46
+ ];
47
+ const statesComparator = [
48
+ { name: "On-Treatment", utility: utilityOn, cost_annual: costComparator },
49
+ { name: "Off-Treatment", utility: utilityOff, cost_annual: 0 },
50
+ ];
51
+ const transition_matrix_intervention = {
52
+ "On-Treatment": {
53
+ "On-Treatment": Math.min(0.95, probStayOnIntervention + mortalityEffect),
54
+ "Off-Treatment": Math.max(0.05, 1 - probStayOnIntervention - mortalityEffect),
55
+ },
56
+ "Off-Treatment": {
57
+ "On-Treatment": 0.05,
58
+ "Off-Treatment": 0.95,
59
+ },
60
+ };
61
+ const transition_matrix_comparator = {
62
+ "On-Treatment": {
63
+ "On-Treatment": Math.min(0.9, baselineProbStayOn),
64
+ "Off-Treatment": Math.max(0.1, 1 - baselineProbStayOn),
65
+ },
66
+ "Off-Treatment": {
67
+ "On-Treatment": 0.05,
68
+ "Off-Treatment": 0.95,
69
+ },
70
+ };
71
+ return {
72
+ states,
73
+ transition_matrix_intervention,
74
+ transition_matrix_comparator,
75
+ initial_cohort: { "On-Treatment": 1.0, "Off-Treatment": 0.0 },
76
+ cycle_length_years,
77
+ n_cycles,
78
+ discount_rate_costs: DISCOUNT_RATE,
79
+ discount_rate_outcomes: DISCOUNT_RATE,
80
+ };
81
+ }
82
+ /**
83
+ * Run Markov model from CEModelParams and return delta_cost, delta_qaly, ICER.
84
+ *
85
+ * Runs the model twice — once with intervention state costs and once with
86
+ * comparator state costs — so each arm uses the correct drug cost.
87
+ */
88
+ export function runMarkovAndComputeICER(params) {
89
+ const baseParams = buildMarkovParamsFromCE(params);
90
+ // Utility values (shared across arms)
91
+ const utilityOn = params.utility_inputs?.qaly_on_treatment ?? 0.75;
92
+ const utilityOff = params.utility_inputs?.qaly_comparator ?? 0.7;
93
+ // Costs per arm
94
+ const costIntervention = params.cost_inputs.drug_cost_annual + (params.cost_inputs.admin_cost ?? 0);
95
+ const costComparator = params.cost_inputs.comparator_cost_annual +
96
+ (params.cost_inputs.admin_cost ?? 0);
97
+ const statesIntervention = [
98
+ { name: "On-Treatment", utility: utilityOn, cost_annual: costIntervention },
99
+ { name: "Off-Treatment", utility: utilityOff, cost_annual: 0 },
100
+ ];
101
+ const statesComparator = [
102
+ { name: "On-Treatment", utility: utilityOn, cost_annual: costComparator },
103
+ { name: "Off-Treatment", utility: utilityOff, cost_annual: 0 },
104
+ ];
105
+ // Run intervention arm: use intervention states + intervention transition matrix.
106
+ // We pass intervention states in both arms' params; we only use the intervention
107
+ // arm result from this call.
108
+ const interventionRun = runMarkovModel({
109
+ ...baseParams,
110
+ states: statesIntervention,
111
+ });
112
+ // Run comparator arm: use comparator states + comparator transition matrix.
113
+ // We only use the comparator arm result from this call.
114
+ const comparatorRun = runMarkovModel({
115
+ ...baseParams,
116
+ states: statesComparator,
117
+ });
118
+ const intervention = interventionRun.intervention;
119
+ const comparator = comparatorRun.comparator;
120
+ const delta_cost = intervention.total_cost - comparator.total_cost;
121
+ const delta_qaly = intervention.total_qaly - comparator.total_qaly;
122
+ const icer = delta_qaly > 0
123
+ ? delta_cost / delta_qaly
124
+ : delta_qaly < 0
125
+ ? -Infinity
126
+ : Infinity;
127
+ return {
128
+ delta_cost,
129
+ delta_qaly,
130
+ icer,
131
+ intervention_cost: intervention.total_cost,
132
+ comparator_cost: comparator.total_cost,
133
+ intervention_qaly: intervention.total_qaly,
134
+ comparator_qaly: comparator.total_qaly,
135
+ intervention_lys: intervention.total_lys,
136
+ comparator_lys: comparator.total_lys,
137
+ };
138
+ }
139
+ //# sourceMappingURL=modelUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelUtils.js","sourceRoot":"","sources":["../../src/models/modelUtils.ts"],"names":[],"mappings":"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"}