fda-mcp-server 0.0.3 → 0.0.7
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/db.d.ts +18 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +54 -7
- package/dist/db.js.map +1 -1
- package/dist/fda-client.d.ts +29 -54
- package/dist/fda-client.d.ts.map +1 -1
- package/dist/fda-client.js +74 -149
- package/dist/fda-client.js.map +1 -1
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +248 -480
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
package/dist/db.d.ts
CHANGED
|
@@ -101,5 +101,23 @@ export interface SupplierQualResult {
|
|
|
101
101
|
}[];
|
|
102
102
|
csa_risk: CSARiskResult | null;
|
|
103
103
|
}
|
|
104
|
+
export interface CompanyEnrichedResult {
|
|
105
|
+
warning_letters: {
|
|
106
|
+
issue_date: string;
|
|
107
|
+
center: string;
|
|
108
|
+
regime: string;
|
|
109
|
+
csa_relevant: boolean;
|
|
110
|
+
subject: string;
|
|
111
|
+
}[];
|
|
112
|
+
inspections: {
|
|
113
|
+
inspection_date: string;
|
|
114
|
+
center: string;
|
|
115
|
+
product_area: string;
|
|
116
|
+
csa_relevant: boolean;
|
|
117
|
+
}[];
|
|
118
|
+
total_warning_letters: number;
|
|
119
|
+
total_inspections: number;
|
|
120
|
+
}
|
|
121
|
+
export declare function companyEnrichedProfile(companyName: string): Promise<CompanyEnrichedResult | null>;
|
|
104
122
|
export declare function supplierQualification(companyName: string): Promise<SupplierQualResult | null>;
|
|
105
123
|
//# sourceMappingURL=db.d.ts.map
|
package/dist/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/db.js
CHANGED
|
@@ -93,7 +93,7 @@ export async function csaRiskAssessment(companyName) {
|
|
|
93
93
|
JOIN warning_letter wl ON c.letter_id = wl.id
|
|
94
94
|
WHERE LOWER(wl.company_name) LIKE LOWER($1)`, [`%${companyName}%`]);
|
|
95
95
|
// Top CFR citations
|
|
96
|
-
const topCfr = await p.query(`SELECT c.cfr_full, c.normalized_category, COUNT(*) AS cnt
|
|
96
|
+
const topCfr = await p.query(`SELECT COALESCE(c.cfr_full, 'N/A') AS cfr_full, c.normalized_category, COUNT(*) AS cnt
|
|
97
97
|
FROM citation c
|
|
98
98
|
JOIN warning_letter wl ON c.letter_id = wl.id
|
|
99
99
|
WHERE LOWER(wl.company_name) LIKE LOWER($1)
|
|
@@ -180,7 +180,7 @@ export async function citationAnalysis(params) {
|
|
|
180
180
|
const byType = await p.query(`SELECT c.citation_type AS type, COUNT(*) AS cnt
|
|
181
181
|
FROM citation c JOIN warning_letter wl ON c.letter_id = wl.id ${where}
|
|
182
182
|
GROUP BY c.citation_type ORDER BY cnt DESC`, values);
|
|
183
|
-
const byPart = await p.query(`SELECT c.cfr_part AS part, COUNT(*) AS cnt
|
|
183
|
+
const byPart = await p.query(`SELECT COALESCE(c.cfr_part::text, 'N/A') AS part, COUNT(*) AS cnt
|
|
184
184
|
FROM citation c JOIN warning_letter wl ON c.letter_id = wl.id ${where}
|
|
185
185
|
GROUP BY c.cfr_part ORDER BY cnt DESC LIMIT 15`, values);
|
|
186
186
|
const byCategory = await p.query(`SELECT c.normalized_category AS category, COUNT(*) AS cnt,
|
|
@@ -190,7 +190,7 @@ export async function citationAnalysis(params) {
|
|
|
190
190
|
) THEN true ELSE false END AS csa_relevant
|
|
191
191
|
FROM citation c JOIN warning_letter wl ON c.letter_id = wl.id ${where}
|
|
192
192
|
GROUP BY c.normalized_category ORDER BY cnt DESC`, values);
|
|
193
|
-
const topSections = await p.query(`SELECT c.cfr_full, c.normalized_category AS description, COUNT(*) AS cnt
|
|
193
|
+
const topSections = await p.query(`SELECT COALESCE(c.cfr_full, 'N/A') AS cfr_full, c.normalized_category AS description, COUNT(*) AS cnt
|
|
194
194
|
FROM citation c JOIN warning_letter wl ON c.letter_id = wl.id ${where}
|
|
195
195
|
GROUP BY c.cfr_full, c.normalized_category ORDER BY cnt DESC LIMIT 20`, values);
|
|
196
196
|
const total = parseInt(totalResult.rows[0]?.total ?? "0");
|
|
@@ -214,6 +214,48 @@ export async function citationAnalysis(params) {
|
|
|
214
214
|
csa_percentage: total > 0 ? Math.round((csaCount / total) * 100 * 10) / 10 : 0,
|
|
215
215
|
};
|
|
216
216
|
}
|
|
217
|
+
export async function companyEnrichedProfile(companyName) {
|
|
218
|
+
const p = getPool();
|
|
219
|
+
if (!p)
|
|
220
|
+
return null;
|
|
221
|
+
const wlResult = await p.query(`SELECT
|
|
222
|
+
to_char(to_timestamp(issue_date), 'YYYY-MM-DD') AS issue_date,
|
|
223
|
+
center, regime, csa_relevant,
|
|
224
|
+
COALESCE(letter_subject, '') AS subject
|
|
225
|
+
FROM warning_letter
|
|
226
|
+
WHERE LOWER(company_name) LIKE LOWER($1)
|
|
227
|
+
ORDER BY issue_date DESC
|
|
228
|
+
LIMIT 10`, [`%${companyName}%`]);
|
|
229
|
+
const wlCount = await p.query(`SELECT COUNT(*) AS cnt FROM warning_letter WHERE LOWER(company_name) LIKE LOWER($1)`, [`%${companyName}%`]);
|
|
230
|
+
const inspResult = await p.query(`SELECT
|
|
231
|
+
CASE WHEN inspection_end_date IS NOT NULL
|
|
232
|
+
THEN to_char(to_timestamp(inspection_end_date), 'YYYY-MM-DD')
|
|
233
|
+
ELSE ''
|
|
234
|
+
END AS inspection_date,
|
|
235
|
+
center, product_area, csa_relevant
|
|
236
|
+
FROM observation_483
|
|
237
|
+
WHERE LOWER(company_name) LIKE LOWER($1)
|
|
238
|
+
ORDER BY inspection_end_date DESC
|
|
239
|
+
LIMIT 10`, [`%${companyName}%`]);
|
|
240
|
+
const inspCount = await p.query(`SELECT COUNT(*) AS cnt FROM observation_483 WHERE LOWER(company_name) LIKE LOWER($1)`, [`%${companyName}%`]);
|
|
241
|
+
return {
|
|
242
|
+
warning_letters: wlResult.rows.map((r) => ({
|
|
243
|
+
issue_date: r.issue_date ?? "",
|
|
244
|
+
center: r.center ?? "",
|
|
245
|
+
regime: r.regime ?? "",
|
|
246
|
+
csa_relevant: r.csa_relevant ?? false,
|
|
247
|
+
subject: r.subject ?? "",
|
|
248
|
+
})),
|
|
249
|
+
inspections: inspResult.rows.map((r) => ({
|
|
250
|
+
inspection_date: r.inspection_date ?? "",
|
|
251
|
+
center: r.center ?? "",
|
|
252
|
+
product_area: r.product_area ?? "",
|
|
253
|
+
csa_relevant: r.csa_relevant ?? false,
|
|
254
|
+
})),
|
|
255
|
+
total_warning_letters: parseInt(wlCount.rows[0]?.cnt ?? "0"),
|
|
256
|
+
total_inspections: parseInt(inspCount.rows[0]?.cnt ?? "0"),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
217
259
|
export async function supplierQualification(companyName) {
|
|
218
260
|
const p = getPool();
|
|
219
261
|
if (!p)
|
|
@@ -232,14 +274,19 @@ export async function supplierQualification(companyName) {
|
|
|
232
274
|
WHERE LOWER(company_name) LIKE LOWER($1)
|
|
233
275
|
ORDER BY issue_date DESC
|
|
234
276
|
LIMIT 20`, [`%${companyName}%`]);
|
|
235
|
-
// 483 inspections
|
|
236
|
-
const inspResult = await p.query(`SELECT
|
|
277
|
+
// 483 inspections (inspection_end_date is stored as Unix epoch)
|
|
278
|
+
const inspResult = await p.query(`SELECT
|
|
279
|
+
CASE WHEN inspection_end_date IS NOT NULL
|
|
280
|
+
THEN to_char(to_timestamp(inspection_end_date), 'YYYY-MM-DD')
|
|
281
|
+
ELSE ''
|
|
282
|
+
END AS inspection_date,
|
|
283
|
+
center, product_area, csa_relevant
|
|
237
284
|
FROM observation_483
|
|
238
285
|
WHERE LOWER(company_name) LIKE LOWER($1)
|
|
239
286
|
ORDER BY inspection_end_date DESC
|
|
240
287
|
LIMIT 20`, [`%${companyName}%`]);
|
|
241
288
|
// Citation summary
|
|
242
|
-
const citResult = await p.query(`SELECT c.cfr_full, c.normalized_category, COUNT(*) AS cnt
|
|
289
|
+
const citResult = await p.query(`SELECT COALESCE(c.cfr_full, 'N/A') AS cfr_full, c.normalized_category, COUNT(*) AS cnt
|
|
243
290
|
FROM citation c
|
|
244
291
|
JOIN warning_letter wl ON c.letter_id = wl.id
|
|
245
292
|
WHERE LOWER(wl.company_name) LIKE LOWER($1)
|
|
@@ -267,7 +314,7 @@ export async function supplierQualification(companyName) {
|
|
|
267
314
|
url: r.url ?? "",
|
|
268
315
|
})),
|
|
269
316
|
inspections: inspResult.rows.map((r) => ({
|
|
270
|
-
inspection_end_date: r.
|
|
317
|
+
inspection_end_date: r.inspection_date ?? "",
|
|
271
318
|
center: r.center ?? "",
|
|
272
319
|
product_area: r.product_area ?? "",
|
|
273
320
|
csa_relevant: r.csa_relevant ?? false,
|
package/dist/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAEpB,IAAI,IAAI,GAAmB,IAAI,CAAC;AAEhC,MAAM,UAAU,OAAO;IACrB,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClD,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,GAAG,IAAI,IAAI,CAAC;QACd,gBAAgB;QAChB,GAAG,EAAE,CAAC;QACN,iBAAiB,EAAE,KAAK;QACxB,uBAAuB,EAAE,IAAI;KAC9B,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC9C,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,+BAA+B;IAEvE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO,EACL,2HAA2H;SAC9H,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,gDAAgD;SAC1D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAmBD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB;IAEnB,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpB,wBAAwB;IACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,KAAK,CAC5B;;;;8CAI0C,EAC1C,CAAC,IAAI,WAAW,GAAG,CAAC,CACrB,CAAC;IAEF,qBAAqB;IACrB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,KAAK,CAC7B;;;;;;;;iDAQ6C,EAC7C,CAAC,IAAI,WAAW,GAAG,CAAC,CACrB,CAAC;IAEF,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAC1B;;;;;;cAMU,EACV,CAAC,IAAI,WAAW,GAAG,CAAC,CACrB,CAAC;IAEF,wBAAwB;IACxB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,KAAK,CAC9B;;;;8CAI0C,EAC1C,CAAC,IAAI,WAAW,GAAG,CAAC,CACrB,CAAC;IAEF,gBAAgB;IAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,KAAK,CAC5B;;;;sBAIkB,EAClB,CAAC,IAAI,WAAW,GAAG,CAAC,CACrB,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC,CAAC;IAE/D,mCAAmC;IACnC,uEAAuE;IACvE,MAAM,qBAAqB,GAAG,GAAG,CAAC;IAClC,MAAM,KAAK,GACT,KAAK,GAAG,EAAE,GAAG,qBAAqB;QAClC,OAAO,GAAG,EAAE;QACZ,MAAM,GAAG,CAAC;QACV,OAAO,GAAG,EAAE;QACZ,SAAS,GAAG,CAAC,CAAC;IAEhB,IAAI,SAAS,GAAgC,KAAK,CAAC;IACnD,IAAI,KAAK,IAAI,GAAG;QAAE,SAAS,GAAG,UAAU,CAAC;SACpC,IAAI,KAAK,IAAI,GAAG;QAAE,SAAS,GAAG,MAAM,CAAC;SACrC,IAAI,KAAK,IAAI,EAAE;QAAE,SAAS,GAAG,UAAU,CAAC;IAE7C,OAAO;QACL,YAAY,EAAE,WAAW;QACzB,oBAAoB,EAAE,OAAO;QAC7B,wBAAwB,EAAE,KAAK;QAC/B,eAAe,EAAE,QAAQ;QACzB,aAAa,EAAE,MAAM;QACrB,gBAAgB,EAAE,SAAS;QAC3B,oBAAoB,EAAE,OAAO;QAC7B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,mBAAmB;YAC/B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;QACH,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B,UAAU,EAAE,SAAS;QACrB,qBAAqB,EAAE,qBAAqB;KAC7C,CAAC;AACJ,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAKtC;IACC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,4BAA4B,GAAG,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,KAAK,CAC/B,0FAA0F,KAAK,EAAE,EACjG,MAAM,CACP,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAC1B;qEACiE,KAAK;gDAC1B,EAC5C,MAAM,CACP,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAC1B;qEACiE,KAAK;oDACtB,EAChD,MAAM,CACP,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,KAAK,CAC9B;;;;;qEAKiE,KAAK;sDACpB,EAClD,MAAM,CACP,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,KAAK,CAC/B;qEACiE,KAAK;2EACC,EACvE,MAAM,CACP,CAAC;IAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI;SAC7B,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;SAClC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAM,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7D,OAAO;QACL,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChF,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpF,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC5C,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YACtB,YAAY,EAAE,CAAC,CAAC,YAAY;SAC7B,CAAC,CAAC;QACH,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;QACH,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;KAC/E,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/fda-client.d.ts
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* openFDA API Client
|
|
3
3
|
*
|
|
4
|
-
* Wraps
|
|
5
|
-
* 1.
|
|
6
|
-
* 2.
|
|
7
|
-
* 3. openFDA Enforcement/Recalls API
|
|
4
|
+
* Wraps public openFDA data sources:
|
|
5
|
+
* 1. Enforcement/Recalls (drug, device, food)
|
|
6
|
+
* 2. Device Adverse Events (MAUDE database)
|
|
8
7
|
*/
|
|
9
|
-
export interface WarningLetter {
|
|
10
|
-
posted_date: string;
|
|
11
|
-
issue_date: string;
|
|
12
|
-
company_name: string;
|
|
13
|
-
issuing_office: string;
|
|
14
|
-
subject: string;
|
|
15
|
-
response_letter: string;
|
|
16
|
-
closeout_letter: string;
|
|
17
|
-
excerpt: string;
|
|
18
|
-
url: string;
|
|
19
|
-
}
|
|
20
8
|
export interface EnforcementRecord {
|
|
21
9
|
recall_number: string;
|
|
22
10
|
status: string;
|
|
@@ -37,58 +25,45 @@ export interface EnforcementRecord {
|
|
|
37
25
|
termination_date: string;
|
|
38
26
|
event_id: string;
|
|
39
27
|
}
|
|
40
|
-
export interface
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
url?: string;
|
|
28
|
+
export interface DeviceEventRecord {
|
|
29
|
+
report_number: string;
|
|
30
|
+
event_type: string;
|
|
31
|
+
date_received: string;
|
|
32
|
+
date_of_event: string;
|
|
33
|
+
device_name: string;
|
|
34
|
+
manufacturer: string;
|
|
35
|
+
brand_name: string;
|
|
36
|
+
product_code: string;
|
|
37
|
+
event_description: string;
|
|
38
|
+
patient_outcome: string[];
|
|
39
|
+
device_class: string;
|
|
53
40
|
}
|
|
54
|
-
export declare function
|
|
41
|
+
export declare function searchEnforcement(params: {
|
|
55
42
|
search?: string;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
offset?: number;
|
|
59
|
-
date_from?: string;
|
|
60
|
-
date_to?: string;
|
|
61
|
-
}): Promise<{
|
|
62
|
-
total: number;
|
|
63
|
-
letters: WarningLetter[];
|
|
64
|
-
}>;
|
|
65
|
-
export declare function get483XlsxUrls(): Record<string, string>;
|
|
66
|
-
export declare function searchInspections(params: {
|
|
67
|
-
firm_name?: string;
|
|
43
|
+
product_type?: "drug" | "device" | "food";
|
|
44
|
+
classification?: "Class I" | "Class II" | "Class III";
|
|
68
45
|
state?: string;
|
|
69
|
-
|
|
70
|
-
project_area?: string;
|
|
71
|
-
limit?: number;
|
|
72
|
-
offset?: number;
|
|
46
|
+
recalling_firm?: string;
|
|
73
47
|
date_from?: string;
|
|
74
48
|
date_to?: string;
|
|
49
|
+
limit?: number;
|
|
50
|
+
skip?: number;
|
|
75
51
|
}): Promise<{
|
|
76
52
|
total: number;
|
|
77
|
-
|
|
78
|
-
note?: string;
|
|
53
|
+
records: EnforcementRecord[];
|
|
79
54
|
}>;
|
|
80
|
-
export declare function
|
|
55
|
+
export declare function searchDeviceEvents(params: {
|
|
81
56
|
search?: string;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
57
|
+
manufacturer?: string;
|
|
58
|
+
brand_name?: string;
|
|
59
|
+
event_type?: "Injury" | "Malfunction" | "Death" | "Other";
|
|
60
|
+
product_code?: string;
|
|
86
61
|
date_from?: string;
|
|
87
62
|
date_to?: string;
|
|
88
63
|
limit?: number;
|
|
89
64
|
skip?: number;
|
|
90
65
|
}): Promise<{
|
|
91
66
|
total: number;
|
|
92
|
-
|
|
67
|
+
events: DeviceEventRecord[];
|
|
93
68
|
}>;
|
|
94
69
|
//# sourceMappingURL=fda-client.d.ts.map
|
package/dist/fda-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fda-client.d.ts","sourceRoot":"","sources":["../src/fda-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fda-client.d.ts","sourceRoot":"","sources":["../src/fda-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B,EAAE,MAAM,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,cAAc,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAmE3D;AAID,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,CA0E1D"}
|
package/dist/fda-client.js
CHANGED
|
@@ -1,135 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* openFDA API Client
|
|
3
3
|
*
|
|
4
|
-
* Wraps
|
|
5
|
-
* 1.
|
|
6
|
-
* 2.
|
|
7
|
-
* 3. openFDA Enforcement/Recalls API
|
|
4
|
+
* Wraps public openFDA data sources:
|
|
5
|
+
* 1. Enforcement/Recalls (drug, device, food)
|
|
6
|
+
* 2. Device Adverse Events (MAUDE database)
|
|
8
7
|
*/
|
|
9
|
-
const FDA_BASE = "https://www.fda.gov";
|
|
10
8
|
const OPENFDA_BASE = "https://api.fda.gov";
|
|
11
|
-
// ─── Warning Letters (FDA.gov DataTables) ────────────────────────────────────
|
|
12
|
-
export async function searchWarningLetters(params) {
|
|
13
|
-
const userLimit = Math.min(params.limit ?? 25, 100);
|
|
14
|
-
const offset = params.offset ?? 0;
|
|
15
|
-
const hasPostFilters = !!(params.search || params.issuing_office || params.date_from || params.date_to);
|
|
16
|
-
// FDA.gov DataTables/Solr endpoint does NOT support server-side filtering.
|
|
17
|
-
// search[value] only influences Solr relevance ranking (floats matches to top).
|
|
18
|
-
// All filtering (company name, issuing_office, dates) must happen client-side.
|
|
19
|
-
// When any filter is active, fetch max 100 rows to maximize the filterable pool.
|
|
20
|
-
const fetchLimit = hasPostFilters ? 100 : userLimit;
|
|
21
|
-
const url = new URL("/datatables/views/ajax", FDA_BASE);
|
|
22
|
-
url.searchParams.set("view_name", "warning_letter_solr_index");
|
|
23
|
-
url.searchParams.set("view_display_id", "warning_letter_solr_block");
|
|
24
|
-
url.searchParams.set("view_base_path", "inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters/datatables-data");
|
|
25
|
-
url.searchParams.set("draw", "1");
|
|
26
|
-
url.searchParams.set("start", String(offset));
|
|
27
|
-
url.searchParams.set("length", String(fetchLimit));
|
|
28
|
-
// Use search[value] for Solr relevance ranking — not a filter, but floats matches up
|
|
29
|
-
if (params.search) {
|
|
30
|
-
url.searchParams.set("search[value]", params.search);
|
|
31
|
-
}
|
|
32
|
-
const resp = await fetch(url.toString(), {
|
|
33
|
-
headers: {
|
|
34
|
-
Accept: "application/json",
|
|
35
|
-
"User-Agent": "fda-mcp-server/1.0",
|
|
36
|
-
},
|
|
37
|
-
});
|
|
38
|
-
if (!resp.ok) {
|
|
39
|
-
throw new Error(`FDA Warning Letters API returned ${resp.status}: ${resp.statusText}`);
|
|
40
|
-
}
|
|
41
|
-
const data = await resp.json();
|
|
42
|
-
const records = (data.data ?? []).map((row) => parseWarningLetterRow(row));
|
|
43
|
-
// Client-side filtering — the only filtering that actually works on this endpoint
|
|
44
|
-
let filtered = records;
|
|
45
|
-
if (params.search) {
|
|
46
|
-
const searchTerm = params.search.toLowerCase();
|
|
47
|
-
filtered = filtered.filter((r) => r.company_name.toLowerCase().includes(searchTerm) ||
|
|
48
|
-
r.subject.toLowerCase().includes(searchTerm) ||
|
|
49
|
-
r.excerpt.toLowerCase().includes(searchTerm));
|
|
50
|
-
}
|
|
51
|
-
if (params.issuing_office) {
|
|
52
|
-
const office = params.issuing_office.toLowerCase();
|
|
53
|
-
filtered = filtered.filter((r) => r.issuing_office.toLowerCase().includes(office));
|
|
54
|
-
}
|
|
55
|
-
if (params.date_from || params.date_to) {
|
|
56
|
-
filtered = filtered.filter((r) => {
|
|
57
|
-
const d = r.issue_date;
|
|
58
|
-
if (params.date_from && d < params.date_from)
|
|
59
|
-
return false;
|
|
60
|
-
if (params.date_to && d > params.date_to)
|
|
61
|
-
return false;
|
|
62
|
-
return true;
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
// Trim to user-requested limit after filtering
|
|
66
|
-
const result = filtered.slice(0, userLimit);
|
|
67
|
-
return {
|
|
68
|
-
// Always report the actual filtered count, never the server's misleading recordsTotal
|
|
69
|
-
total: hasPostFilters ? filtered.length : (data.recordsFiltered ?? data.recordsTotal ?? records.length),
|
|
70
|
-
letters: result,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
function parseWarningLetterRow(row) {
|
|
74
|
-
// DataTables rows come as arrays or objects depending on config
|
|
75
|
-
if (Array.isArray(row)) {
|
|
76
|
-
return {
|
|
77
|
-
posted_date: stripHtml(row[0] ?? ""),
|
|
78
|
-
issue_date: stripHtml(row[1] ?? ""),
|
|
79
|
-
company_name: stripHtml(row[2] ?? ""),
|
|
80
|
-
issuing_office: stripHtml(row[3] ?? ""),
|
|
81
|
-
subject: stripHtml(row[4] ?? ""),
|
|
82
|
-
response_letter: stripHtml(row[5] ?? ""),
|
|
83
|
-
closeout_letter: stripHtml(row[6] ?? ""),
|
|
84
|
-
excerpt: stripHtml(row[7] ?? ""),
|
|
85
|
-
url: extractHref(row[2] ?? "") || extractHref(row[4] ?? ""),
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
// Object format
|
|
89
|
-
return {
|
|
90
|
-
posted_date: stripHtml(row.field_letter_posted_date ?? row.posted_date ?? ""),
|
|
91
|
-
issue_date: stripHtml(row.field_letter_issue_datetime ?? row.issue_date ?? ""),
|
|
92
|
-
company_name: stripHtml(row.field_company_name_warning_lette ?? row.company_name ?? ""),
|
|
93
|
-
issuing_office: stripHtml(row.field_issuing_office ?? row.issuing_office ?? ""),
|
|
94
|
-
subject: stripHtml(row.field_subject ?? row.subject ?? ""),
|
|
95
|
-
response_letter: stripHtml(row.field_response_letter_date ?? row.response_letter ?? ""),
|
|
96
|
-
closeout_letter: stripHtml(row.field_closeout_letter_date ?? row.closeout_letter ?? ""),
|
|
97
|
-
excerpt: stripHtml(row.field_letter_body ?? row.excerpt ?? ""),
|
|
98
|
-
url: extractHref(row.field_company_name_warning_lette ?? row.field_subject ?? ""),
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
// ─── 483 Inspections ─────────────────────────────────────────────────────────
|
|
102
|
-
//
|
|
103
|
-
// FDA removed the DataTables AJAX endpoint for 483 observations. The page now
|
|
104
|
-
// only offers annual XLSX downloads (FY2006–FY2025). Live search is not
|
|
105
|
-
// possible. This function queries the enriched fda-csa-data PostgreSQL dataset
|
|
106
|
-
// when DATABASE_URL is set, or returns a helpful message pointing to XLSX
|
|
107
|
-
// downloads and the enriched dataset.
|
|
108
|
-
const FDA_483_XLSX_URLS = {
|
|
109
|
-
"2025": "https://www.fda.gov/media/190190/download?attachment",
|
|
110
|
-
"2024": "https://www.fda.gov/media/185090/download?attachment",
|
|
111
|
-
"2023": "https://www.fda.gov/media/174101/download?attachment",
|
|
112
|
-
"2022": "https://www.fda.gov/media/163420/download?attachment",
|
|
113
|
-
"2021": "https://www.fda.gov/media/153238/download?attachment",
|
|
114
|
-
};
|
|
115
|
-
export function get483XlsxUrls() {
|
|
116
|
-
return FDA_483_XLSX_URLS;
|
|
117
|
-
}
|
|
118
|
-
export async function searchInspections(params) {
|
|
119
|
-
// FDA removed the live DataTables endpoint — no live search available.
|
|
120
|
-
// Return empty with an explanation so the tool handler can provide guidance.
|
|
121
|
-
return {
|
|
122
|
-
total: 0,
|
|
123
|
-
inspections: [],
|
|
124
|
-
note: "FDA removed the live 483 inspection search endpoint. 483 observation data is now only available as annual XLSX downloads from FDA.gov, or via the enriched fda-csa-data dataset (use csa_risk_assessment or supplier_qualification_report tools for 483 data).",
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
9
|
// ─── openFDA Enforcement (Recalls) ───────────────────────────────────────────
|
|
128
10
|
export async function searchEnforcement(params) {
|
|
129
11
|
const product = params.product_type ?? "drug";
|
|
130
12
|
const limit = Math.min(params.limit ?? 25, 100);
|
|
131
13
|
const skip = params.skip ?? 0;
|
|
132
|
-
// Build openFDA search query
|
|
133
14
|
const searchParts = [];
|
|
134
15
|
if (params.search) {
|
|
135
16
|
searchParts.push(`"${params.search}"`);
|
|
@@ -155,17 +36,14 @@ export async function searchEnforcement(params) {
|
|
|
155
36
|
url.searchParams.set("limit", String(limit));
|
|
156
37
|
url.searchParams.set("skip", String(skip));
|
|
157
38
|
const resp = await fetch(url.toString(), {
|
|
158
|
-
headers: {
|
|
159
|
-
"User-Agent": "fda-mcp-server/1.0",
|
|
160
|
-
},
|
|
39
|
+
headers: { "User-Agent": "fda-mcp-server/1.0" },
|
|
161
40
|
});
|
|
162
41
|
if (!resp.ok) {
|
|
163
|
-
if (resp.status === 404)
|
|
42
|
+
if (resp.status === 404)
|
|
164
43
|
return { total: 0, records: [] };
|
|
165
|
-
}
|
|
166
44
|
throw new Error(`openFDA enforcement API returned ${resp.status}: ${resp.statusText}`);
|
|
167
45
|
}
|
|
168
|
-
const data = await resp.json();
|
|
46
|
+
const data = (await resp.json());
|
|
169
47
|
const records = (data.results ?? []).map((r) => ({
|
|
170
48
|
recall_number: r.recall_number ?? "",
|
|
171
49
|
status: r.status ?? "",
|
|
@@ -191,25 +69,72 @@ export async function searchEnforcement(params) {
|
|
|
191
69
|
records,
|
|
192
70
|
};
|
|
193
71
|
}
|
|
194
|
-
// ───
|
|
195
|
-
function
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
if (
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if (
|
|
212
|
-
|
|
213
|
-
|
|
72
|
+
// ─── openFDA Device Adverse Events (MAUDE) ───────────────────────────────────
|
|
73
|
+
export async function searchDeviceEvents(params) {
|
|
74
|
+
const limit = Math.min(params.limit ?? 25, 100);
|
|
75
|
+
const skip = params.skip ?? 0;
|
|
76
|
+
const searchParts = [];
|
|
77
|
+
if (params.search) {
|
|
78
|
+
searchParts.push(`"${params.search}"`);
|
|
79
|
+
}
|
|
80
|
+
if (params.manufacturer) {
|
|
81
|
+
searchParts.push(`device.manufacturer_d_name:"${params.manufacturer}"`);
|
|
82
|
+
}
|
|
83
|
+
if (params.brand_name) {
|
|
84
|
+
searchParts.push(`device.brand_name:"${params.brand_name}"`);
|
|
85
|
+
}
|
|
86
|
+
if (params.event_type) {
|
|
87
|
+
searchParts.push(`event_type:"${params.event_type}"`);
|
|
88
|
+
}
|
|
89
|
+
if (params.product_code) {
|
|
90
|
+
searchParts.push(`device.generic_name:"${params.product_code}"`);
|
|
91
|
+
}
|
|
92
|
+
if (params.date_from || params.date_to) {
|
|
93
|
+
const from = params.date_from?.replace(/-/g, "") ?? "19000101";
|
|
94
|
+
const to = params.date_to?.replace(/-/g, "") ?? "20991231";
|
|
95
|
+
searchParts.push(`date_received:[${from}+TO+${to}]`);
|
|
96
|
+
}
|
|
97
|
+
const url = new URL("/device/event.json", OPENFDA_BASE);
|
|
98
|
+
if (searchParts.length > 0) {
|
|
99
|
+
url.searchParams.set("search", searchParts.join("+AND+"));
|
|
100
|
+
}
|
|
101
|
+
url.searchParams.set("limit", String(limit));
|
|
102
|
+
url.searchParams.set("skip", String(skip));
|
|
103
|
+
const resp = await fetch(url.toString(), {
|
|
104
|
+
headers: { "User-Agent": "fda-mcp-server/1.0" },
|
|
105
|
+
});
|
|
106
|
+
if (!resp.ok) {
|
|
107
|
+
if (resp.status === 404)
|
|
108
|
+
return { total: 0, events: [] };
|
|
109
|
+
throw new Error(`openFDA device events API returned ${resp.status}: ${resp.statusText}`);
|
|
110
|
+
}
|
|
111
|
+
const data = (await resp.json());
|
|
112
|
+
const events = (data.results ?? []).map((r) => {
|
|
113
|
+
const device = r.device?.[0] ?? {};
|
|
114
|
+
const description = (r.mdr_text ?? [])
|
|
115
|
+
.map((t) => t.text ?? "")
|
|
116
|
+
.filter(Boolean)
|
|
117
|
+
.join(" ")
|
|
118
|
+
.substring(0, 500) || "";
|
|
119
|
+
return {
|
|
120
|
+
report_number: r.report_number ?? "",
|
|
121
|
+
event_type: r.event_type ?? "",
|
|
122
|
+
date_received: r.date_received ?? "",
|
|
123
|
+
date_of_event: r.date_of_event ?? "",
|
|
124
|
+
device_name: device.generic_name ?? "",
|
|
125
|
+
manufacturer: device.manufacturer_d_name ?? "",
|
|
126
|
+
brand_name: device.brand_name ?? "",
|
|
127
|
+
product_code: device.device_report_product_code ?? "",
|
|
128
|
+
event_description: description,
|
|
129
|
+
patient_outcome: r.patient?.[0]?.patient_sequence_number
|
|
130
|
+
? (r.patient ?? []).map((p) => p.sequence_number_outcome?.[0] ?? "").filter(Boolean)
|
|
131
|
+
: [],
|
|
132
|
+
device_class: device.device_class ?? "",
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
total: data.meta?.results?.total ?? events.length,
|
|
137
|
+
events,
|
|
138
|
+
};
|
|
214
139
|
}
|
|
215
140
|
//# sourceMappingURL=fda-client.js.map
|
package/dist/fda-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fda-client.js","sourceRoot":"","sources":["../src/fda-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fda-client.js","sourceRoot":"","sources":["../src/fda-client.ts"],"names":[],"mappings":"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"}
|