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.
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/audit/builder.d.ts +8 -0
- package/dist/audit/builder.d.ts.map +1 -0
- package/dist/audit/builder.js +37 -0
- package/dist/audit/builder.js.map +1 -0
- package/dist/audit/types.d.ts +30 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +2 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/formatters/docx.d.ts +5 -0
- package/dist/formatters/docx.d.ts.map +1 -0
- package/dist/formatters/docx.js +207 -0
- package/dist/formatters/docx.js.map +1 -0
- package/dist/formatters/json.d.ts +4 -0
- package/dist/formatters/json.d.ts.map +1 -0
- package/dist/formatters/json.js +4 -0
- package/dist/formatters/json.js.map +1 -0
- package/dist/formatters/markdown.d.ts +5 -0
- package/dist/formatters/markdown.d.ts.map +1 -0
- package/dist/formatters/markdown.js +50 -0
- package/dist/formatters/markdown.js.map +1 -0
- package/dist/knowledge/index.d.ts +8 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +8 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/paths.d.ts +9 -0
- package/dist/knowledge/paths.d.ts.map +1 -0
- package/dist/knowledge/paths.js +35 -0
- package/dist/knowledge/paths.js.map +1 -0
- package/dist/knowledge/projectStore.d.ts +37 -0
- package/dist/knowledge/projectStore.d.ts.map +1 -0
- package/dist/knowledge/projectStore.js +112 -0
- package/dist/knowledge/projectStore.js.map +1 -0
- package/dist/knowledge/rawStore.d.ts +18 -0
- package/dist/knowledge/rawStore.d.ts.map +1 -0
- package/dist/knowledge/rawStore.js +103 -0
- package/dist/knowledge/rawStore.js.map +1 -0
- package/dist/knowledge/search.d.ts +19 -0
- package/dist/knowledge/search.d.ts.map +1 -0
- package/dist/knowledge/search.js +105 -0
- package/dist/knowledge/search.js.map +1 -0
- package/dist/knowledge/types.d.ts +6 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +2 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/wikiStore.d.ts +18 -0
- package/dist/knowledge/wikiStore.d.ts.map +1 -0
- package/dist/knowledge/wikiStore.js +77 -0
- package/dist/knowledge/wikiStore.js.map +1 -0
- package/dist/knowledge/yaml.d.ts +17 -0
- package/dist/knowledge/yaml.d.ts.map +1 -0
- package/dist/knowledge/yaml.js +131 -0
- package/dist/knowledge/yaml.js.map +1 -0
- package/dist/models/distributions.d.ts +28 -0
- package/dist/models/distributions.d.ts.map +1 -0
- package/dist/models/distributions.js +99 -0
- package/dist/models/distributions.js.map +1 -0
- package/dist/models/index.d.ts +11 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +7 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/markov.d.ts +42 -0
- package/dist/models/markov.d.ts.map +1 -0
- package/dist/models/markov.js +82 -0
- package/dist/models/markov.js.map +1 -0
- package/dist/models/modelUtils.d.ts +29 -0
- package/dist/models/modelUtils.d.ts.map +1 -0
- package/dist/models/modelUtils.js +139 -0
- package/dist/models/modelUtils.js.map +1 -0
- package/dist/models/owsa.d.ts +31 -0
- package/dist/models/owsa.d.ts.map +1 -0
- package/dist/models/owsa.js +103 -0
- package/dist/models/owsa.js.map +1 -0
- package/dist/models/partsa.d.ts +40 -0
- package/dist/models/partsa.d.ts.map +1 -0
- package/dist/models/partsa.js +65 -0
- package/dist/models/partsa.js.map +1 -0
- package/dist/models/psa.d.ts +33 -0
- package/dist/models/psa.d.ts.map +1 -0
- package/dist/models/psa.js +118 -0
- package/dist/models/psa.js.map +1 -0
- package/dist/providers/direct/aifa.d.ts +3 -0
- package/dist/providers/direct/aifa.d.ts.map +1 -0
- package/dist/providers/direct/aifa.js +30 -0
- package/dist/providers/direct/aifa.js.map +1 -0
- package/dist/providers/direct/allOfUs.d.ts +3 -0
- package/dist/providers/direct/allOfUs.d.ts.map +1 -0
- package/dist/providers/direct/allOfUs.js +37 -0
- package/dist/providers/direct/allOfUs.js.map +1 -0
- package/dist/providers/direct/anvisa.d.ts +3 -0
- package/dist/providers/direct/anvisa.d.ts.map +1 -0
- package/dist/providers/direct/anvisa.js +25 -0
- package/dist/providers/direct/anvisa.js.map +1 -0
- package/dist/providers/direct/biorxiv.d.ts +3 -0
- package/dist/providers/direct/biorxiv.d.ts.map +1 -0
- package/dist/providers/direct/biorxiv.js +33 -0
- package/dist/providers/direct/biorxiv.js.map +1 -0
- package/dist/providers/direct/bnf.d.ts +3 -0
- package/dist/providers/direct/bnf.d.ts.map +1 -0
- package/dist/providers/direct/bnf.js +30 -0
- package/dist/providers/direct/bnf.js.map +1 -0
- package/dist/providers/direct/cadthReviews.d.ts +3 -0
- package/dist/providers/direct/cadthReviews.d.ts.map +1 -0
- package/dist/providers/direct/cadthReviews.js +30 -0
- package/dist/providers/direct/cadthReviews.js.map +1 -0
- package/dist/providers/direct/chembl.d.ts +3 -0
- package/dist/providers/direct/chembl.d.ts.map +1 -0
- package/dist/providers/direct/chembl.js +24 -0
- package/dist/providers/direct/chembl.js.map +1 -0
- package/dist/providers/direct/citeline.d.ts +3 -0
- package/dist/providers/direct/citeline.d.ts.map +1 -0
- package/dist/providers/direct/citeline.js +50 -0
- package/dist/providers/direct/citeline.js.map +1 -0
- package/dist/providers/direct/clinicalTrials.d.ts +3 -0
- package/dist/providers/direct/clinicalTrials.d.ts.map +1 -0
- package/dist/providers/direct/clinicalTrials.js +29 -0
- package/dist/providers/direct/clinicalTrials.js.map +1 -0
- package/dist/providers/direct/cmsNadac.d.ts +3 -0
- package/dist/providers/direct/cmsNadac.d.ts.map +1 -0
- package/dist/providers/direct/cmsNadac.js +52 -0
- package/dist/providers/direct/cmsNadac.js.map +1 -0
- package/dist/providers/direct/cochrane.d.ts +3 -0
- package/dist/providers/direct/cochrane.d.ts.map +1 -0
- package/dist/providers/direct/cochrane.js +46 -0
- package/dist/providers/direct/cochrane.js.map +1 -0
- package/dist/providers/direct/conitec.d.ts +3 -0
- package/dist/providers/direct/conitec.d.ts.map +1 -0
- package/dist/providers/direct/conitec.js +25 -0
- package/dist/providers/direct/conitec.js.map +1 -0
- package/dist/providers/direct/cortellis.d.ts +3 -0
- package/dist/providers/direct/cortellis.d.ts.map +1 -0
- package/dist/providers/direct/cortellis.js +52 -0
- package/dist/providers/direct/cortellis.js.map +1 -0
- package/dist/providers/direct/datasus.d.ts +3 -0
- package/dist/providers/direct/datasus.d.ts.map +1 -0
- package/dist/providers/direct/datasus.js +30 -0
- package/dist/providers/direct/datasus.js.map +1 -0
- package/dist/providers/direct/embase.d.ts +3 -0
- package/dist/providers/direct/embase.d.ts.map +1 -0
- package/dist/providers/direct/embase.js +54 -0
- package/dist/providers/direct/embase.js.map +1 -0
- package/dist/providers/direct/fonasa.d.ts +3 -0
- package/dist/providers/direct/fonasa.d.ts.map +1 -0
- package/dist/providers/direct/fonasa.js +25 -0
- package/dist/providers/direct/fonasa.js.map +1 -0
- package/dist/providers/direct/gbaDecisions.d.ts +3 -0
- package/dist/providers/direct/gbaDecisions.d.ts.map +1 -0
- package/dist/providers/direct/gbaDecisions.js +30 -0
- package/dist/providers/direct/gbaDecisions.js.map +1 -0
- package/dist/providers/direct/googleScholar.d.ts +3 -0
- package/dist/providers/direct/googleScholar.d.ts.map +1 -0
- package/dist/providers/direct/googleScholar.js +39 -0
- package/dist/providers/direct/googleScholar.js.map +1 -0
- package/dist/providers/direct/hasTc.d.ts +3 -0
- package/dist/providers/direct/hasTc.d.ts.map +1 -0
- package/dist/providers/direct/hasTc.js +30 -0
- package/dist/providers/direct/hasTc.js.map +1 -0
- package/dist/providers/direct/hitap.d.ts +3 -0
- package/dist/providers/direct/hitap.d.ts.map +1 -0
- package/dist/providers/direct/hitap.js +30 -0
- package/dist/providers/direct/hitap.js.map +1 -0
- package/dist/providers/direct/icerReports.d.ts +3 -0
- package/dist/providers/direct/icerReports.d.ts.map +1 -0
- package/dist/providers/direct/icerReports.js +30 -0
- package/dist/providers/direct/icerReports.js.map +1 -0
- package/dist/providers/direct/iets.d.ts +3 -0
- package/dist/providers/direct/iets.d.ts.map +1 -0
- package/dist/providers/direct/iets.js +25 -0
- package/dist/providers/direct/iets.js.map +1 -0
- package/dist/providers/direct/ihmeGbd.d.ts +3 -0
- package/dist/providers/direct/ihmeGbd.d.ts.map +1 -0
- package/dist/providers/direct/ihmeGbd.js +74 -0
- package/dist/providers/direct/ihmeGbd.js.map +1 -0
- package/dist/providers/direct/index.d.ts +7 -0
- package/dist/providers/direct/index.d.ts.map +1 -0
- package/dist/providers/direct/index.js +186 -0
- package/dist/providers/direct/index.js.map +1 -0
- package/dist/providers/direct/inesss.d.ts +3 -0
- package/dist/providers/direct/inesss.d.ts.map +1 -0
- package/dist/providers/direct/inesss.js +30 -0
- package/dist/providers/direct/inesss.js.map +1 -0
- package/dist/providers/direct/iqwig.d.ts +3 -0
- package/dist/providers/direct/iqwig.d.ts.map +1 -0
- package/dist/providers/direct/iqwig.js +30 -0
- package/dist/providers/direct/iqwig.js.map +1 -0
- package/dist/providers/direct/ispor.d.ts +3 -0
- package/dist/providers/direct/ispor.d.ts.map +1 -0
- package/dist/providers/direct/ispor.js +35 -0
- package/dist/providers/direct/ispor.js.map +1 -0
- package/dist/providers/direct/nhsCosts.d.ts +3 -0
- package/dist/providers/direct/nhsCosts.d.ts.map +1 -0
- package/dist/providers/direct/nhsCosts.js +32 -0
- package/dist/providers/direct/nhsCosts.js.map +1 -0
- package/dist/providers/direct/niceTa.d.ts +3 -0
- package/dist/providers/direct/niceTa.d.ts.map +1 -0
- package/dist/providers/direct/niceTa.js +30 -0
- package/dist/providers/direct/niceTa.js.map +1 -0
- package/dist/providers/direct/oecd.d.ts +3 -0
- package/dist/providers/direct/oecd.d.ts.map +1 -0
- package/dist/providers/direct/oecd.js +102 -0
- package/dist/providers/direct/oecd.js.map +1 -0
- package/dist/providers/direct/orangeBook.d.ts +3 -0
- package/dist/providers/direct/orangeBook.d.ts.map +1 -0
- package/dist/providers/direct/orangeBook.js +48 -0
- package/dist/providers/direct/orangeBook.js.map +1 -0
- package/dist/providers/direct/paho.d.ts +3 -0
- package/dist/providers/direct/paho.d.ts.map +1 -0
- package/dist/providers/direct/paho.js +30 -0
- package/dist/providers/direct/paho.js.map +1 -0
- package/dist/providers/direct/pbacPsd.d.ts +3 -0
- package/dist/providers/direct/pbacPsd.d.ts.map +1 -0
- package/dist/providers/direct/pbacPsd.js +30 -0
- package/dist/providers/direct/pbacPsd.js.map +1 -0
- package/dist/providers/direct/pbsSchedule.d.ts +3 -0
- package/dist/providers/direct/pbsSchedule.d.ts.map +1 -0
- package/dist/providers/direct/pbsSchedule.js +37 -0
- package/dist/providers/direct/pbsSchedule.js.map +1 -0
- package/dist/providers/direct/pharmapendium.d.ts +3 -0
- package/dist/providers/direct/pharmapendium.d.ts.map +1 -0
- package/dist/providers/direct/pharmapendium.js +39 -0
- package/dist/providers/direct/pharmapendium.js.map +1 -0
- package/dist/providers/direct/proxyClient.d.ts +15 -0
- package/dist/providers/direct/proxyClient.d.ts.map +1 -0
- package/dist/providers/direct/proxyClient.js +76 -0
- package/dist/providers/direct/proxyClient.js.map +1 -0
- package/dist/providers/direct/pssru.d.ts +3 -0
- package/dist/providers/direct/pssru.d.ts.map +1 -0
- package/dist/providers/direct/pssru.js +33 -0
- package/dist/providers/direct/pssru.js.map +1 -0
- package/dist/providers/direct/pubmed.d.ts +3 -0
- package/dist/providers/direct/pubmed.d.ts.map +1 -0
- package/dist/providers/direct/pubmed.js +73 -0
- package/dist/providers/direct/pubmed.js.map +1 -0
- package/dist/providers/direct/purpleBook.d.ts +3 -0
- package/dist/providers/direct/purpleBook.d.ts.map +1 -0
- package/dist/providers/direct/purpleBook.js +52 -0
- package/dist/providers/direct/purpleBook.js.map +1 -0
- package/dist/providers/direct/tlv.d.ts +3 -0
- package/dist/providers/direct/tlv.d.ts.map +1 -0
- package/dist/providers/direct/tlv.js +30 -0
- package/dist/providers/direct/tlv.js.map +1 -0
- package/dist/providers/direct/whoGho.d.ts +3 -0
- package/dist/providers/direct/whoGho.d.ts.map +1 -0
- package/dist/providers/direct/whoGho.js +51 -0
- package/dist/providers/direct/whoGho.js.map +1 -0
- package/dist/providers/direct/worldBank.d.ts +3 -0
- package/dist/providers/direct/worldBank.d.ts.map +1 -0
- package/dist/providers/direct/worldBank.js +54 -0
- package/dist/providers/direct/worldBank.js.map +1 -0
- package/dist/providers/factory.d.ts +3 -0
- package/dist/providers/factory.d.ts.map +1 -0
- package/dist/providers/factory.js +8 -0
- package/dist/providers/factory.js.map +1 -0
- package/dist/providers/hosted/index.d.ts +9 -0
- package/dist/providers/hosted/index.d.ts.map +1 -0
- package/dist/providers/hosted/index.js +16 -0
- package/dist/providers/hosted/index.js.map +1 -0
- package/dist/providers/types.d.ts +176 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +80 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/costEffectivenessModel.d.ts +98 -0
- package/dist/tools/costEffectivenessModel.d.ts.map +1 -0
- package/dist/tools/costEffectivenessModel.js +404 -0
- package/dist/tools/costEffectivenessModel.js.map +1 -0
- package/dist/tools/htaDossierPrep.d.ts +69 -0
- package/dist/tools/htaDossierPrep.d.ts.map +1 -0
- package/dist/tools/htaDossierPrep.js +399 -0
- package/dist/tools/htaDossierPrep.js.map +1 -0
- package/dist/tools/knowledgeRead.d.ts +21 -0
- package/dist/tools/knowledgeRead.d.ts.map +1 -0
- package/dist/tools/knowledgeRead.js +38 -0
- package/dist/tools/knowledgeRead.js.map +1 -0
- package/dist/tools/knowledgeSearch.d.ts +37 -0
- package/dist/tools/knowledgeSearch.d.ts.map +1 -0
- package/dist/tools/knowledgeSearch.js +51 -0
- package/dist/tools/knowledgeSearch.js.map +1 -0
- package/dist/tools/knowledgeWrite.d.ts +25 -0
- package/dist/tools/knowledgeWrite.d.ts.map +1 -0
- package/dist/tools/knowledgeWrite.js +40 -0
- package/dist/tools/knowledgeWrite.js.map +1 -0
- package/dist/tools/literatureSearch.d.ts +42 -0
- package/dist/tools/literatureSearch.d.ts.map +1 -0
- package/dist/tools/literatureSearch.js +142 -0
- package/dist/tools/literatureSearch.js.map +1 -0
- package/dist/tools/metabolicProfile.d.ts +19 -0
- package/dist/tools/metabolicProfile.d.ts.map +1 -0
- package/dist/tools/metabolicProfile.js +150 -0
- package/dist/tools/metabolicProfile.js.map +1 -0
- package/dist/tools/projectCreate.d.ts +37 -0
- package/dist/tools/projectCreate.d.ts.map +1 -0
- package/dist/tools/projectCreate.js +61 -0
- package/dist/tools/projectCreate.js.map +1 -0
- package/package.json +71 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 mnaumov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# HEORAgent MCP Server
|
|
2
|
+
|
|
3
|
+
An AI-powered Health Economics and Outcomes Research (HEOR) agent for Claude.ai — automates literature review, cost-effectiveness modelling, and HTA dossier preparation.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
Add to your Claude.ai MCP configuration:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"heor-agent": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": ["heor-agent-mcp"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Or run locally:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install heor-agent-mcp
|
|
24
|
+
npx heor-agent-mcp
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Tools
|
|
28
|
+
|
|
29
|
+
### literature_search
|
|
30
|
+
|
|
31
|
+
Search PubMed, ClinicalTrials.gov, bioRxiv/medRxiv, and ChEMBL simultaneously.
|
|
32
|
+
Returns structured results with a full PRISMA-style audit trail.
|
|
33
|
+
|
|
34
|
+
**Required**: `query` (string)
|
|
35
|
+
**Optional**: `sources` (array), `max_results` (1–100), `date_from` (YYYY-MM-DD), `output_format` (text|json|docx)
|
|
36
|
+
|
|
37
|
+
**Example prompt**: "Find RCT evidence on semaglutide for type 2 diabetes from the last 3 years"
|
|
38
|
+
|
|
39
|
+
### cost_effectiveness_model
|
|
40
|
+
|
|
41
|
+
State-of-the-art cost-utility analysis: multi-state Markov model, probabilistic sensitivity
|
|
42
|
+
analysis (PSA, Monte Carlo), one-way sensitivity analysis (tornado diagram), cost-effectiveness
|
|
43
|
+
acceptability curve (CEAC), and Expected Value of Perfect Information (EVPI).
|
|
44
|
+
|
|
45
|
+
Follows ISPOR good practice guidelines and NICE reference case (3.5% discount rate).
|
|
46
|
+
|
|
47
|
+
**Required**: `intervention`, `comparator`, `indication`, `time_horizon`, `perspective`, `clinical_inputs`, `cost_inputs`
|
|
48
|
+
**Optional**: `model_type` (markov|partsa|decision_tree), `utility_inputs`, `run_psa`, `psa_iterations`, `run_owsa`
|
|
49
|
+
|
|
50
|
+
**Supported HTA perspectives**:
|
|
51
|
+
- `nhs` — NICE threshold £20–30K/QALY
|
|
52
|
+
- `us_payer` — ICER threshold $100–150K/QALY
|
|
53
|
+
- `societal` — Societal perspective $50–100K/QALY
|
|
54
|
+
|
|
55
|
+
For oncology: set `model_type="partsa"` to use Partitioned Survival Analysis (NICE TSD 14).
|
|
56
|
+
|
|
57
|
+
**Example prompt**: "Model cost-effectiveness of semaglutide vs sitagliptin for T2D, NHS perspective, lifetime horizon"
|
|
58
|
+
|
|
59
|
+
### hta_dossier_prep
|
|
60
|
+
|
|
61
|
+
Structure evidence into submission-ready HTA dossier sections with gap analysis.
|
|
62
|
+
Accepts output from `literature_search` and `cost_effectiveness_model` directly.
|
|
63
|
+
|
|
64
|
+
**Required**: `hta_body` (nice|ema|fda|iqwig|has), `submission_type` (sta|mta|early_access), `drug_name`, `indication`
|
|
65
|
+
**Optional**: `evidence_summary` (text or JSON from literature_search), `model_results` (from cost_effectiveness_model)
|
|
66
|
+
|
|
67
|
+
**Supported bodies**: NICE (UK), EMA (EU), FDA (US), IQWiG (Germany), HAS (France)
|
|
68
|
+
|
|
69
|
+
**Example prompt**: "Prepare a NICE STA outline for semaglutide in type 2 diabetes using [literature search output]"
|
|
70
|
+
|
|
71
|
+
## Audit Trail
|
|
72
|
+
|
|
73
|
+
Every tool call returns a full audit record:
|
|
74
|
+
- Sources queried, queries sent, response counts
|
|
75
|
+
- Inclusion/exclusion counts with reasons
|
|
76
|
+
- Methodology notes and assumptions
|
|
77
|
+
- Warnings and data quality flags
|
|
78
|
+
|
|
79
|
+
Suitable for inclusion in HTA submission appendices.
|
|
80
|
+
|
|
81
|
+
## Data Sources (Phase 1 — DirectProvider)
|
|
82
|
+
|
|
83
|
+
Currently integrated (free, direct API access):
|
|
84
|
+
- **PubMed** — 35M+ biomedical citations (NCBI E-utilities)
|
|
85
|
+
- **ClinicalTrials.gov** — FDA-regulated clinical studies (CT.gov v2 API)
|
|
86
|
+
- **bioRxiv / medRxiv** — Life sciences and medical preprints
|
|
87
|
+
- **ChEMBL** — Drug bioactivity, mechanisms, ADMET (EMBL-EBI)
|
|
88
|
+
|
|
89
|
+
## Data Sources (Roadmap)
|
|
90
|
+
|
|
91
|
+
### Phase 2 — Open/Free APIs
|
|
92
|
+
- WHO Global Health Observatory — Global epidemiology and health indicators
|
|
93
|
+
- World Bank Data — Demographics, macroeconomics
|
|
94
|
+
- OECD Health Data — Costs, utilization, health statistics (OECD)
|
|
95
|
+
- IHME / Global Burden of Disease — Global disease burden estimates
|
|
96
|
+
- ISPOR Presentations Database — HEOR studies and conference posters
|
|
97
|
+
|
|
98
|
+
### Phase 2 — HTA Guidance & Pricing (Open)
|
|
99
|
+
- NICE (UK): Methods Guide, Technology Appraisals, PSSRU Unit Costs, NHS Reference Costs, BNF
|
|
100
|
+
- ICER (US): Value Assessment Framework, CMS Data
|
|
101
|
+
- CADTH (Canada): Guidelines and Reviews, INESSS
|
|
102
|
+
- PBAC (Australia): Guidelines, PSD, PBS/MBS Schedule
|
|
103
|
+
- HAS (France): Guidelines, Transparency Committee, CEPS
|
|
104
|
+
- IQWiG/G-BA (Germany): Methods Guide, Appraisal Decisions
|
|
105
|
+
- AIFA (Italy), AEMPS/IPT (Spain), TLV (Sweden), MHLW (Japan)
|
|
106
|
+
- CONITEC/ANVISA (Brazil), IETS (Colombia), FONASA (Chile), HITAP (Thailand)
|
|
107
|
+
- HIRA/NHIS (South Korea), WHO GHO, OECD Health, World Bank
|
|
108
|
+
|
|
109
|
+
### Phase 2 — Restricted (with credentials)
|
|
110
|
+
- CPRD (UK primary care), NHS HES (UK hospital episodes), SNDS (France national claims)
|
|
111
|
+
- German SHI/AOK/WIdO, Nordic Registries, Japan NDB, NHIRD (Taiwan)
|
|
112
|
+
- NHSO (Thailand), PhilHealth (Philippines)
|
|
113
|
+
|
|
114
|
+
### Phase 3 — Commercial (enterprise tier)
|
|
115
|
+
- IQVIA MIDAS/RWD, Optum Clinformatics, Flatiron Health (oncology EHR)
|
|
116
|
+
- Premier Healthcare Database, Komodo Health, Oracle Health RWD
|
|
117
|
+
- IBM Micromedex Red Book (drug pricing), SSR Health (net pricing/rebates)
|
|
118
|
+
|
|
119
|
+
## Local RWE Datasets (Phase 2)
|
|
120
|
+
|
|
121
|
+
Point to local files in `/Users/mnaumov/Projects/Health_Statistics`:
|
|
122
|
+
- NAMCS — National Ambulatory Medical Care Survey (US)
|
|
123
|
+
- NHAMCS — National Hospital Ambulatory Medical Care Survey (US)
|
|
124
|
+
- MEPS — Medical Expenditure Panel Survey (US)
|
|
125
|
+
- DATASUS — Brazilian health system data (hospital + epidemiology)
|
|
126
|
+
|
|
127
|
+
## Tiers
|
|
128
|
+
|
|
129
|
+
- **DirectProvider** (default) — Free. Uses your Anthropic API key. All tools, text + JSON output.
|
|
130
|
+
- **HostedProvider** — Set `HEOR_API_KEY` env var. Phase 2: DOCX/PDF reports, Redis caching.
|
|
131
|
+
|
|
132
|
+
## Configuration
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
HEOR_API_KEY # Set to enable HostedProvider (Phase 2). Omit for DirectProvider (Phase 1).
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Development
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npm install
|
|
142
|
+
npm test # 74 tests
|
|
143
|
+
npm run build # Compiles to dist/
|
|
144
|
+
npm run dev # Run with tsx (no build step)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Node.js >= 20 required.
|
|
148
|
+
|
|
149
|
+
## Disclaimer
|
|
150
|
+
|
|
151
|
+
All outputs are preliminary and for research orientation only. Results require validation by a
|
|
152
|
+
qualified health economist before use in any HTA submission, payer negotiation, or clinical decision.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AuditRecord, SourceAudit, ExclusionRecord } from "./types.js";
|
|
2
|
+
export declare function createAuditRecord(tool: string, query: Record<string, unknown>, output_format: string, methodology?: string): AuditRecord;
|
|
3
|
+
export declare function addSource(record: AuditRecord, source: SourceAudit): AuditRecord;
|
|
4
|
+
export declare function addExclusion(record: AuditRecord, exclusion: ExclusionRecord): AuditRecord;
|
|
5
|
+
export declare function addAssumption(record: AuditRecord, assumption: string): AuditRecord;
|
|
6
|
+
export declare function addWarning(record: AuditRecord, warning: string): AuditRecord;
|
|
7
|
+
export declare function setMethodology(record: AuditRecord, methodology: string): AuditRecord;
|
|
8
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,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,CAab;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAM/E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,GAAG,WAAW,CAKzF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAElF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAE5E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAEpF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function createAuditRecord(tool, query, output_format, methodology = "") {
|
|
2
|
+
return {
|
|
3
|
+
tool,
|
|
4
|
+
timestamp: new Date().toISOString(),
|
|
5
|
+
query,
|
|
6
|
+
sources_queried: [],
|
|
7
|
+
methodology,
|
|
8
|
+
inclusions: 0,
|
|
9
|
+
exclusions: [],
|
|
10
|
+
assumptions: [],
|
|
11
|
+
warnings: [],
|
|
12
|
+
output_format,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function addSource(record, source) {
|
|
16
|
+
return {
|
|
17
|
+
...record,
|
|
18
|
+
sources_queried: [...record.sources_queried, source],
|
|
19
|
+
inclusions: record.inclusions + source.results_included,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function addExclusion(record, exclusion) {
|
|
23
|
+
return {
|
|
24
|
+
...record,
|
|
25
|
+
exclusions: [...record.exclusions, exclusion],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function addAssumption(record, assumption) {
|
|
29
|
+
return { ...record, assumptions: [...record.assumptions, assumption] };
|
|
30
|
+
}
|
|
31
|
+
export function addWarning(record, warning) {
|
|
32
|
+
return { ...record, warnings: [...record.warnings, warning] };
|
|
33
|
+
}
|
|
34
|
+
export function setMethodology(record, methodology) {
|
|
35
|
+
return { ...record, methodology };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAEA,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;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAmB,EAAE,MAAmB;IAChE,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,CAAC,MAAmB,EAAE,SAA0B;IAC1E,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,UAAkB;IACnE,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,CAAC,MAAmB,EAAE,WAAmB;IACrE,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface SourceAudit {
|
|
2
|
+
source: string;
|
|
3
|
+
query_sent: string;
|
|
4
|
+
results_returned: number;
|
|
5
|
+
results_included: number;
|
|
6
|
+
latency_ms: number;
|
|
7
|
+
status: "ok" | "partial" | "failed";
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ExclusionRecord {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AuditRecord {
|
|
16
|
+
tool: string;
|
|
17
|
+
/** ISO 8601 timestamp when the tool invocation began (query start time, not completion time) */
|
|
18
|
+
timestamp: string;
|
|
19
|
+
query: Record<string, unknown>;
|
|
20
|
+
sources_queried: SourceAudit[];
|
|
21
|
+
methodology: string;
|
|
22
|
+
/** Running total of results included across all sources — incremented by addSource() */
|
|
23
|
+
inclusions: number;
|
|
24
|
+
/** Individual exclusion records with reasons — use .length for count. Exclusions track WHY items were dropped; inclusions are just counted since the results array IS the included set */
|
|
25
|
+
exclusions: ExclusionRecord[];
|
|
26
|
+
assumptions: string[];
|
|
27
|
+
warnings: string[];
|
|
28
|
+
output_format: string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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,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,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;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LiteratureResult } from "../providers/types.js";
|
|
2
|
+
import type { AuditRecord } from "../audit/types.js";
|
|
3
|
+
export declare function resultsToDocx(results: LiteratureResult[], audit: AuditRecord): Promise<string>;
|
|
4
|
+
export declare function contentToDocx(title: string, markdownContent: string, audit: AuditRecord): Promise<string>;
|
|
5
|
+
//# sourceMappingURL=docx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx.d.ts","sourceRoot":"","sources":["../../src/formatters/docx.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAsB,aAAa,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAqHjB;AA+BD,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAqEjB"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Document, Paragraph, TextRun, HeadingLevel, Table, TableRow, TableCell, WidthType, AlignmentType, Packer, } from "docx";
|
|
2
|
+
export async function resultsToDocx(results, audit) {
|
|
3
|
+
const doc = new Document({
|
|
4
|
+
sections: [{
|
|
5
|
+
properties: {},
|
|
6
|
+
children: [
|
|
7
|
+
// Title
|
|
8
|
+
new Paragraph({
|
|
9
|
+
children: [new TextRun({ text: "Literature Search Report", bold: true, size: 48 })],
|
|
10
|
+
heading: HeadingLevel.TITLE,
|
|
11
|
+
alignment: AlignmentType.CENTER,
|
|
12
|
+
spacing: { after: 400 },
|
|
13
|
+
}),
|
|
14
|
+
// Metadata
|
|
15
|
+
new Paragraph({
|
|
16
|
+
children: [new TextRun({ text: `Generated: ${audit.timestamp} | Tool: ${audit.tool}`, italics: true, size: 20, color: "666666" })],
|
|
17
|
+
alignment: AlignmentType.CENTER,
|
|
18
|
+
spacing: { after: 600 },
|
|
19
|
+
}),
|
|
20
|
+
// Methodology
|
|
21
|
+
new Paragraph({
|
|
22
|
+
children: [new TextRun({ text: "Methodology", bold: true, size: 28 })],
|
|
23
|
+
heading: HeadingLevel.HEADING_1,
|
|
24
|
+
}),
|
|
25
|
+
new Paragraph({
|
|
26
|
+
children: [new TextRun({ text: audit.methodology || "Not specified", size: 22 })],
|
|
27
|
+
spacing: { after: 200 },
|
|
28
|
+
}),
|
|
29
|
+
// Summary stats
|
|
30
|
+
new Paragraph({
|
|
31
|
+
children: [new TextRun({ text: "Summary", bold: true, size: 28 })],
|
|
32
|
+
heading: HeadingLevel.HEADING_1,
|
|
33
|
+
}),
|
|
34
|
+
new Paragraph({
|
|
35
|
+
children: [new TextRun({ text: `Total results included: ${audit.inclusions}`, size: 22 })],
|
|
36
|
+
}),
|
|
37
|
+
new Paragraph({
|
|
38
|
+
children: [new TextRun({ text: `Sources queried: ${audit.sources_queried.length}`, size: 22 })],
|
|
39
|
+
spacing: { after: 300 },
|
|
40
|
+
}),
|
|
41
|
+
// Results heading
|
|
42
|
+
new Paragraph({
|
|
43
|
+
children: [new TextRun({ text: "Results", bold: true, size: 28 })],
|
|
44
|
+
heading: HeadingLevel.HEADING_1,
|
|
45
|
+
}),
|
|
46
|
+
// Each result
|
|
47
|
+
...results.flatMap((r, i) => [
|
|
48
|
+
new Paragraph({
|
|
49
|
+
children: [new TextRun({ text: `${i + 1}. ${r.title}`, bold: true, size: 24 })],
|
|
50
|
+
heading: HeadingLevel.HEADING_2,
|
|
51
|
+
}),
|
|
52
|
+
new Paragraph({
|
|
53
|
+
children: [
|
|
54
|
+
new TextRun({ text: `Source: `, bold: true, size: 20 }),
|
|
55
|
+
new TextRun({ text: `${r.source} | `, size: 20 }),
|
|
56
|
+
new TextRun({ text: `Date: `, bold: true, size: 20 }),
|
|
57
|
+
new TextRun({ text: `${r.date} | `, size: 20 }),
|
|
58
|
+
new TextRun({ text: `Type: `, bold: true, size: 20 }),
|
|
59
|
+
new TextRun({ text: r.study_type, size: 20 }),
|
|
60
|
+
],
|
|
61
|
+
}),
|
|
62
|
+
...(r.authors.length > 0 ? [new Paragraph({
|
|
63
|
+
children: [
|
|
64
|
+
new TextRun({ text: "Authors: ", bold: true, size: 20 }),
|
|
65
|
+
new TextRun({ text: r.authors.join(", "), size: 20 }),
|
|
66
|
+
],
|
|
67
|
+
})] : []),
|
|
68
|
+
...(r.abstract ? [new Paragraph({
|
|
69
|
+
children: [new TextRun({ text: r.abstract.slice(0, 500), size: 20 })],
|
|
70
|
+
spacing: { before: 100 },
|
|
71
|
+
})] : []),
|
|
72
|
+
new Paragraph({
|
|
73
|
+
children: [new TextRun({ text: r.url, size: 18, color: "0563C1" })],
|
|
74
|
+
spacing: { after: 200 },
|
|
75
|
+
}),
|
|
76
|
+
]),
|
|
77
|
+
// Audit section
|
|
78
|
+
new Paragraph({
|
|
79
|
+
children: [new TextRun({ text: "Audit Trail", bold: true, size: 28 })],
|
|
80
|
+
heading: HeadingLevel.HEADING_1,
|
|
81
|
+
spacing: { before: 400 },
|
|
82
|
+
}),
|
|
83
|
+
// Sources table
|
|
84
|
+
buildSourcesTable(audit),
|
|
85
|
+
// Assumptions
|
|
86
|
+
...(audit.assumptions.length > 0 ? [
|
|
87
|
+
new Paragraph({
|
|
88
|
+
children: [new TextRun({ text: "Assumptions", bold: true, size: 24 })],
|
|
89
|
+
heading: HeadingLevel.HEADING_2,
|
|
90
|
+
}),
|
|
91
|
+
...audit.assumptions.map(a => new Paragraph({
|
|
92
|
+
children: [new TextRun({ text: `• ${a}`, size: 20 })],
|
|
93
|
+
})),
|
|
94
|
+
] : []),
|
|
95
|
+
// Warnings
|
|
96
|
+
...(audit.warnings.length > 0 ? [
|
|
97
|
+
new Paragraph({
|
|
98
|
+
children: [new TextRun({ text: "Warnings", bold: true, size: 24 })],
|
|
99
|
+
heading: HeadingLevel.HEADING_2,
|
|
100
|
+
}),
|
|
101
|
+
...audit.warnings.map(w => new Paragraph({
|
|
102
|
+
children: [new TextRun({ text: `Warning: ${w}`, size: 20, color: "CC6600" })],
|
|
103
|
+
})),
|
|
104
|
+
] : []),
|
|
105
|
+
// Disclaimer
|
|
106
|
+
new Paragraph({
|
|
107
|
+
children: [new TextRun({
|
|
108
|
+
text: "Disclaimer: This is a preliminary report for orientation purposes only. Results require validation by a qualified health economist before use in any HTA submission or payer negotiation.",
|
|
109
|
+
italics: true, size: 18, color: "999999",
|
|
110
|
+
})],
|
|
111
|
+
spacing: { before: 600 },
|
|
112
|
+
}),
|
|
113
|
+
],
|
|
114
|
+
}],
|
|
115
|
+
});
|
|
116
|
+
const buffer = await Packer.toBuffer(doc);
|
|
117
|
+
return buffer.toString("base64");
|
|
118
|
+
}
|
|
119
|
+
function buildSourcesTable(audit) {
|
|
120
|
+
const headerRow = new TableRow({
|
|
121
|
+
children: ["Source", "Query", "Returned", "Included", "Status"].map(text => new TableCell({
|
|
122
|
+
children: [new Paragraph({ children: [new TextRun({ text, bold: true, size: 20 })] })],
|
|
123
|
+
width: { size: 20, type: WidthType.PERCENTAGE },
|
|
124
|
+
})),
|
|
125
|
+
tableHeader: true,
|
|
126
|
+
});
|
|
127
|
+
const dataRows = audit.sources_queried.map(s => new TableRow({
|
|
128
|
+
children: [s.source, s.query_sent, String(s.results_returned), String(s.results_included), s.status].map(text => new TableCell({
|
|
129
|
+
children: [new Paragraph({ children: [new TextRun({ text, size: 20 })] })],
|
|
130
|
+
width: { size: 20, type: WidthType.PERCENTAGE },
|
|
131
|
+
})),
|
|
132
|
+
}));
|
|
133
|
+
return new Table({
|
|
134
|
+
rows: [headerRow, ...dataRows],
|
|
135
|
+
width: { size: 100, type: WidthType.PERCENTAGE },
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// Generic content-to-docx for CE model and dossier outputs
|
|
139
|
+
export async function contentToDocx(title, markdownContent, audit) {
|
|
140
|
+
// Parse markdown sections into document paragraphs
|
|
141
|
+
const contentParagraphs = markdownContent.split("\n").map(line => {
|
|
142
|
+
if (line.startsWith("## ")) {
|
|
143
|
+
return new Paragraph({
|
|
144
|
+
children: [new TextRun({ text: line.replace(/^## /, ""), bold: true, size: 28 })],
|
|
145
|
+
heading: HeadingLevel.HEADING_1,
|
|
146
|
+
spacing: { before: 300 },
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
if (line.startsWith("### ")) {
|
|
150
|
+
return new Paragraph({
|
|
151
|
+
children: [new TextRun({ text: line.replace(/^### /, ""), bold: true, size: 24 })],
|
|
152
|
+
heading: HeadingLevel.HEADING_2,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (line.startsWith("**") && line.endsWith("**")) {
|
|
156
|
+
return new Paragraph({
|
|
157
|
+
children: [new TextRun({ text: line.replace(/\*\*/g, ""), bold: true, size: 22 })],
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (line.startsWith("- ")) {
|
|
161
|
+
return new Paragraph({
|
|
162
|
+
children: [new TextRun({ text: line.replace(/^- /, "• "), size: 20 })],
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (line.startsWith("| ")) {
|
|
166
|
+
// Table rows — render as plain text (tables handled separately)
|
|
167
|
+
return new Paragraph({
|
|
168
|
+
children: [new TextRun({ text: line, size: 18, font: "Courier New" })],
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
if (line.trim() === "" || line.startsWith("---")) {
|
|
172
|
+
return new Paragraph({ children: [] });
|
|
173
|
+
}
|
|
174
|
+
return new Paragraph({
|
|
175
|
+
children: [new TextRun({ text: line.replace(/\*\*/g, ""), size: 22 })],
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
const doc = new Document({
|
|
179
|
+
sections: [{
|
|
180
|
+
properties: {},
|
|
181
|
+
children: [
|
|
182
|
+
new Paragraph({
|
|
183
|
+
children: [new TextRun({ text: title, bold: true, size: 48 })],
|
|
184
|
+
heading: HeadingLevel.TITLE,
|
|
185
|
+
alignment: AlignmentType.CENTER,
|
|
186
|
+
spacing: { after: 400 },
|
|
187
|
+
}),
|
|
188
|
+
new Paragraph({
|
|
189
|
+
children: [new TextRun({ text: `Generated: ${audit.timestamp}`, italics: true, size: 20, color: "666666" })],
|
|
190
|
+
alignment: AlignmentType.CENTER,
|
|
191
|
+
spacing: { after: 600 },
|
|
192
|
+
}),
|
|
193
|
+
...contentParagraphs,
|
|
194
|
+
new Paragraph({
|
|
195
|
+
children: [new TextRun({
|
|
196
|
+
text: "Disclaimer: This is a preliminary report for orientation purposes only.",
|
|
197
|
+
italics: true, size: 18, color: "999999",
|
|
198
|
+
})],
|
|
199
|
+
spacing: { before: 600 },
|
|
200
|
+
}),
|
|
201
|
+
],
|
|
202
|
+
}],
|
|
203
|
+
});
|
|
204
|
+
const buffer = await Packer.toBuffer(doc);
|
|
205
|
+
return buffer.toString("base64");
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=docx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx.js","sourceRoot":"","sources":["../../src/formatters/docx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/formatters/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAErF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/formatters/json.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,OAA2B,EAAE,KAAkB;IAC3E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LiteratureResult } from "../providers/types.js";
|
|
2
|
+
import type { AuditRecord } from "../audit/types.js";
|
|
3
|
+
export declare function resultsToMarkdown(results: LiteratureResult[], audit: AuditRecord): string;
|
|
4
|
+
export declare function auditToMarkdown(audit: AuditRecord): string;
|
|
5
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +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;AAErD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,WAAW,GACjB,MAAM,CA4BR;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAoC1D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export function resultsToMarkdown(results, audit) {
|
|
2
|
+
const lines = [];
|
|
3
|
+
lines.push(`## Literature Search Results`);
|
|
4
|
+
lines.push(`*${results.length} studies included across ${audit.sources_queried.length} sources*\n`);
|
|
5
|
+
if (results.length === 0) {
|
|
6
|
+
lines.push("No results found matching your query.");
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
results.forEach((r, i) => {
|
|
10
|
+
lines.push(`### ${i + 1}. ${r.title}`);
|
|
11
|
+
lines.push(`**Source:** ${r.source} | **Date:** ${r.date} | **Type:** ${r.study_type}`);
|
|
12
|
+
if (r.authors.length > 0)
|
|
13
|
+
lines.push(`**Authors:** ${r.authors.join(", ")}`);
|
|
14
|
+
if (r.abstract)
|
|
15
|
+
lines.push(`\n${r.abstract.slice(0, 300)}${r.abstract.length > 300 ? "..." : ""}`);
|
|
16
|
+
lines.push(`**URL:** ${r.url}\n`);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
lines.push(auditToMarkdown(audit));
|
|
20
|
+
return lines.join("\n");
|
|
21
|
+
}
|
|
22
|
+
export function auditToMarkdown(audit) {
|
|
23
|
+
const lines = [];
|
|
24
|
+
lines.push(`---`);
|
|
25
|
+
lines.push(`## Audit Report`);
|
|
26
|
+
lines.push(`**Tool:** ${audit.tool} | **Time:** ${audit.timestamp} | **Methodology:** ${audit.methodology || "N/A"}`);
|
|
27
|
+
lines.push(`**Total included:** ${audit.inclusions}`);
|
|
28
|
+
if (audit.sources_queried.length > 0) {
|
|
29
|
+
lines.push(`\n### Sources Queried`);
|
|
30
|
+
lines.push(`| Source | Query | Returned | Included | Status |`);
|
|
31
|
+
lines.push(`|--------|-------|----------|----------|--------|`);
|
|
32
|
+
audit.sources_queried.forEach((s) => {
|
|
33
|
+
lines.push(`| ${s.source} | \`${s.query_sent}\` | ${s.results_returned} | ${s.results_included} | ${s.status} |`);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (audit.exclusions.length > 0) {
|
|
37
|
+
lines.push(`\n### Exclusions (${audit.exclusions.length})`);
|
|
38
|
+
audit.exclusions.forEach((e) => lines.push(`- ${e.title}: *${e.reason}*`));
|
|
39
|
+
}
|
|
40
|
+
if (audit.assumptions.length > 0) {
|
|
41
|
+
lines.push(`\n### Assumptions`);
|
|
42
|
+
audit.assumptions.forEach((a) => lines.push(`- ${a}`));
|
|
43
|
+
}
|
|
44
|
+
if (audit.warnings.length > 0) {
|
|
45
|
+
lines.push(`\n### Warnings`);
|
|
46
|
+
audit.warnings.forEach((w) => lines.push(`- ⚠️ ${w}`));
|
|
47
|
+
}
|
|
48
|
+
return lines.join("\n");
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function getKbRoot(): string;
|
|
2
|
+
export declare function getProjectRoot(projectId: string): string;
|
|
3
|
+
export declare function getRawLiteratureDir(projectId: string): string;
|
|
4
|
+
export declare function getRawModelsDir(projectId: string): string;
|
|
5
|
+
export declare function getRawDossiersDir(projectId: string): string;
|
|
6
|
+
export declare function getWikiDir(projectId: string): string;
|
|
7
|
+
export declare function sanitizeProjectId(id: string): string;
|
|
8
|
+
export declare function sanitizeFilename(name: string): string;
|
|
9
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/knowledge/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAGD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMpD;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
|