heor-agent-mcp 1.4.2 → 1.5.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/dist/irb/coverLetters.d.ts +19 -0
- package/dist/irb/coverLetters.d.ts.map +1 -0
- package/dist/irb/coverLetters.js +69 -0
- package/dist/irb/coverLetters.js.map +1 -0
- package/dist/irb/decisionTree.d.ts +3 -0
- package/dist/irb/decisionTree.d.ts.map +1 -0
- package/dist/irb/decisionTree.js +518 -0
- package/dist/irb/decisionTree.js.map +1 -0
- package/dist/irb/rulesets.d.ts +61 -0
- package/dist/irb/rulesets.d.ts.map +1 -0
- package/dist/irb/rulesets.js +192 -0
- package/dist/irb/rulesets.js.map +1 -0
- package/dist/irb/types.d.ts +106 -0
- package/dist/irb/types.d.ts.map +1 -0
- package/dist/irb/types.js +12 -0
- package/dist/irb/types.js.map +1 -0
- package/dist/server.js +5 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/irbReview.d.ts +126 -0
- package/dist/tools/irbReview.d.ts.map +1 -0
- package/dist/tools/irbReview.js +333 -0
- package/dist/tools/irbReview.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cover-letter template for irb_review.
|
|
3
|
+
*
|
|
4
|
+
* Returns a single paragraph string (~200 words) ready to paste into an IRB /
|
|
5
|
+
* EC submission portal. Includes drug, indication, review tier, COI status,
|
|
6
|
+
* data-handling approach, and SAE framework. Customer pastes and edits in
|
|
7
|
+
* place — we don't try to produce a finished submission, only the structural
|
|
8
|
+
* scaffold so the human knows what sections must be present.
|
|
9
|
+
*/
|
|
10
|
+
import type { CoiFramework, IrbReviewInput, ReviewTierEu, ReviewTierUs, SaeFramework } from "./types.js";
|
|
11
|
+
export declare function buildCoverLetter(args: {
|
|
12
|
+
input: IrbReviewInput;
|
|
13
|
+
reviewTierUs: ReviewTierUs | null;
|
|
14
|
+
reviewTierEu: ReviewTierEu | null;
|
|
15
|
+
saeFramework: SaeFramework;
|
|
16
|
+
coiFramework: CoiFramework;
|
|
17
|
+
coiRequired: boolean;
|
|
18
|
+
}): string;
|
|
19
|
+
//# sourceMappingURL=coverLetters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverLetters.d.ts","sourceRoot":"","sources":["../../src/irb/coverLetters.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAmCpB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,KAAK,EAAE,cAAc,CAAC;IACtB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,MAAM,CAwCT"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cover-letter template for irb_review.
|
|
3
|
+
*
|
|
4
|
+
* Returns a single paragraph string (~200 words) ready to paste into an IRB /
|
|
5
|
+
* EC submission portal. Includes drug, indication, review tier, COI status,
|
|
6
|
+
* data-handling approach, and SAE framework. Customer pastes and edits in
|
|
7
|
+
* place — we don't try to produce a finished submission, only the structural
|
|
8
|
+
* scaffold so the human knows what sections must be present.
|
|
9
|
+
*/
|
|
10
|
+
const TIER_LABEL_US = {
|
|
11
|
+
exempt: "Exempt determination under 45 CFR 46.104",
|
|
12
|
+
expedited: "Expedited review under 45 CFR 46.110",
|
|
13
|
+
full_board: "Full Board review under 45 CFR 46.108",
|
|
14
|
+
not_applicable: "(US IRB tier not applicable)",
|
|
15
|
+
};
|
|
16
|
+
const TIER_LABEL_EU = {
|
|
17
|
+
national_only: "National-level Ethics Committee review",
|
|
18
|
+
ctr_multi_state: "Coordinated Multi-State EC Review under EU Regulation 536/2014 (CTR)",
|
|
19
|
+
non_interventional_only: "EC review under national non-interventional study framework (CTR 536/2014 not applicable)",
|
|
20
|
+
};
|
|
21
|
+
const SAE_LABEL = {
|
|
22
|
+
ctr_536_2014: "EU CTR 536/2014 Annex III SUSAR / SAE timelines",
|
|
23
|
+
fda_ind_safety: "FDA IND Safety Reporting (21 CFR 312.32)",
|
|
24
|
+
post_marketing_psur: "Periodic Safety Update Reports (PSUR) and EudraVigilance ICSRs",
|
|
25
|
+
none: "No SAE-reporting framework (study design not subject to expedited safety reporting)",
|
|
26
|
+
};
|
|
27
|
+
const COI_LABEL = {
|
|
28
|
+
phs_42_cfr_50: "PHS 42 CFR 50 Subpart F (Promoting Objectivity in Research)",
|
|
29
|
+
eu_ctr_article_14: "EU CTR 536/2014 Article 14 (transparency and conflict-of-interest disclosure)",
|
|
30
|
+
both: "PHS 42 CFR 50 Subpart F (US) and EU CTR 536/2014 Article 14 (EU)",
|
|
31
|
+
none: "No conflict-of-interest framework triggered (non-industry funding)",
|
|
32
|
+
};
|
|
33
|
+
export function buildCoverLetter(args) {
|
|
34
|
+
const { input, reviewTierUs, reviewTierEu, saeFramework, coiFramework } = args;
|
|
35
|
+
const tierUs = reviewTierUs ? TIER_LABEL_US[reviewTierUs] : null;
|
|
36
|
+
const tierEu = reviewTierEu ? TIER_LABEL_EU[reviewTierEu] : null;
|
|
37
|
+
const tiers = [tierUs, tierEu].filter(Boolean).join(" + ");
|
|
38
|
+
const saeText = SAE_LABEL[saeFramework];
|
|
39
|
+
const coiText = COI_LABEL[coiFramework];
|
|
40
|
+
const populationCaveats = [];
|
|
41
|
+
if (input.population_includes_pediatric)
|
|
42
|
+
populationCaveats.push("paediatric subjects (45 CFR 46 Subpart D)");
|
|
43
|
+
if (input.population_includes_pregnant)
|
|
44
|
+
populationCaveats.push("pregnant subjects (45 CFR 46 Subpart B)");
|
|
45
|
+
if (input.population_includes_prisoners)
|
|
46
|
+
populationCaveats.push("incarcerated subjects (45 CFR 46 Subpart C)");
|
|
47
|
+
if (input.population_includes_decisionally_impaired)
|
|
48
|
+
populationCaveats.push("subjects with diminished decision-making capacity");
|
|
49
|
+
const populationLine = populationCaveats.length > 0
|
|
50
|
+
? `The study population includes ${populationCaveats.join(", ")}, and the protocol incorporates the additional safeguards required for these vulnerable groups. `
|
|
51
|
+
: "";
|
|
52
|
+
return [
|
|
53
|
+
`Dear Members of the Institutional Review Board / Ethics Committee,`,
|
|
54
|
+
``,
|
|
55
|
+
`We are submitting the attached protocol and supporting materials for your review of a planned study of ${input.intervention} in ${input.indication}. The study is designed as a ${input.study_design.replace(/_/g, " ")}, and the requested review pathway is: ${tiers || "(jurisdiction-specific tiers not established)"}.`,
|
|
56
|
+
``,
|
|
57
|
+
`Risk classification: ${input.risk_level}. The data-handling approach is "${input.data_handling}" — the Data Management Plan section of this submission details the de-identification and cross-border transfer obligations as applicable. ${populationLine}Safety monitoring will follow ${saeText}, with the SAE / SUSAR reporting timelines tabulated in the protocol.`,
|
|
58
|
+
``,
|
|
59
|
+
`Conflict-of-interest disclosures: this study is funded by ${input.funding_source}. The applicable framework is ${coiText}, and individual investigator disclosures are filed with this submission. ${input.multi_site ? "This is a multi-site study, and coordination across sites follows the lead site's framework with local-site ethics oversight where required. " : ""}`,
|
|
60
|
+
``,
|
|
61
|
+
`We confirm that the protocol, ICF, and supporting documents have undergone scientific review and are ready for ethics review. We are available to address any questions or to revise the submission per Committee feedback. Thank you for your consideration.`,
|
|
62
|
+
``,
|
|
63
|
+
`Sincerely,`,
|
|
64
|
+
`[Principal Investigator]`,
|
|
65
|
+
`[Institution]`,
|
|
66
|
+
`[Date]`,
|
|
67
|
+
].join("\n");
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=coverLetters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverLetters.js","sourceRoot":"","sources":["../../src/irb/coverLetters.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,aAAa,GAAiC;IAClD,MAAM,EAAE,0CAA0C;IAClD,SAAS,EAAE,sCAAsC;IACjD,UAAU,EAAE,uCAAuC;IACnD,cAAc,EAAE,8BAA8B;CAC/C,CAAC;AAEF,MAAM,aAAa,GAAiC;IAClD,aAAa,EAAE,wCAAwC;IACvD,eAAe,EACb,sEAAsE;IACxE,uBAAuB,EACrB,2FAA2F;CAC9F,CAAC;AAEF,MAAM,SAAS,GAAiC;IAC9C,YAAY,EAAE,iDAAiD;IAC/D,cAAc,EAAE,0CAA0C;IAC1D,mBAAmB,EACjB,gEAAgE;IAClE,IAAI,EAAE,qFAAqF;CAC5F,CAAC;AAEF,MAAM,SAAS,GAAiC;IAC9C,aAAa,EACX,6DAA6D;IAC/D,iBAAiB,EACf,+EAA+E;IACjF,IAAI,EACF,kEAAkE;IACpE,IAAI,EAAE,oEAAoE;CAC3E,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,IAOhC;IACC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,GACrE,IAAI,CAAC;IAEP,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAExC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,6BAA6B;QACrC,iBAAiB,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,4BAA4B;QACpC,iBAAiB,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,6BAA6B;QACrC,iBAAiB,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,yCAAyC;QACjD,iBAAiB,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IAC9E,MAAM,cAAc,GAClB,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,iCAAiC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,kGAAkG;QACjK,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,oEAAoE;QACpE,EAAE;QACF,0GAA0G,KAAK,CAAC,YAAY,OAAO,KAAK,CAAC,UAAU,gCAAgC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,0CAA0C,KAAK,IAAI,+CAA+C,GAAG;QAC7T,EAAE;QACF,wBAAwB,KAAK,CAAC,UAAU,oCAAoC,KAAK,CAAC,aAAa,8IAA8I,cAAc,iCAAiC,OAAO,uEAAuE;QAC1W,EAAE;QACF,6DAA6D,KAAK,CAAC,cAAc,iCAAiC,OAAO,6EAA6E,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,+IAA+I,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/W,EAAE;QACF,+PAA+P;QAC/P,EAAE;QACF,YAAY;QACZ,0BAA0B;QAC1B,eAAe;QACf,QAAQ;KACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisionTree.d.ts","sourceRoot":"","sources":["../../src/irb/decisionTree.ts"],"names":[],"mappings":"AAuBA,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,cAAc,EAKpB,MAAM,YAAY,CAAC;AA4gBpB,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CA0E9D"}
|
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure decision logic for irb_review (design log #21).
|
|
3
|
+
*
|
|
4
|
+
* Computes US 45 CFR 46 review tier (exempt / expedited / full-board), EU
|
|
5
|
+
* CTR 536/2014 review path, vulnerable-population obligations, GDPR/HIPAA
|
|
6
|
+
* data-management plan, SAE-reporting framework, ICF complexity tier, COI
|
|
7
|
+
* framework, and a ready-to-paste cover-letter template.
|
|
8
|
+
*
|
|
9
|
+
* Order of checks (top-down):
|
|
10
|
+
* 1. risk_level=unknown + interventional → conservative full-board (A3).
|
|
11
|
+
* 2. Hint flags (educational, benign_behavioural, federal_demonstration,
|
|
12
|
+
* taste_test, broad_consent_obtained, marketed_drug,
|
|
13
|
+
* blood_draw_within_limits, noninvasive_collection,
|
|
14
|
+
* noninvasive_procedure, recording_collection) — explicit signals
|
|
15
|
+
* from the investigator override the default tree.
|
|
16
|
+
* 3. By study_design + data_handling.
|
|
17
|
+
* 4. pv_classification.primary_category="PASS_imposed" overrides the SAE
|
|
18
|
+
* framework to CTR Annex III regardless of jurisdiction.
|
|
19
|
+
*
|
|
20
|
+
* See verification criteria 1-10 in design log #21 §"Verification Criteria".
|
|
21
|
+
*/
|
|
22
|
+
import { buildCoverLetter } from "./coverLetters.js";
|
|
23
|
+
import { CTR_536_2014_TIMELINES, FDA_IND_TIMELINES, PSUR_TIMELINES, VULNERABLE_OBLIGATIONS } from "./rulesets.js";
|
|
24
|
+
import { IRB_RULESET, } from "./types.js";
|
|
25
|
+
const NON_INTERVENTIONAL_DESIGNS = new Set([
|
|
26
|
+
"questionnaire_only",
|
|
27
|
+
"non_interventional_prospective",
|
|
28
|
+
"retrospective_chart_review",
|
|
29
|
+
"secondary_data_analysis",
|
|
30
|
+
"specimen_repository",
|
|
31
|
+
"registry",
|
|
32
|
+
]);
|
|
33
|
+
function isAnonymous(input) {
|
|
34
|
+
return (input.data_handling === "anonymized_safe_harbor" ||
|
|
35
|
+
input.data_handling === "anonymized_expert_determination" ||
|
|
36
|
+
input.data_handling === "aggregate_only");
|
|
37
|
+
}
|
|
38
|
+
function isIdentifiable(input) {
|
|
39
|
+
return (input.data_handling === "fully_identifiable" ||
|
|
40
|
+
input.data_handling === "pseudonymized");
|
|
41
|
+
}
|
|
42
|
+
function classifyUs(input, warnings) {
|
|
43
|
+
if (!input.jurisdictions.includes("us_irb"))
|
|
44
|
+
return null;
|
|
45
|
+
// Conservative full-board when risk_level missing on interventional (A3).
|
|
46
|
+
if (input.study_design === "interventional" &&
|
|
47
|
+
input.risk_level === "unknown") {
|
|
48
|
+
warnings.push("risk_level was 'unknown'/missing on an interventional study — defaulted conservatively to full-board review per 45 CFR 46.108. Re-run with risk_level set when the protocol risk classification is finalised.");
|
|
49
|
+
return {
|
|
50
|
+
tier: "full_board",
|
|
51
|
+
exempt_category: null,
|
|
52
|
+
expedited_categories: [],
|
|
53
|
+
rationale: "Risk classification was unknown for an interventional study; defaulted to full-board review under 45 CFR 46.108 (most protective).",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Hint-driven exempt categories (highest specificity first).
|
|
57
|
+
if (input.exempt_category_hint === "educational") {
|
|
58
|
+
return {
|
|
59
|
+
tier: "exempt",
|
|
60
|
+
exempt_category: 1,
|
|
61
|
+
expedited_categories: [],
|
|
62
|
+
rationale: "Educational practices in established educational settings (45 CFR 46.104(d)(1)).",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (input.benign_behavioural &&
|
|
66
|
+
input.study_design === "interventional" &&
|
|
67
|
+
input.risk_level === "minimal") {
|
|
68
|
+
return {
|
|
69
|
+
tier: "exempt",
|
|
70
|
+
exempt_category: 3,
|
|
71
|
+
expedited_categories: [],
|
|
72
|
+
rationale: "Benign behavioural intervention in adults with prospective consent (45 CFR 46.104(d)(3)).",
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (input.federal_demonstration) {
|
|
76
|
+
return {
|
|
77
|
+
tier: "exempt",
|
|
78
|
+
exempt_category: 5,
|
|
79
|
+
expedited_categories: [],
|
|
80
|
+
rationale: "Federally supported research / demonstration project under public benefit / service program (45 CFR 46.104(d)(5)).",
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (input.taste_test) {
|
|
84
|
+
return {
|
|
85
|
+
tier: "exempt",
|
|
86
|
+
exempt_category: 6,
|
|
87
|
+
expedited_categories: [],
|
|
88
|
+
rationale: "Taste / food-quality / consumer-acceptance evaluation (45 CFR 46.104(d)(6)).",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (input.broad_consent_obtained &&
|
|
92
|
+
input.study_design === "specimen_repository") {
|
|
93
|
+
return {
|
|
94
|
+
tier: "exempt",
|
|
95
|
+
exempt_category: 7,
|
|
96
|
+
expedited_categories: [],
|
|
97
|
+
rationale: "Storage / maintenance of identifiable biospecimens for secondary research with broad consent (45 CFR 46.104(d)(7)).",
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (input.broad_consent_obtained &&
|
|
101
|
+
input.study_design === "secondary_data_analysis") {
|
|
102
|
+
return {
|
|
103
|
+
tier: "exempt",
|
|
104
|
+
exempt_category: 8,
|
|
105
|
+
expedited_categories: [],
|
|
106
|
+
rationale: "Secondary research using identifiable info / biospecimens for which broad consent was obtained (45 CFR 46.104(d)(8)).",
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// By study_design.
|
|
110
|
+
switch (input.study_design) {
|
|
111
|
+
case "questionnaire_only": {
|
|
112
|
+
if (isAnonymous(input)) {
|
|
113
|
+
return {
|
|
114
|
+
tier: "exempt",
|
|
115
|
+
exempt_category: 2,
|
|
116
|
+
expedited_categories: [],
|
|
117
|
+
rationale: "Educational tests, surveys, interviews, or public observation with non-identifiable responses (45 CFR 46.104(d)(2)).",
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// Identifiable survey/interview → expedited cat 7.
|
|
121
|
+
return {
|
|
122
|
+
tier: "expedited",
|
|
123
|
+
exempt_category: null,
|
|
124
|
+
expedited_categories: [7],
|
|
125
|
+
rationale: "Survey / interview / focus-group research in adults at minimal risk with identifiable responses → expedited review under 45 CFR 46.110 cat 7.",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
case "secondary_data_analysis": {
|
|
129
|
+
if (isAnonymous(input)) {
|
|
130
|
+
return {
|
|
131
|
+
tier: "exempt",
|
|
132
|
+
exempt_category: 4,
|
|
133
|
+
expedited_categories: [],
|
|
134
|
+
rationale: "Secondary research using non-identifiable / publicly available data (45 CFR 46.104(d)(4)).",
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (input.data_handling === "fully_identifiable") {
|
|
138
|
+
return {
|
|
139
|
+
tier: "full_board",
|
|
140
|
+
exempt_category: null,
|
|
141
|
+
expedited_categories: [],
|
|
142
|
+
rationale: "Secondary research with fully identifiable private information without broad consent → full-board review (45 CFR 46.108).",
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// Pseudonymized minimal-risk → expedited cat 5.
|
|
146
|
+
return {
|
|
147
|
+
tier: "expedited",
|
|
148
|
+
exempt_category: null,
|
|
149
|
+
expedited_categories: [5],
|
|
150
|
+
rationale: "Research using existing data / records collected for non-research purposes (45 CFR 46.110 cat 5).",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
case "specimen_repository": {
|
|
154
|
+
if (isAnonymous(input)) {
|
|
155
|
+
return {
|
|
156
|
+
tier: "exempt",
|
|
157
|
+
exempt_category: 4,
|
|
158
|
+
expedited_categories: [],
|
|
159
|
+
rationale: "Specimen repository using non-identifiable biospecimens (45 CFR 46.104(d)(4)).",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (input.data_handling === "fully_identifiable") {
|
|
163
|
+
return {
|
|
164
|
+
tier: "full_board",
|
|
165
|
+
exempt_category: null,
|
|
166
|
+
expedited_categories: [],
|
|
167
|
+
rationale: "Specimen repository with fully identifiable specimens without broad consent → full-board review.",
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
tier: "expedited",
|
|
172
|
+
exempt_category: null,
|
|
173
|
+
expedited_categories: [5],
|
|
174
|
+
rationale: "Pseudonymized specimen repository at minimal risk (45 CFR 46.110 cat 5).",
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
case "retrospective_chart_review": {
|
|
178
|
+
if (isAnonymous(input)) {
|
|
179
|
+
return {
|
|
180
|
+
tier: "exempt",
|
|
181
|
+
exempt_category: 4,
|
|
182
|
+
expedited_categories: [],
|
|
183
|
+
rationale: "Retrospective chart review using non-identifiable / de-identified records (45 CFR 46.104(d)(4)).",
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (input.risk_level === "minimal") {
|
|
187
|
+
return {
|
|
188
|
+
tier: "expedited",
|
|
189
|
+
exempt_category: null,
|
|
190
|
+
expedited_categories: [5],
|
|
191
|
+
rationale: "Retrospective chart review using identifiable existing records at minimal risk (45 CFR 46.110 cat 5).",
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
tier: "full_board",
|
|
196
|
+
exempt_category: null,
|
|
197
|
+
expedited_categories: [],
|
|
198
|
+
rationale: "Retrospective chart review at greater-than-minimal risk → full-board review.",
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
case "non_interventional_prospective": {
|
|
202
|
+
if (input.marketed_drug && input.risk_level === "minimal") {
|
|
203
|
+
return {
|
|
204
|
+
tier: "expedited",
|
|
205
|
+
exempt_category: null,
|
|
206
|
+
expedited_categories: [1],
|
|
207
|
+
rationale: "Post-marketing observational study of a marketed drug at minimal risk per labeling (45 CFR 46.110 cat 1).",
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
if (input.blood_draw_within_limits) {
|
|
211
|
+
return {
|
|
212
|
+
tier: "expedited",
|
|
213
|
+
exempt_category: null,
|
|
214
|
+
expedited_categories: [2],
|
|
215
|
+
rationale: "Blood collection by venipuncture within OHRP volume limits (45 CFR 46.110 cat 2).",
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
if (input.noninvasive_collection) {
|
|
219
|
+
return {
|
|
220
|
+
tier: "expedited",
|
|
221
|
+
exempt_category: null,
|
|
222
|
+
expedited_categories: [3],
|
|
223
|
+
rationale: "Prospective collection of biospecimens by noninvasive means (45 CFR 46.110 cat 3).",
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (input.noninvasive_procedure) {
|
|
227
|
+
return {
|
|
228
|
+
tier: "expedited",
|
|
229
|
+
exempt_category: null,
|
|
230
|
+
expedited_categories: [4],
|
|
231
|
+
rationale: "Data collection through noninvasive procedures routinely employed in clinical practice (45 CFR 46.110 cat 4).",
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
if (input.recording_collection) {
|
|
235
|
+
return {
|
|
236
|
+
tier: "expedited",
|
|
237
|
+
exempt_category: null,
|
|
238
|
+
expedited_categories: [6],
|
|
239
|
+
rationale: "Voice / digital / image recording collection (45 CFR 46.110 cat 6).",
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (input.risk_level === "greater_than_minimal") {
|
|
243
|
+
return {
|
|
244
|
+
tier: "full_board",
|
|
245
|
+
exempt_category: null,
|
|
246
|
+
expedited_categories: [],
|
|
247
|
+
rationale: "Non-interventional prospective study at greater-than-minimal risk → full-board review (45 CFR 46.108).",
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
tier: "expedited",
|
|
252
|
+
exempt_category: null,
|
|
253
|
+
expedited_categories: [4],
|
|
254
|
+
rationale: "Non-interventional prospective minimal-risk study (default expedited cat 4).",
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
case "registry": {
|
|
258
|
+
if (isAnonymous(input)) {
|
|
259
|
+
return {
|
|
260
|
+
tier: "exempt",
|
|
261
|
+
exempt_category: 4,
|
|
262
|
+
expedited_categories: [],
|
|
263
|
+
rationale: "Registry of non-identifiable / aggregate data (45 CFR 46.104(d)(4)).",
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
if (input.risk_level === "minimal") {
|
|
267
|
+
return {
|
|
268
|
+
tier: "expedited",
|
|
269
|
+
exempt_category: null,
|
|
270
|
+
expedited_categories: [5],
|
|
271
|
+
rationale: "Registry using identifiable existing data at minimal risk (45 CFR 46.110 cat 5).",
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
tier: "full_board",
|
|
276
|
+
exempt_category: null,
|
|
277
|
+
expedited_categories: [],
|
|
278
|
+
rationale: "Registry at greater-than-minimal risk → full-board review.",
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
case "interventional": {
|
|
282
|
+
if (input.marketed_drug && input.risk_level === "minimal") {
|
|
283
|
+
return {
|
|
284
|
+
tier: "expedited",
|
|
285
|
+
exempt_category: null,
|
|
286
|
+
expedited_categories: [1],
|
|
287
|
+
rationale: "Interventional study of a marketed drug at minimal risk per labeling (45 CFR 46.110 cat 1).",
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
// Default: interventional is greater-than-minimal-risk-by-default →
|
|
291
|
+
// full-board, regardless of explicit risk level (interventional drug
|
|
292
|
+
// / device studies almost always qualify).
|
|
293
|
+
return {
|
|
294
|
+
tier: "full_board",
|
|
295
|
+
exempt_category: null,
|
|
296
|
+
expedited_categories: [],
|
|
297
|
+
rationale: "Interventional drug / device / behavioural-intervention study at greater-than-minimal risk → full-board review under 45 CFR 46.108.",
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
function classifyEu(input) {
|
|
303
|
+
if (!input.jurisdictions.includes("eu_cec"))
|
|
304
|
+
return null;
|
|
305
|
+
if (input.study_design === "interventional") {
|
|
306
|
+
if (input.multi_site) {
|
|
307
|
+
return { tier: "ctr_multi_state", timeline_days: 60 };
|
|
308
|
+
}
|
|
309
|
+
return { tier: "national_only", timeline_days: 45 };
|
|
310
|
+
}
|
|
311
|
+
return { tier: "non_interventional_only", timeline_days: null };
|
|
312
|
+
}
|
|
313
|
+
function buildVulnerable(input) {
|
|
314
|
+
const out = [];
|
|
315
|
+
if (input.population_includes_pregnant) {
|
|
316
|
+
out.push({
|
|
317
|
+
group: "pregnant",
|
|
318
|
+
regulatory_basis: VULNERABLE_OBLIGATIONS.pregnant.regulatory_basis,
|
|
319
|
+
obligations: [...VULNERABLE_OBLIGATIONS.pregnant.obligations],
|
|
320
|
+
v2_age_tier_table_pending: false,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
if (input.population_includes_prisoners) {
|
|
324
|
+
out.push({
|
|
325
|
+
group: "prisoners",
|
|
326
|
+
regulatory_basis: VULNERABLE_OBLIGATIONS.prisoners.regulatory_basis,
|
|
327
|
+
obligations: [...VULNERABLE_OBLIGATIONS.prisoners.obligations],
|
|
328
|
+
v2_age_tier_table_pending: false,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
if (input.population_includes_pediatric) {
|
|
332
|
+
out.push({
|
|
333
|
+
group: "pediatric",
|
|
334
|
+
regulatory_basis: VULNERABLE_OBLIGATIONS.pediatric.regulatory_basis,
|
|
335
|
+
obligations: [...VULNERABLE_OBLIGATIONS.pediatric.obligations],
|
|
336
|
+
v2_age_tier_table_pending: true,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
if (input.population_includes_decisionally_impaired) {
|
|
340
|
+
out.push({
|
|
341
|
+
group: "decisionally_impaired",
|
|
342
|
+
regulatory_basis: VULNERABLE_OBLIGATIONS.decisionally_impaired.regulatory_basis,
|
|
343
|
+
obligations: [
|
|
344
|
+
...VULNERABLE_OBLIGATIONS.decisionally_impaired.obligations,
|
|
345
|
+
],
|
|
346
|
+
v2_age_tier_table_pending: false,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return out;
|
|
350
|
+
}
|
|
351
|
+
function buildDmp(input) {
|
|
352
|
+
const onEu = input.jurisdictions.includes("eu_cec");
|
|
353
|
+
const onUs = input.jurisdictions.includes("us_irb");
|
|
354
|
+
const gdpr = onEu && !isAnonymous(input);
|
|
355
|
+
const hipaaPhi = onUs && isIdentifiable(input);
|
|
356
|
+
let deid;
|
|
357
|
+
if (input.data_handling === "fully_identifiable")
|
|
358
|
+
deid = "must_implement";
|
|
359
|
+
else if (input.data_handling === "pseudonymized")
|
|
360
|
+
deid = "pseudonymization";
|
|
361
|
+
else if (input.data_handling === "anonymized_safe_harbor")
|
|
362
|
+
deid = "safe_harbor";
|
|
363
|
+
else if (input.data_handling === "anonymized_expert_determination")
|
|
364
|
+
deid = "expert_determination";
|
|
365
|
+
else
|
|
366
|
+
deid = "not_required";
|
|
367
|
+
const xfer = [];
|
|
368
|
+
if (gdpr) {
|
|
369
|
+
xfer.push("GDPR Art. 9(2) lawful basis required for special-category health data (Art. 9(2)(j) for scientific research is the typical basis).");
|
|
370
|
+
if (onUs) {
|
|
371
|
+
xfer.push("EU→US transfer obligation: Standard Contractual Clauses (SCCs) with Transfer Impact Assessment, OR participation in the EU-US Data Privacy Framework.");
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if (hipaaPhi) {
|
|
375
|
+
xfer.push("HIPAA §164.514 — implement Safe Harbor (18-identifier removal) or Expert Determination prior to data sharing outside the covered entity.");
|
|
376
|
+
}
|
|
377
|
+
return {
|
|
378
|
+
gdpr_special_category: gdpr,
|
|
379
|
+
hipaa_phi: hipaaPhi,
|
|
380
|
+
de_identification_method: deid,
|
|
381
|
+
cross_border_transfer_obligations: xfer,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
function buildSae(input) {
|
|
385
|
+
// PASS_imposed override — CTR Annex III regardless of jurisdiction.
|
|
386
|
+
const pvCat = input.pv_classification?.primary_category;
|
|
387
|
+
if (pvCat === "PASS_imposed") {
|
|
388
|
+
return {
|
|
389
|
+
framework: "ctr_536_2014",
|
|
390
|
+
timelines: [...CTR_536_2014_TIMELINES],
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
const onEu = input.jurisdictions.includes("eu_cec");
|
|
394
|
+
if (input.study_design === "interventional") {
|
|
395
|
+
if (onEu) {
|
|
396
|
+
return {
|
|
397
|
+
framework: "ctr_536_2014",
|
|
398
|
+
timelines: [...CTR_536_2014_TIMELINES],
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
return { framework: "fda_ind_safety", timelines: [...FDA_IND_TIMELINES] };
|
|
402
|
+
}
|
|
403
|
+
if (input.study_design === "non_interventional_prospective" &&
|
|
404
|
+
input.marketed_drug) {
|
|
405
|
+
return { framework: "post_marketing_psur", timelines: [...PSUR_TIMELINES] };
|
|
406
|
+
}
|
|
407
|
+
if (input.study_design === "registry" && input.marketed_drug) {
|
|
408
|
+
return { framework: "post_marketing_psur", timelines: [...PSUR_TIMELINES] };
|
|
409
|
+
}
|
|
410
|
+
return { framework: "none", timelines: [] };
|
|
411
|
+
}
|
|
412
|
+
function computeIcfTier(input, vulnerable) {
|
|
413
|
+
if (vulnerable.length > 0)
|
|
414
|
+
return "complex";
|
|
415
|
+
if (input.study_design === "interventional" &&
|
|
416
|
+
(input.risk_level === "greater_than_minimal" ||
|
|
417
|
+
input.risk_level === "unknown")) {
|
|
418
|
+
return "complex";
|
|
419
|
+
}
|
|
420
|
+
const isMinimal = input.risk_level === "minimal";
|
|
421
|
+
const isNonInt = NON_INTERVENTIONAL_DESIGNS.has(input.study_design);
|
|
422
|
+
if (isMinimal && isNonInt)
|
|
423
|
+
return "basic";
|
|
424
|
+
return "standard";
|
|
425
|
+
}
|
|
426
|
+
function computeCoi(input) {
|
|
427
|
+
if (input.funding_source !== "industry") {
|
|
428
|
+
return { required: false, framework: "none" };
|
|
429
|
+
}
|
|
430
|
+
const onUs = input.jurisdictions.includes("us_irb");
|
|
431
|
+
const onEu = input.jurisdictions.includes("eu_cec");
|
|
432
|
+
if (onUs && onEu)
|
|
433
|
+
return { required: true, framework: "both" };
|
|
434
|
+
if (onUs)
|
|
435
|
+
return { required: true, framework: "phs_42_cfr_50" };
|
|
436
|
+
if (onEu)
|
|
437
|
+
return { required: true, framework: "eu_ctr_article_14" };
|
|
438
|
+
return { required: false, framework: "none" };
|
|
439
|
+
}
|
|
440
|
+
function reconcileExpeditedClaim(input, derivedCategories, warnings) {
|
|
441
|
+
const claim = input.expedited_category_claim;
|
|
442
|
+
if (!claim || claim.length === 0)
|
|
443
|
+
return;
|
|
444
|
+
const claimSet = new Set(claim);
|
|
445
|
+
const derivedSet = new Set(derivedCategories);
|
|
446
|
+
// Check if any claimed cat is missing from derived OR vice versa.
|
|
447
|
+
const claimMissing = claim.filter((c) => !derivedSet.has(c));
|
|
448
|
+
const derivedMissing = derivedCategories.filter((c) => !claimSet.has(c));
|
|
449
|
+
if (claimMissing.length === 0 && derivedMissing.length === 0)
|
|
450
|
+
return;
|
|
451
|
+
const claimStr = claim.join(", ");
|
|
452
|
+
const derivedStr = derivedCategories.length > 0 ? derivedCategories.join(", ") : "none";
|
|
453
|
+
warnings.push(`expedited_category_claim mismatch: investigator claimed cat [${claimStr}], decision tree derived cat [${derivedStr}]. Surfacing both — confirm which classification fits the protocol with the IRB. Reference: 45 CFR 46.110 (OHRP expedited categories).`);
|
|
454
|
+
}
|
|
455
|
+
export function assessIrb(input) {
|
|
456
|
+
const warnings = [];
|
|
457
|
+
const us = classifyUs(input, warnings);
|
|
458
|
+
const eu = classifyEu(input);
|
|
459
|
+
const vulnerable = buildVulnerable(input);
|
|
460
|
+
const dmp = buildDmp(input);
|
|
461
|
+
const sae = buildSae(input);
|
|
462
|
+
const icf = computeIcfTier(input, vulnerable);
|
|
463
|
+
const coi = computeCoi(input);
|
|
464
|
+
if (us?.tier === "expedited") {
|
|
465
|
+
reconcileExpeditedClaim(input, us.expedited_categories, warnings);
|
|
466
|
+
}
|
|
467
|
+
else if (input.expedited_category_claim?.length) {
|
|
468
|
+
warnings.push(`expedited_category_claim was provided (cat [${input.expedited_category_claim.join(", ")}]) but the decision tree did not classify this study as expedited. Re-evaluate the claim against the actual review tier.`);
|
|
469
|
+
}
|
|
470
|
+
// Build rationale — concatenate US + EU reasoning + PV/PASS_imposed link.
|
|
471
|
+
const rationaleParts = [];
|
|
472
|
+
if (us)
|
|
473
|
+
rationaleParts.push(`US: ${us.rationale}`);
|
|
474
|
+
if (eu) {
|
|
475
|
+
if (eu.tier === "ctr_multi_state") {
|
|
476
|
+
rationaleParts.push(`EU: Coordinated multi-state EC review under CTR 536/2014 (typical timeline: ${eu.timeline_days} days).`);
|
|
477
|
+
}
|
|
478
|
+
else if (eu.tier === "national_only") {
|
|
479
|
+
rationaleParts.push(`EU: National-level EC review under CTR 536/2014 (typical timeline: ${eu.timeline_days} days).`);
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
rationaleParts.push("EU: Non-interventional study — outside CTR 536/2014 scope; national EC review per local non-interventional framework.");
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
const pvCat = input.pv_classification?.primary_category;
|
|
486
|
+
if (pvCat === "PASS_imposed") {
|
|
487
|
+
rationaleParts.push("PV: pv_classification.primary_category = PASS_imposed — Article 107n imposed PASS triggers CTR 536/2014 Annex III SAE reporting timelines on top of any jurisdiction-specific obligations.");
|
|
488
|
+
}
|
|
489
|
+
else if (pvCat) {
|
|
490
|
+
rationaleParts.push(`PV: pv_classification.primary_category = ${pvCat} (post-authorisation context — see GVP module mapping for downstream RMP and submission obligations).`);
|
|
491
|
+
}
|
|
492
|
+
const coverLetter = buildCoverLetter({
|
|
493
|
+
input,
|
|
494
|
+
reviewTierUs: us?.tier ?? null,
|
|
495
|
+
reviewTierEu: eu?.tier ?? null,
|
|
496
|
+
saeFramework: sae.framework,
|
|
497
|
+
coiFramework: coi.framework,
|
|
498
|
+
coiRequired: coi.required,
|
|
499
|
+
});
|
|
500
|
+
return {
|
|
501
|
+
review_tier_us: us?.tier ?? null,
|
|
502
|
+
exempt_category_us: us?.exempt_category ?? null,
|
|
503
|
+
expedited_categories_us: us?.expedited_categories ?? [],
|
|
504
|
+
review_tier_eu: eu?.tier ?? null,
|
|
505
|
+
eu_cec_timeline_days: eu?.timeline_days ?? null,
|
|
506
|
+
vulnerable_population_obligations: vulnerable,
|
|
507
|
+
data_management_plan: dmp,
|
|
508
|
+
sae_reporting_obligations: sae,
|
|
509
|
+
icf_complexity_tier: icf,
|
|
510
|
+
coi_disclosure_required: coi.required,
|
|
511
|
+
coi_framework: coi.framework,
|
|
512
|
+
cover_letter_template: coverLetter,
|
|
513
|
+
rationale: rationaleParts.join(" "),
|
|
514
|
+
advisory_warnings: warnings,
|
|
515
|
+
irb_ruleset: IRB_RULESET,
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
//# sourceMappingURL=decisionTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisionTree.js","sourceRoot":"","sources":["../../src/irb/decisionTree.ts"],"names":[],"mappings":"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"}
|