@mcpassure/mcp-anvisa-bulario 0.0.1 → 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.en.md +196 -0
- package/README.md +192 -5
- package/dist/cache/sqlite-cache.d.ts +13 -0
- package/dist/cache/sqlite-cache.d.ts.map +1 -0
- package/dist/cache/sqlite-cache.js +58 -0
- package/dist/cache/sqlite-cache.js.map +1 -0
- package/dist/cache/types.d.ts +17 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +7 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/repository.d.ts +47 -0
- package/dist/domain/repository.d.ts.map +1 -0
- package/dist/domain/repository.js +88 -0
- package/dist/domain/repository.js.map +1 -0
- package/dist/domain/types.d.ts +2 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +2 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/handlers.d.ts +24 -0
- package/dist/prompts/handlers.d.ts.map +1 -0
- package/dist/prompts/handlers.js +267 -0
- package/dist/prompts/handlers.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +35 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/schemas.d.ts +22 -0
- package/dist/prompts/schemas.d.ts.map +1 -0
- package/dist/prompts/schemas.js +15 -0
- package/dist/prompts/schemas.js.map +1 -0
- package/dist/resources/handlers.d.ts +5 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +145 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/index.d.ts +4 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +48 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/schemas/tools.d.ts +134 -0
- package/dist/schemas/tools.d.ts.map +1 -0
- package/dist/schemas/tools.js +106 -0
- package/dist/schemas/tools.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +25 -0
- package/dist/server.js.map +1 -0
- package/dist/sources/anvisa-api.d.ts +25 -0
- package/dist/sources/anvisa-api.d.ts.map +1 -0
- package/dist/sources/anvisa-api.js +153 -0
- package/dist/sources/anvisa-api.js.map +1 -0
- package/dist/sources/anvisa-dados-abertos.d.ts +12 -0
- package/dist/sources/anvisa-dados-abertos.d.ts.map +1 -0
- package/dist/sources/anvisa-dados-abertos.js +27 -0
- package/dist/sources/anvisa-dados-abertos.js.map +1 -0
- package/dist/sources/anvisa-portal.d.ts +12 -0
- package/dist/sources/anvisa-portal.d.ts.map +1 -0
- package/dist/sources/anvisa-portal.js +27 -0
- package/dist/sources/anvisa-portal.js.map +1 -0
- package/dist/sources/types.d.ts +56 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +2 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/tools/buscar-por-classe-terapeutica.d.ts +4 -0
- package/dist/tools/buscar-por-classe-terapeutica.d.ts.map +1 -0
- package/dist/tools/buscar-por-classe-terapeutica.js +30 -0
- package/dist/tools/buscar-por-classe-terapeutica.js.map +1 -0
- package/dist/tools/buscar-por-nome.d.ts +4 -0
- package/dist/tools/buscar-por-nome.d.ts.map +1 -0
- package/dist/tools/buscar-por-nome.js +25 -0
- package/dist/tools/buscar-por-nome.js.map +1 -0
- package/dist/tools/buscar-por-principio-ativo.d.ts +4 -0
- package/dist/tools/buscar-por-principio-ativo.d.ts.map +1 -0
- package/dist/tools/buscar-por-principio-ativo.js +25 -0
- package/dist/tools/buscar-por-principio-ativo.js.map +1 -0
- package/dist/tools/consultar-bula.d.ts +4 -0
- package/dist/tools/consultar-bula.d.ts.map +1 -0
- package/dist/tools/consultar-bula.js +42 -0
- package/dist/tools/consultar-bula.js.map +1 -0
- package/dist/tools/filtrar-por-tarja.d.ts +4 -0
- package/dist/tools/filtrar-por-tarja.d.ts.map +1 -0
- package/dist/tools/filtrar-por-tarja.js +29 -0
- package/dist/tools/filtrar-por-tarja.js.map +1 -0
- package/dist/tools/listar-apresentacoes.d.ts +4 -0
- package/dist/tools/listar-apresentacoes.d.ts.map +1 -0
- package/dist/tools/listar-apresentacoes.js +34 -0
- package/dist/tools/listar-apresentacoes.js.map +1 -0
- package/dist/tools/shared.d.ts +97 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +34 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/utils/backoff.d.ts +8 -0
- package/dist/utils/backoff.d.ts.map +1 -0
- package/dist/utils/backoff.js +37 -0
- package/dist/utils/backoff.js.map +1 -0
- package/dist/utils/http.d.ts +45 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +175 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/meta.d.ts +8 -0
- package/dist/utils/meta.d.ts.map +1 -0
- package/dist/utils/meta.js +13 -0
- package/dist/utils/meta.js.map +1 -0
- package/dist/utils/playwright-http.d.ts +2 -0
- package/dist/utils/playwright-http.d.ts.map +1 -0
- package/dist/utils/playwright-http.js +4 -0
- package/dist/utils/playwright-http.js.map +1 -0
- package/package.json +68 -6
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { DEFAULT_TTLS } from "../cache/types.js";
|
|
2
|
+
import { buildMeta } from "../utils/meta.js";
|
|
3
|
+
export class AllSourcesFailedError extends Error {
|
|
4
|
+
failures;
|
|
5
|
+
constructor(failures) {
|
|
6
|
+
const detail = failures.map((f) => `${f.source}: ${f.error.message}`).join("; ");
|
|
7
|
+
super(`Todas as fontes falharam. ${detail}`);
|
|
8
|
+
this.name = "AllSourcesFailedError";
|
|
9
|
+
this.failures = failures;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class BularioRepository {
|
|
13
|
+
cache;
|
|
14
|
+
sources;
|
|
15
|
+
degradedThresholdDays;
|
|
16
|
+
constructor(cache, sources, degradedThresholdDays = 30) {
|
|
17
|
+
this.cache = cache;
|
|
18
|
+
this.sources = sources;
|
|
19
|
+
this.degradedThresholdDays = degradedThresholdDays;
|
|
20
|
+
}
|
|
21
|
+
async searchByName(params) {
|
|
22
|
+
const key = `search:name:${params.nome.toLowerCase().trim()}:${params.pagina ?? 1}:${params.count ?? 10}`;
|
|
23
|
+
return this._withCache(key, DEFAULT_TTLS.searchResults, (src) => src.searchByName(params));
|
|
24
|
+
}
|
|
25
|
+
async searchByPrincipalAtivo(params) {
|
|
26
|
+
const key = `search:pa:${params.principioAtivo.toLowerCase().trim()}:${params.pagina ?? 1}:${params.count ?? 10}`;
|
|
27
|
+
return this._withCache(key, DEFAULT_TTLS.searchResults, (src) => src.searchByPrincipalAtivo(params));
|
|
28
|
+
}
|
|
29
|
+
async searchByClasseTerapeutica(params) {
|
|
30
|
+
const key = `search:ct:${params.classeTerapeutica.toLowerCase().trim()}:${params.pagina ?? 1}:${params.count ?? 10}`;
|
|
31
|
+
return this._withCache(key, DEFAULT_TTLS.searchResults, (src) => src.searchByClasseTerapeutica(params));
|
|
32
|
+
}
|
|
33
|
+
async searchByTarja(params) {
|
|
34
|
+
const key = `search:tarja:${params.tarja}:${params.pagina ?? 1}:${params.count ?? 10}`;
|
|
35
|
+
return this._withCache(key, DEFAULT_TTLS.searchResults, (src) => src.searchByTarja(params));
|
|
36
|
+
}
|
|
37
|
+
async getDetalhes(numProcesso) {
|
|
38
|
+
const key = `medicamento:${numProcesso}`;
|
|
39
|
+
return this._withCache(key, DEFAULT_TTLS.medicamentoDetalhes, (src) => src.getDetalhes(numProcesso));
|
|
40
|
+
}
|
|
41
|
+
async getApresentacoes(numProcesso) {
|
|
42
|
+
const key = `apresentacoes:${numProcesso}`;
|
|
43
|
+
return this._withCache(key, DEFAULT_TTLS.medicamentoDetalhes, (src) => src.getApresentacoes(numProcesso));
|
|
44
|
+
}
|
|
45
|
+
async getBulaLink(idBulaProtegido) {
|
|
46
|
+
const key = `bula:link:${idBulaProtegido}`;
|
|
47
|
+
return this._withCache(key, DEFAULT_TTLS.bulaLink, (src) => src.getBulaLink(idBulaProtegido));
|
|
48
|
+
}
|
|
49
|
+
async _withCache(key, ttlSeconds, fetch) {
|
|
50
|
+
const cached = this.cache.get(key);
|
|
51
|
+
if (cached) {
|
|
52
|
+
return {
|
|
53
|
+
data: cached.value,
|
|
54
|
+
_meta: buildMeta({
|
|
55
|
+
dataBase: cached.data_da_base,
|
|
56
|
+
fonte: "cache_local",
|
|
57
|
+
modo: "cache_local",
|
|
58
|
+
degradedThresholdDays: this.degradedThresholdDays,
|
|
59
|
+
}),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const failures = [];
|
|
63
|
+
for (const source of this.sources) {
|
|
64
|
+
try {
|
|
65
|
+
const data = await fetch(source);
|
|
66
|
+
const dataBase = new Date().toISOString();
|
|
67
|
+
this.cache.set(key, data, ttlSeconds, dataBase);
|
|
68
|
+
return {
|
|
69
|
+
data,
|
|
70
|
+
_meta: buildMeta({
|
|
71
|
+
dataBase,
|
|
72
|
+
fonte: source.name,
|
|
73
|
+
modo: "online",
|
|
74
|
+
degradedThresholdDays: this.degradedThresholdDays,
|
|
75
|
+
}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
failures.push({
|
|
80
|
+
source: source.name,
|
|
81
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
throw new AllSourcesFailedError(failures);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/domain/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,EAC/B,kBAAkB,EAClB,4BAA4B,EAC5B,mBAAmB,EACnB,YAAY,EACZ,KAAK,GACN,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { SqliteCache } from "./cache/sqlite-cache.js";
|
|
4
|
+
import { loadConfig } from "./config.js";
|
|
5
|
+
import { BularioRepository } from "./domain/repository.js";
|
|
6
|
+
import { createServer } from "./server.js";
|
|
7
|
+
import { AnvisaApiSource } from "./sources/anvisa-api.js";
|
|
8
|
+
async function main() {
|
|
9
|
+
const config = loadConfig();
|
|
10
|
+
const cache = new SqliteCache(config.cachePath);
|
|
11
|
+
const sources = [
|
|
12
|
+
new AnvisaApiSource(config.anvisaBaseUrl, config.maxRetries, config.baseDelayMs, config.requestTimeoutMs),
|
|
13
|
+
// v1.1+: new AnvisaDadosAbertosSource(config),
|
|
14
|
+
// v1.2+: new AnvisaPortalBularioSource(config),
|
|
15
|
+
];
|
|
16
|
+
const repository = new BularioRepository(cache, sources);
|
|
17
|
+
const server = createServer(repository);
|
|
18
|
+
const transport = new StdioServerTransport();
|
|
19
|
+
async function shutdown() {
|
|
20
|
+
// Fecha sources que têm recursos vivos (Playwright browser, etc.)
|
|
21
|
+
await Promise.allSettled(sources.map((s) => s.close?.()));
|
|
22
|
+
cache.close();
|
|
23
|
+
process.exit(0);
|
|
24
|
+
}
|
|
25
|
+
process.on("SIGINT", () => {
|
|
26
|
+
void shutdown();
|
|
27
|
+
});
|
|
28
|
+
process.on("SIGTERM", () => {
|
|
29
|
+
void shutdown();
|
|
30
|
+
});
|
|
31
|
+
await server.connect(transport);
|
|
32
|
+
}
|
|
33
|
+
main().catch((err) => {
|
|
34
|
+
process.stderr.write(`Fatal error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,OAAO,GAAoB;QAC/B,IAAI,eAAe,CACjB,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,gBAAgB,CACxB;QACD,+CAA+C;QAC/C,gDAAgD;KACjD,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,KAAK,UAAU,QAAQ;QACrB,kEAAkE;QAClE,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IBularioRepository } from "../domain/repository.js";
|
|
2
|
+
import type { AnalisarApresentacoesInputType, CompararTarjasPorClasseInputType, VerificarMedicamentoCompletoInputType } from "./schemas.js";
|
|
3
|
+
export declare function handleVerificarMedicamentoCompleto(input: VerificarMedicamentoCompletoInputType, repository: IBularioRepository): Promise<Array<{
|
|
4
|
+
role: "user" | "assistant";
|
|
5
|
+
content: {
|
|
6
|
+
type: "text";
|
|
7
|
+
text: string;
|
|
8
|
+
};
|
|
9
|
+
}>>;
|
|
10
|
+
export declare function handleCompararTarjasPorClasse(input: CompararTarjasPorClasseInputType, repository: IBularioRepository): Promise<Array<{
|
|
11
|
+
role: "user" | "assistant";
|
|
12
|
+
content: {
|
|
13
|
+
type: "text";
|
|
14
|
+
text: string;
|
|
15
|
+
};
|
|
16
|
+
}>>;
|
|
17
|
+
export declare function handleAnalisarApresentacoes(input: AnalisarApresentacoesInputType, repository: IBularioRepository): Promise<Array<{
|
|
18
|
+
role: "user" | "assistant";
|
|
19
|
+
content: {
|
|
20
|
+
type: "text";
|
|
21
|
+
text: string;
|
|
22
|
+
};
|
|
23
|
+
}>>;
|
|
24
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/prompts/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EACV,8BAA8B,EAC9B,gCAAgC,EAChC,qCAAqC,EACtC,MAAM,cAAc,CAAC;AAOtB,wBAAsB,kCAAkC,CACtD,KAAK,EAAE,qCAAqC,EAC5C,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC,CA+FzF;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,gCAAgC,EACvC,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC,CA8EzF;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,8BAA8B,EACrC,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC,CAwGzF"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
const DISCLAIMER = "\n\n⚠️ **Aviso ANVISA:** Informações de consulta oficial. Decisões clínicas ou regulatórias " +
|
|
2
|
+
"devem ser baseadas na fonte ANVISA atualizada. Medicamentos sob Tarja Preta estão sujeitos " +
|
|
3
|
+
"à Portaria 344/98 — controle especial obrigatório.";
|
|
4
|
+
export async function handleVerificarMedicamentoCompleto(input, repository) {
|
|
5
|
+
const { termo, incluir_apresentacoes, incluir_bula } = input;
|
|
6
|
+
let medicamentos = [];
|
|
7
|
+
let fonteUsada = "";
|
|
8
|
+
try {
|
|
9
|
+
const result = await repository.searchByName({ nome: termo, count: 5 });
|
|
10
|
+
medicamentos = result.data;
|
|
11
|
+
fonteUsada = "buscar_por_nome";
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
try {
|
|
15
|
+
const result = await repository.searchByPrincipalAtivo({ principioAtivo: termo, count: 5 });
|
|
16
|
+
medicamentos = result.data;
|
|
17
|
+
fonteUsada = "buscar_por_principio_ativo";
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
role: "assistant",
|
|
24
|
+
content: {
|
|
25
|
+
type: "text",
|
|
26
|
+
text: `Não foi possível localizar medicamentos para o termo "${termo}": ${message}${DISCLAIMER}`,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (medicamentos.length === 0) {
|
|
33
|
+
return [
|
|
34
|
+
{
|
|
35
|
+
role: "assistant",
|
|
36
|
+
content: {
|
|
37
|
+
type: "text",
|
|
38
|
+
text: `Nenhum medicamento encontrado para o termo "${termo}" no Bulário ANVISA.${DISCLAIMER}`,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
const sections = [
|
|
44
|
+
`## Medicamentos encontrados para "${termo}" (via ${fonteUsada})`,
|
|
45
|
+
`Total de resultados: ${medicamentos.length}`,
|
|
46
|
+
];
|
|
47
|
+
for (const med of medicamentos) {
|
|
48
|
+
const linhas = [
|
|
49
|
+
`\n### ${med.nomeProduto}`,
|
|
50
|
+
`- **Empresa:** ${med.empresa}`,
|
|
51
|
+
`- **Nº Processo ANVISA:** ${med.numProcesso}`,
|
|
52
|
+
];
|
|
53
|
+
if (med.dataAtualizacao)
|
|
54
|
+
linhas.push(`- **Última atualização:** ${med.dataAtualizacao}`);
|
|
55
|
+
if (incluir_apresentacoes && med.numProcesso) {
|
|
56
|
+
try {
|
|
57
|
+
const ap = await repository.getApresentacoes(med.numProcesso);
|
|
58
|
+
if (ap.data.length > 0) {
|
|
59
|
+
linhas.push(`- **Apresentações (${ap.data.length}):**`);
|
|
60
|
+
for (const a of ap.data.slice(0, 5)) {
|
|
61
|
+
linhas.push(` - ${a.descricao}`);
|
|
62
|
+
}
|
|
63
|
+
if (ap.data.length > 5)
|
|
64
|
+
linhas.push(` - ... (+${ap.data.length - 5} apresentações)`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
linhas.push(`- **Apresentações:** não disponível`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (incluir_bula && med.idBulaPacienteProtegido) {
|
|
72
|
+
try {
|
|
73
|
+
const bula = await repository.getBulaLink(med.idBulaPacienteProtegido);
|
|
74
|
+
if (bula.data.urlPdf) {
|
|
75
|
+
linhas.push(`- **Bula (paciente):** ${bula.data.urlPdf}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
linhas.push(`- **Bula:** não disponível`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
sections.push(linhas.join("\n"));
|
|
83
|
+
}
|
|
84
|
+
sections.push(DISCLAIMER);
|
|
85
|
+
return [
|
|
86
|
+
{
|
|
87
|
+
role: "user",
|
|
88
|
+
content: { type: "text", text: `Verificar medicamento: ${termo}` },
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
role: "assistant",
|
|
92
|
+
content: { type: "text", text: sections.join("\n") },
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
export async function handleCompararTarjasPorClasse(input, repository) {
|
|
97
|
+
const { classe_terapeutica, limite } = input;
|
|
98
|
+
let medicamentos = [];
|
|
99
|
+
try {
|
|
100
|
+
const result = await repository.searchByClasseTerapeutica({
|
|
101
|
+
classeTerapeutica: classe_terapeutica,
|
|
102
|
+
count: limite,
|
|
103
|
+
});
|
|
104
|
+
medicamentos = result.data;
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
108
|
+
return [
|
|
109
|
+
{
|
|
110
|
+
role: "assistant",
|
|
111
|
+
content: {
|
|
112
|
+
type: "text",
|
|
113
|
+
text: `Erro ao buscar classe terapêutica "${classe_terapeutica}": ${message}${DISCLAIMER}`,
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
];
|
|
117
|
+
}
|
|
118
|
+
const grupos = {
|
|
119
|
+
LIVRE: [],
|
|
120
|
+
VERMELHA: [],
|
|
121
|
+
PRETA: [],
|
|
122
|
+
DESCONHECIDA: [],
|
|
123
|
+
};
|
|
124
|
+
for (const med of medicamentos) {
|
|
125
|
+
if (med.numProcesso) {
|
|
126
|
+
try {
|
|
127
|
+
const det = await repository.getDetalhes(med.numProcesso);
|
|
128
|
+
const tarja = det.data.tarja ?? "DESCONHECIDA";
|
|
129
|
+
const grupo = tarja in grupos ? tarja : "DESCONHECIDA";
|
|
130
|
+
grupos[grupo].push(med.nomeProduto);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
grupos.DESCONHECIDA.push(med.nomeProduto);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const total = medicamentos.length;
|
|
138
|
+
const lines = [
|
|
139
|
+
`## Classe Terapêutica: ${classe_terapeutica}`,
|
|
140
|
+
`**Total analisado:** ${total} medicamento(s)`,
|
|
141
|
+
"",
|
|
142
|
+
`- **Sem Tarja (Venda Livre):** ${grupos.LIVRE.length}`,
|
|
143
|
+
`- **Tarja Amarela (controle leve/antibióticos):** — *não categorizado pelo Bulário ANVISA*`,
|
|
144
|
+
`- **Tarja Vermelha (prescrição obrigatória):** ${grupos.VERMELHA.length}`,
|
|
145
|
+
`- **Tarja Preta (controle especial — Portaria 344/98):** ${grupos.PRETA.length}`,
|
|
146
|
+
`- **Não categorizado:** ${grupos.DESCONHECIDA.length}`,
|
|
147
|
+
];
|
|
148
|
+
if (grupos.PRETA.length > 0) {
|
|
149
|
+
lines.push("", `⚠️ **Tarja Preta identificados (${grupos.PRETA.length}):** ${grupos.PRETA.slice(0, 10).join(", ")}`);
|
|
150
|
+
}
|
|
151
|
+
lines.push(DISCLAIMER);
|
|
152
|
+
return [
|
|
153
|
+
{
|
|
154
|
+
role: "user",
|
|
155
|
+
content: {
|
|
156
|
+
type: "text",
|
|
157
|
+
text: `Comparar tarjas para classe terapêutica: ${classe_terapeutica}`,
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
role: "assistant",
|
|
162
|
+
content: { type: "text", text: lines.join("\n") },
|
|
163
|
+
},
|
|
164
|
+
];
|
|
165
|
+
}
|
|
166
|
+
export async function handleAnalisarApresentacoes(input, repository) {
|
|
167
|
+
const { nome_medicamento, agrupar_por } = input;
|
|
168
|
+
let medicamentos = [];
|
|
169
|
+
try {
|
|
170
|
+
const result = await repository.searchByName({ nome: nome_medicamento, count: 10 });
|
|
171
|
+
medicamentos = result.data;
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
175
|
+
return [
|
|
176
|
+
{
|
|
177
|
+
role: "assistant",
|
|
178
|
+
content: {
|
|
179
|
+
type: "text",
|
|
180
|
+
text: `Erro ao buscar "${nome_medicamento}": ${message}${DISCLAIMER}`,
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
];
|
|
184
|
+
}
|
|
185
|
+
if (medicamentos.length === 0) {
|
|
186
|
+
return [
|
|
187
|
+
{
|
|
188
|
+
role: "assistant",
|
|
189
|
+
content: {
|
|
190
|
+
type: "text",
|
|
191
|
+
text: `Nenhum medicamento encontrado para "${nome_medicamento}".${DISCLAIMER}`,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
];
|
|
195
|
+
}
|
|
196
|
+
const agrupado = {};
|
|
197
|
+
for (const med of medicamentos.slice(0, 5)) {
|
|
198
|
+
if (!med.numProcesso)
|
|
199
|
+
continue;
|
|
200
|
+
try {
|
|
201
|
+
const apResult = await repository.getApresentacoes(med.numProcesso);
|
|
202
|
+
for (const ap of apResult.data) {
|
|
203
|
+
let chave = "Outros";
|
|
204
|
+
const desc = ap.descricao ?? "";
|
|
205
|
+
if (agrupar_por === "concentracao") {
|
|
206
|
+
const match = desc.match(/\d+[\s,.]?\d*\s*(mg|mcg|g|ml|%|UI|mEq)/i);
|
|
207
|
+
chave = match ? match[0].trim() : "Concentração não identificada";
|
|
208
|
+
}
|
|
209
|
+
else if (agrupar_por === "forma_farmaceutica") {
|
|
210
|
+
const formas = [
|
|
211
|
+
"comprimido",
|
|
212
|
+
"cápsula",
|
|
213
|
+
"xarope",
|
|
214
|
+
"solução",
|
|
215
|
+
"injetável",
|
|
216
|
+
"pomada",
|
|
217
|
+
"gel",
|
|
218
|
+
"spray",
|
|
219
|
+
"supositório",
|
|
220
|
+
"adesivo",
|
|
221
|
+
];
|
|
222
|
+
const forma = formas.find((f) => desc.toLowerCase().includes(f));
|
|
223
|
+
chave = forma ? forma.charAt(0).toUpperCase() + forma.slice(1) : "Forma não identificada";
|
|
224
|
+
}
|
|
225
|
+
else if (agrupar_por === "fabricante") {
|
|
226
|
+
chave = med.empresa ?? "Fabricante desconhecido";
|
|
227
|
+
}
|
|
228
|
+
if (!agrupado[chave])
|
|
229
|
+
agrupado[chave] = [];
|
|
230
|
+
agrupado[chave].push(`${med.nomeProduto} — ${desc}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// ignora erros individuais de apresentações
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const totalApresentacoes = Object.values(agrupado).flat().length;
|
|
238
|
+
const lines = [
|
|
239
|
+
`## Apresentações de "${nome_medicamento}" agrupadas por ${agrupar_por}`,
|
|
240
|
+
`**Total de apresentações analisadas:** ${totalApresentacoes}`,
|
|
241
|
+
"",
|
|
242
|
+
];
|
|
243
|
+
for (const [grupo, items] of Object.entries(agrupado).sort()) {
|
|
244
|
+
lines.push(`### ${grupo} (${items.length})`);
|
|
245
|
+
for (const item of items.slice(0, 5)) {
|
|
246
|
+
lines.push(`- ${item}`);
|
|
247
|
+
}
|
|
248
|
+
if (items.length > 5)
|
|
249
|
+
lines.push(`- ... (+${items.length - 5} itens)`);
|
|
250
|
+
lines.push("");
|
|
251
|
+
}
|
|
252
|
+
lines.push(DISCLAIMER);
|
|
253
|
+
return [
|
|
254
|
+
{
|
|
255
|
+
role: "user",
|
|
256
|
+
content: {
|
|
257
|
+
type: "text",
|
|
258
|
+
text: `Analisar apresentações de ${nome_medicamento} agrupando por ${agrupar_por}`,
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
role: "assistant",
|
|
263
|
+
content: { type: "text", text: lines.join("\n") },
|
|
264
|
+
},
|
|
265
|
+
];
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/prompts/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { IBularioRepository } from "../domain/repository.js";
|
|
3
|
+
export declare function registerPrompts(server: McpServer, repository: IBularioRepository): void;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAYlE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAgDvF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { handleAnalisarApresentacoes, handleCompararTarjasPorClasse, handleVerificarMedicamentoCompleto, } from "./handlers.js";
|
|
2
|
+
import { AnalisarApresentacoesInput, CompararTarjasPorClasseInput, VerificarMedicamentoCompletoInput, } from "./schemas.js";
|
|
3
|
+
export function registerPrompts(server, repository) {
|
|
4
|
+
server.registerPrompt("verificar_medicamento_completo", {
|
|
5
|
+
title: "Verificar Medicamento Completo",
|
|
6
|
+
description: "Consolida nome, princípio ativo, classe terapêutica, tarja, apresentações e (opcional) bula " +
|
|
7
|
+
"para um termo de busca. Tenta busca por nome e fallback por princípio ativo.",
|
|
8
|
+
argsSchema: VerificarMedicamentoCompletoInput.shape,
|
|
9
|
+
}, async (args) => {
|
|
10
|
+
const parsed = VerificarMedicamentoCompletoInput.parse(args);
|
|
11
|
+
const messages = await handleVerificarMedicamentoCompleto(parsed, repository);
|
|
12
|
+
return { messages };
|
|
13
|
+
});
|
|
14
|
+
server.registerPrompt("comparar_tarjas_por_classe", {
|
|
15
|
+
title: "Comparar Tarjas por Classe Terapêutica",
|
|
16
|
+
description: "Agrupa medicamentos de uma classe terapêutica por tarja regulatória. " +
|
|
17
|
+
"Útil para entender o perfil de prescrição e controle de uma classe.",
|
|
18
|
+
argsSchema: CompararTarjasPorClasseInput.shape,
|
|
19
|
+
}, async (args) => {
|
|
20
|
+
const parsed = CompararTarjasPorClasseInput.parse(args);
|
|
21
|
+
const messages = await handleCompararTarjasPorClasse(parsed, repository);
|
|
22
|
+
return { messages };
|
|
23
|
+
});
|
|
24
|
+
server.registerPrompt("analisar_apresentacoes", {
|
|
25
|
+
title: "Analisar Apresentações de Medicamento",
|
|
26
|
+
description: "Agrupa as apresentações comerciais de um medicamento por concentração, " +
|
|
27
|
+
"forma farmacêutica ou fabricante.",
|
|
28
|
+
argsSchema: AnalisarApresentacoesInput.shape,
|
|
29
|
+
}, async (args) => {
|
|
30
|
+
const parsed = AnalisarApresentacoesInput.parse(args);
|
|
31
|
+
const messages = await handleAnalisarApresentacoes(parsed, repository);
|
|
32
|
+
return { messages };
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,iCAAiC,GAClC,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,UAA8B;IAC/E,MAAM,CAAC,cAAc,CACnB,gCAAgC,EAChC;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,8FAA8F;YAC9F,8EAA8E;QAChF,UAAU,EAAE,iCAAiC,CAAC,KAAK;KACpD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,iCAAiC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,kCAAkC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9E,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,cAAc,CACnB,4BAA4B,EAC5B;QACE,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,uEAAuE;YACvE,qEAAqE;QACvE,UAAU,EAAE,4BAA4B,CAAC,KAAK;KAC/C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,6BAA6B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACzE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,cAAc,CACnB,wBAAwB,EACxB;QACE,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EACT,yEAAyE;YACzE,mCAAmC;QACrC,UAAU,EAAE,0BAA0B,CAAC,KAAK;KAC7C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const VerificarMedicamentoCompletoInput: z.ZodObject<{
|
|
3
|
+
termo: z.ZodString;
|
|
4
|
+
incluir_apresentacoes: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
incluir_bula: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
export type VerificarMedicamentoCompletoInputType = z.infer<typeof VerificarMedicamentoCompletoInput>;
|
|
8
|
+
export declare const CompararTarjasPorClasseInput: z.ZodObject<{
|
|
9
|
+
classe_terapeutica: z.ZodString;
|
|
10
|
+
limite: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
export type CompararTarjasPorClasseInputType = z.infer<typeof CompararTarjasPorClasseInput>;
|
|
13
|
+
export declare const AnalisarApresentacoesInput: z.ZodObject<{
|
|
14
|
+
nome_medicamento: z.ZodString;
|
|
15
|
+
agrupar_por: z.ZodDefault<z.ZodEnum<{
|
|
16
|
+
concentracao: "concentracao";
|
|
17
|
+
forma_farmaceutica: "forma_farmaceutica";
|
|
18
|
+
fabricante: "fabricante";
|
|
19
|
+
}>>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
export type AnalisarApresentacoesInputType = z.infer<typeof AnalisarApresentacoesInput>;
|
|
22
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/prompts/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iCAAiC;;;;iBAI5C,CAAC;AACH,MAAM,MAAM,qCAAqC,GAAG,CAAC,CAAC,KAAK,CACzD,OAAO,iCAAiC,CACzC,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC;AACH,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAE5F,eAAO,MAAM,0BAA0B;;;;;;;iBAGrC,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const VerificarMedicamentoCompletoInput = z.object({
|
|
3
|
+
termo: z.string().min(2, "Nome comercial, princípio ativo ou parte"),
|
|
4
|
+
incluir_apresentacoes: z.boolean().default(true),
|
|
5
|
+
incluir_bula: z.boolean().default(false).describe("Se true, inclui resumo da bula (mais caro)"),
|
|
6
|
+
});
|
|
7
|
+
export const CompararTarjasPorClasseInput = z.object({
|
|
8
|
+
classe_terapeutica: z.string().min(3),
|
|
9
|
+
limite: z.number().int().min(1).max(100).default(50),
|
|
10
|
+
});
|
|
11
|
+
export const AnalisarApresentacoesInput = z.object({
|
|
12
|
+
nome_medicamento: z.string().min(2),
|
|
13
|
+
agrupar_por: z.enum(["concentracao", "forma_farmaceutica", "fabricante"]).default("concentracao"),
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/prompts/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0CAA0C,CAAC;IACpE,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CAChG,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACrD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;CAClG,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IBularioRepository } from "../domain/repository.js";
|
|
2
|
+
export declare const TARJAS_JSON: string;
|
|
3
|
+
export declare function getClassesTerapeuticasJson(_repository: IBularioRepository): Promise<string>;
|
|
4
|
+
export declare const SCOPE_MARKDOWN = "# Escopo do MCP @mcpassure/mcp-anvisa-bulario\n\n## \uD83C\uDDE7\uD83C\uDDF7 Portugu\u00EAs (BR)\n\n### O que este MCP faz\n\nConsulta ao **Bul\u00E1rio Eletr\u00F4nico da ANVISA** (Ag\u00EAncia Nacional de Vigil\u00E2ncia Sanit\u00E1ria), incluindo:\n\n- Busca de medicamentos por nome comercial, princ\u00EDpio ativo, classe terap\u00EAutica ou tarja\n- Recupera\u00E7\u00E3o de bulas (paciente e profissional) em PDF via n\u00FAmero de registro ANVISA\n- Listagem de apresenta\u00E7\u00F5es comerciais (concentra\u00E7\u00E3o, forma farmac\u00EAutica, fabricante)\n- Filtragem por tarja regulat\u00F3ria (Livre, Vermelha, Preta)\n- Transport Playwright resistente a prote\u00E7\u00E3o Cloudflare do portal ANVISA\n- Cache local SQLite para redu\u00E7\u00E3o de lat\u00EAncia e requisi\u00E7\u00F5es repetidas\n\n### O que este MCP N\u00C3O faz\n\n- \u274C N\u00E3o substitui consulta direta \u00E0 ANVISA para fins regulat\u00F3rios oficiais\n- \u274C N\u00E3o fornece pre\u00E7os de medicamentos (consulte CMED/ANVISA)\n- \u274C N\u00E3o verifica intera\u00E7\u00F5es medicamentosas\n- \u274C N\u00E3o emite receitas ou laudos m\u00E9dicos\n- \u274C N\u00E3o cobre medicamentos fitoter\u00E1picos, cosm\u00E9ticos ou saneantes\n- \u274C N\u00E3o acessa dados de farmacovigil\u00E2ncia ou notifica\u00E7\u00F5es de eventos adversos\n\n### \u26A0\uFE0F Disclaimer regulat\u00F3rio\n\nDados obtidos do Bul\u00E1rio Eletr\u00F4nico ANVISA com lat\u00EAncia de cache configur\u00E1vel.\n**Decis\u00F5es cl\u00EDnicas ou regulat\u00F3rias devem sempre utilizar a fonte ANVISA oficial e atualizada.**\n\nMedicamentos sob **Tarja Preta** (Portaria SVS/MS 344/1998) est\u00E3o sujeitos a controle especial \u2014\npsicotr\u00F3picos, entorpecentes, precursores e outras subst\u00E2ncias de controle especial.\nO uso inadequado \u00E9 crime previsto em lei.\n\n---\n\n## \uD83C\uDDFA\uD83C\uDDF8 English\n\n### What this MCP does\n\nQueries the **ANVISA Electronic Drug Information Database** (Brazilian Health Regulatory Agency), including:\n\n- Search medications by trade name, active ingredient (INN/DCB), therapeutic class, or controlled-substance tier\n- Retrieve patient and prescriber leaflets (bulas) in PDF via ANVISA registration number\n- List commercial presentations (dosage, pharmaceutical form, manufacturer)\n- Filter by regulatory tier (Sem Tarja/OTC, Tarja Vermelha/Rx, Tarja Preta/controlled)\n- Cloudflare-resistant Playwright transport for the ANVISA portal\n- Local SQLite cache to reduce latency on repeated queries\n\n### What this MCP does NOT do\n\n- \u274C Does not replace official ANVISA consultation for regulatory compliance\n- \u274C Does not provide drug pricing (see CMED/ANVISA)\n- \u274C Does not check drug interactions\n- \u274C Does not issue prescriptions or medical reports\n- \u274C Does not cover phytotherapeutics, cosmetics, or sanitizers\n- \u274C Does not access pharmacovigilance data or adverse event reports\n\n### \u26A0\uFE0F Regulatory disclaimer\n\nData sourced from the ANVISA Electronic Drug Information Database with configurable cache latency.\n**Clinical or regulatory decisions must always use the official and up-to-date ANVISA source.**\n\nMedications classified as **Tarja Preta** (Black-banded \u2014 controlled substance under Brazilian\nOrdinance SVS/MS 344/1998) are subject to special control \u2014 psychotropics, narcotics, precursors,\nand other controlled substances. Misuse is a criminal offense under Brazilian law.\n";
|
|
5
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/resources/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,eAAO,MAAM,WAAW,QA4BvB,CAAC;AAgDF,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWjG;AAED,eAAO,MAAM,cAAc,m6GAiE1B,CAAC"}
|