@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,153 @@
|
|
|
1
|
+
import { HttpClient } from "../utils/http.js";
|
|
2
|
+
const TARJA_MAP = {
|
|
3
|
+
LIVRE: "LIVRE",
|
|
4
|
+
"SEM TARJA": "LIVRE",
|
|
5
|
+
"TARJA VERMELHA": "VERMELHA",
|
|
6
|
+
VERMELHA: "VERMELHA",
|
|
7
|
+
"TARJA PRETA": "PRETA",
|
|
8
|
+
PRETA: "PRETA",
|
|
9
|
+
};
|
|
10
|
+
function normalizeTarja(raw) {
|
|
11
|
+
if (!raw)
|
|
12
|
+
return undefined;
|
|
13
|
+
return TARJA_MAP[raw.toUpperCase().trim()];
|
|
14
|
+
}
|
|
15
|
+
function mapListaItem(item) {
|
|
16
|
+
return {
|
|
17
|
+
numProcesso: item.numProcesso ?? "",
|
|
18
|
+
nomeProduto: item.nomeProduto ?? "",
|
|
19
|
+
empresa: item.razaoSocial ?? "",
|
|
20
|
+
cnpj: item.cnpj,
|
|
21
|
+
expediente: item.expediente,
|
|
22
|
+
idBulaPacienteProtegido: item.idBulaPacienteProtegido,
|
|
23
|
+
idBulaProfissionalProtegido: item.idBulaProfissionalProtegido,
|
|
24
|
+
dataAtualizacao: item.dataAtualizacao,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Extrai razão social da empresa (string ou objeto). */
|
|
28
|
+
function extractRazaoSocial(empresa) {
|
|
29
|
+
if (!empresa)
|
|
30
|
+
return "";
|
|
31
|
+
if (typeof empresa === "string")
|
|
32
|
+
return empresa;
|
|
33
|
+
return empresa.razaoSocial ?? empresa.nomeFantasia ?? "";
|
|
34
|
+
}
|
|
35
|
+
/** Extrai CNPJ da empresa (objeto). */
|
|
36
|
+
function extractCnpj(empresa) {
|
|
37
|
+
if (!empresa || typeof empresa === "string")
|
|
38
|
+
return undefined;
|
|
39
|
+
return empresa.cnpj;
|
|
40
|
+
}
|
|
41
|
+
/** Extrai numProcesso (que pode vir como string em "processo" ou objeto {numero}). */
|
|
42
|
+
function extractNumProcesso(detalhes, fallback) {
|
|
43
|
+
if (detalhes.numProcesso)
|
|
44
|
+
return detalhes.numProcesso;
|
|
45
|
+
if (typeof detalhes.processo === "string")
|
|
46
|
+
return detalhes.processo;
|
|
47
|
+
if (detalhes.processo?.numProcesso)
|
|
48
|
+
return detalhes.processo.numProcesso;
|
|
49
|
+
if (detalhes.processo?.numero)
|
|
50
|
+
return detalhes.processo.numero;
|
|
51
|
+
return fallback;
|
|
52
|
+
}
|
|
53
|
+
/** Normaliza classesTerapeuticas — pode vir como array de strings ou objetos. */
|
|
54
|
+
function extractClassesTerapeuticas(raw) {
|
|
55
|
+
if (!raw || !Array.isArray(raw))
|
|
56
|
+
return [];
|
|
57
|
+
return raw
|
|
58
|
+
.map((c) => (typeof c === "string" ? c : (c.descricao ?? "")))
|
|
59
|
+
.filter((s) => Boolean(s));
|
|
60
|
+
}
|
|
61
|
+
export class AnvisaApiSource {
|
|
62
|
+
name = "anvisa_api";
|
|
63
|
+
client;
|
|
64
|
+
/**
|
|
65
|
+
* @param baseUrl URL base da API ANVISA (ex: https://consultas.anvisa.gov.br)
|
|
66
|
+
* @param maxRetries Tentativas de retry em falhas transitórias
|
|
67
|
+
* @param baseDelayMs Delay base do backoff exponencial
|
|
68
|
+
* @param timeoutMs Timeout por request em ms
|
|
69
|
+
* @param client Opcional — HttpClient pré-construído. Útil pra testes (mock)
|
|
70
|
+
* e pra compartilhar browser entre múltiplos sources.
|
|
71
|
+
*/
|
|
72
|
+
constructor(baseUrl, maxRetries, baseDelayMs, timeoutMs, client) {
|
|
73
|
+
this.client = client ?? new HttpClient(baseUrl, maxRetries, baseDelayMs, timeoutMs);
|
|
74
|
+
}
|
|
75
|
+
async close() {
|
|
76
|
+
if (this.client.close) {
|
|
77
|
+
await this.client.close();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async searchByName(params) {
|
|
81
|
+
return this._search({ "filter[nomeProduto]": params.nome }, params);
|
|
82
|
+
}
|
|
83
|
+
async searchByPrincipalAtivo(params) {
|
|
84
|
+
return this._search({ "filter[nomeProduto]": params.principioAtivo }, params);
|
|
85
|
+
}
|
|
86
|
+
async searchByClasseTerapeutica(params) {
|
|
87
|
+
return this._search({ "filter[nomeProduto]": params.classeTerapeutica }, params);
|
|
88
|
+
}
|
|
89
|
+
async searchByTarja(params) {
|
|
90
|
+
// A API de listagem ANVISA não expõe filtro direto por tarja.
|
|
91
|
+
// Retorna página genérica; consumidores devem chamar consultar_bula
|
|
92
|
+
// pra confirmar a tarja de cada resultado.
|
|
93
|
+
return this._search({}, { pagina: params.pagina, count: params.count ?? 10 });
|
|
94
|
+
}
|
|
95
|
+
async getDetalhes(numProcesso) {
|
|
96
|
+
const raw = (await this.client.get(`/api/consulta/medicamento/produtos/${encodeURIComponent(numProcesso)}`));
|
|
97
|
+
const classes = extractClassesTerapeuticas(raw.classesTerapeuticas);
|
|
98
|
+
const empresaRazaoSocial = extractRazaoSocial(raw.empresa) || raw.razaoSocial || "";
|
|
99
|
+
const empresaCnpj = extractCnpj(raw.empresa);
|
|
100
|
+
return {
|
|
101
|
+
numProcesso: extractNumProcesso(raw, numProcesso),
|
|
102
|
+
// Schema novo usa "nomeComercial"; fallback pra "nomeProduto" do schema legado
|
|
103
|
+
nomeProduto: raw.nomeComercial ?? raw.nomeProduto ?? "",
|
|
104
|
+
empresa: empresaRazaoSocial,
|
|
105
|
+
cnpj: empresaCnpj,
|
|
106
|
+
// Schema novo: codigoBulaPaciente / codigoBulaProfissional são JWTs com exp curta
|
|
107
|
+
idBulaPacienteProtegido: raw.codigoBulaPaciente ?? raw.idBulaPacienteProtegido ?? undefined,
|
|
108
|
+
idBulaProfissionalProtegido: raw.codigoBulaProfissional ?? raw.idBulaProfissionalProtegido ?? undefined,
|
|
109
|
+
tarja: normalizeTarja(raw.tarja),
|
|
110
|
+
classesTerapeuticas: classes.length > 0 ? classes : undefined,
|
|
111
|
+
principioAtivo: raw.principioAtivo ?? undefined,
|
|
112
|
+
numeroRegistro: raw.numeroRegistro ?? undefined,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async getApresentacoes(numProcesso) {
|
|
116
|
+
const raw = (await this.client.get(`/api/consulta/medicamento/produtos/${encodeURIComponent(numProcesso)}`));
|
|
117
|
+
if (!raw.apresentacoes || !Array.isArray(raw.apresentacoes))
|
|
118
|
+
return [];
|
|
119
|
+
return raw.apresentacoes
|
|
120
|
+
.map((a) => ({
|
|
121
|
+
descricao: a.descricao ?? a.embalagem ?? a.nomeApresentacao ?? "",
|
|
122
|
+
}))
|
|
123
|
+
.filter((a) => a.descricao);
|
|
124
|
+
}
|
|
125
|
+
async getBulaLink(idBulaProtegido) {
|
|
126
|
+
try {
|
|
127
|
+
const result = (await this.client.get(`/api/consulta/medicamentos/arquivo/bula/parecer/${encodeURIComponent(idBulaProtegido)}/`));
|
|
128
|
+
const urlPdf = typeof result === "string" ? result : (result?.link ?? result?.url);
|
|
129
|
+
return { id: idBulaProtegido, urlPdf: urlPdf ?? undefined };
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Se falhar, retorna só o ID; consumidor pode construir URL manualmente
|
|
133
|
+
return { id: idBulaProtegido };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async _search(filters, params) {
|
|
137
|
+
// ANVISA mudou para paginação 1-indexed em 2026.
|
|
138
|
+
// Antes: page=0 era a primeira página. Agora: page=1 é a primeira.
|
|
139
|
+
// Page=0 dispara erro `setFirstResult(-10)` no Hibernate (cálculo (0-1)*count).
|
|
140
|
+
const page = params.pagina ?? 1;
|
|
141
|
+
const count = params.count ?? 10;
|
|
142
|
+
const queryParams = {
|
|
143
|
+
page: String(page),
|
|
144
|
+
count: String(count),
|
|
145
|
+
...filters,
|
|
146
|
+
};
|
|
147
|
+
const raw = (await this.client.get("/api/consulta/bulario", queryParams));
|
|
148
|
+
if (!raw?.content || !Array.isArray(raw.content))
|
|
149
|
+
return [];
|
|
150
|
+
return raw.content.map(mapListaItem);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=anvisa-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anvisa-api.js","sourceRoot":"","sources":["../../src/sources/anvisa-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Apresentacao, BulaLink, BularioSource, MedicamentoDetalhes, MedicamentoResumo, SearchByClasseTerapeuticaParams, SearchByNameParams, SearchByPrincipalAtivoParams, SearchByTarjaParams } from "./types.js";
|
|
2
|
+
export declare class AnvisaDadosAbertosSource implements BularioSource {
|
|
3
|
+
readonly name = "anvisa_dados_abertos";
|
|
4
|
+
searchByName(_params: SearchByNameParams): Promise<MedicamentoResumo[]>;
|
|
5
|
+
searchByPrincipalAtivo(_params: SearchByPrincipalAtivoParams): Promise<MedicamentoResumo[]>;
|
|
6
|
+
searchByClasseTerapeutica(_params: SearchByClasseTerapeuticaParams): Promise<MedicamentoResumo[]>;
|
|
7
|
+
searchByTarja(_params: SearchByTarjaParams): Promise<MedicamentoResumo[]>;
|
|
8
|
+
getDetalhes(_numProcesso: string): Promise<MedicamentoDetalhes>;
|
|
9
|
+
getApresentacoes(_numProcesso: string): Promise<Apresentacao[]>;
|
|
10
|
+
getBulaLink(_idBulaProtegido: string): Promise<BulaLink>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=anvisa-dados-abertos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anvisa-dados-abertos.d.ts","sourceRoot":"","sources":["../../src/sources/anvisa-dados-abertos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,EAC/B,kBAAkB,EAClB,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAIpB,qBAAa,wBAAyB,YAAW,aAAa;IAC5D,QAAQ,CAAC,IAAI,0BAA0B;IAEvC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAMvE,sBAAsB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAM3F,yBAAyB,CACvB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAM/B,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAMzE,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM/D,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM/D,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAKzD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Stub — implementação prevista para v1.1 (sync offline via CSV da ANVISA Dados Abertos)
|
|
2
|
+
// https://dados.gov.br/dados/conjuntos-dados/medicamentos-registrados-no-brasil
|
|
3
|
+
export class AnvisaDadosAbertosSource {
|
|
4
|
+
name = "anvisa_dados_abertos";
|
|
5
|
+
searchByName(_params) {
|
|
6
|
+
return Promise.reject(new Error("NotImplemented: AnvisaDadosAbertosSource — previsto para v1.1"));
|
|
7
|
+
}
|
|
8
|
+
searchByPrincipalAtivo(_params) {
|
|
9
|
+
return Promise.reject(new Error("NotImplemented: AnvisaDadosAbertosSource — previsto para v1.1"));
|
|
10
|
+
}
|
|
11
|
+
searchByClasseTerapeutica(_params) {
|
|
12
|
+
return Promise.reject(new Error("NotImplemented: AnvisaDadosAbertosSource — previsto para v1.1"));
|
|
13
|
+
}
|
|
14
|
+
searchByTarja(_params) {
|
|
15
|
+
return Promise.reject(new Error("NotImplemented: AnvisaDadosAbertosSource — previsto para v1.1"));
|
|
16
|
+
}
|
|
17
|
+
getDetalhes(_numProcesso) {
|
|
18
|
+
return Promise.reject(new Error("NotImplemented: AnvisaDadosAbertosSource — previsto para v1.1"));
|
|
19
|
+
}
|
|
20
|
+
getApresentacoes(_numProcesso) {
|
|
21
|
+
return Promise.reject(new Error("NotImplemented: AnvisaDadosAbertosSource — previsto para v1.1"));
|
|
22
|
+
}
|
|
23
|
+
getBulaLink(_idBulaProtegido) {
|
|
24
|
+
return Promise.reject(new Error("NotImplemented: AnvisaDadosAbertosSource — previsto para v1.1"));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=anvisa-dados-abertos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anvisa-dados-abertos.js","sourceRoot":"","sources":["../../src/sources/anvisa-dados-abertos.ts"],"names":[],"mappings":"AAYA,yFAAyF;AACzF,gFAAgF;AAChF,MAAM,OAAO,wBAAwB;IAC1B,IAAI,GAAG,sBAAsB,CAAC;IAEvC,YAAY,CAAC,OAA2B;QACtC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,OAAqC;QAC1D,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED,yBAAyB,CACvB,OAAwC;QAExC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,OAA4B;QACxC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,YAAoB;QAC9B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,YAAoB;QACnC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,gBAAwB;QAClC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAC3E,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Apresentacao, BulaLink, BularioSource, MedicamentoDetalhes, MedicamentoResumo, SearchByClasseTerapeuticaParams, SearchByNameParams, SearchByPrincipalAtivoParams, SearchByTarjaParams } from "./types.js";
|
|
2
|
+
export declare class AnvisaPortalBularioSource implements BularioSource {
|
|
3
|
+
readonly name = "anvisa_portal_bulario";
|
|
4
|
+
searchByName(_params: SearchByNameParams): Promise<MedicamentoResumo[]>;
|
|
5
|
+
searchByPrincipalAtivo(_params: SearchByPrincipalAtivoParams): Promise<MedicamentoResumo[]>;
|
|
6
|
+
searchByClasseTerapeutica(_params: SearchByClasseTerapeuticaParams): Promise<MedicamentoResumo[]>;
|
|
7
|
+
searchByTarja(_params: SearchByTarjaParams): Promise<MedicamentoResumo[]>;
|
|
8
|
+
getDetalhes(_numProcesso: string): Promise<MedicamentoDetalhes>;
|
|
9
|
+
getApresentacoes(_numProcesso: string): Promise<Apresentacao[]>;
|
|
10
|
+
getBulaLink(_idBulaProtegido: string): Promise<BulaLink>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=anvisa-portal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anvisa-portal.d.ts","sourceRoot":"","sources":["../../src/sources/anvisa-portal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,EAC/B,kBAAkB,EAClB,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAIpB,qBAAa,yBAA0B,YAAW,aAAa;IAC7D,QAAQ,CAAC,IAAI,2BAA2B;IAExC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAMvE,sBAAsB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAM3F,yBAAyB,CACvB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAM/B,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAMzE,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM/D,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM/D,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAKzD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Stub — implementação prevista para v1.2 (fallback HTML scrape do Portal Bulário)
|
|
2
|
+
// https://consultas.anvisa.gov.br/#/bulario/
|
|
3
|
+
export class AnvisaPortalBularioSource {
|
|
4
|
+
name = "anvisa_portal_bulario";
|
|
5
|
+
searchByName(_params) {
|
|
6
|
+
return Promise.reject(new Error("NotImplemented: AnvisaPortalBularioSource — previsto para v1.2"));
|
|
7
|
+
}
|
|
8
|
+
searchByPrincipalAtivo(_params) {
|
|
9
|
+
return Promise.reject(new Error("NotImplemented: AnvisaPortalBularioSource — previsto para v1.2"));
|
|
10
|
+
}
|
|
11
|
+
searchByClasseTerapeutica(_params) {
|
|
12
|
+
return Promise.reject(new Error("NotImplemented: AnvisaPortalBularioSource — previsto para v1.2"));
|
|
13
|
+
}
|
|
14
|
+
searchByTarja(_params) {
|
|
15
|
+
return Promise.reject(new Error("NotImplemented: AnvisaPortalBularioSource — previsto para v1.2"));
|
|
16
|
+
}
|
|
17
|
+
getDetalhes(_numProcesso) {
|
|
18
|
+
return Promise.reject(new Error("NotImplemented: AnvisaPortalBularioSource — previsto para v1.2"));
|
|
19
|
+
}
|
|
20
|
+
getApresentacoes(_numProcesso) {
|
|
21
|
+
return Promise.reject(new Error("NotImplemented: AnvisaPortalBularioSource — previsto para v1.2"));
|
|
22
|
+
}
|
|
23
|
+
getBulaLink(_idBulaProtegido) {
|
|
24
|
+
return Promise.reject(new Error("NotImplemented: AnvisaPortalBularioSource — previsto para v1.2"));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=anvisa-portal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anvisa-portal.js","sourceRoot":"","sources":["../../src/sources/anvisa-portal.ts"],"names":[],"mappings":"AAYA,mFAAmF;AACnF,6CAA6C;AAC7C,MAAM,OAAO,yBAAyB;IAC3B,IAAI,GAAG,uBAAuB,CAAC;IAExC,YAAY,CAAC,OAA2B;QACtC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAC5E,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,OAAqC;QAC1D,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAC5E,CAAC;IACJ,CAAC;IAED,yBAAyB,CACvB,OAAwC;QAExC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAC5E,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,OAA4B;QACxC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAC5E,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,YAAoB;QAC9B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAC5E,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,YAAoB;QACnC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAC5E,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,gBAAwB;QAClC,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAC5E,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export type Tarja = "LIVRE" | "VERMELHA" | "PRETA";
|
|
2
|
+
export type SearchParams = {
|
|
3
|
+
pagina?: number;
|
|
4
|
+
count?: number;
|
|
5
|
+
};
|
|
6
|
+
export type SearchByNameParams = SearchParams & {
|
|
7
|
+
nome: string;
|
|
8
|
+
};
|
|
9
|
+
export type SearchByPrincipalAtivoParams = SearchParams & {
|
|
10
|
+
principioAtivo: string;
|
|
11
|
+
};
|
|
12
|
+
export type SearchByClasseTerapeuticaParams = SearchParams & {
|
|
13
|
+
classeTerapeutica: string;
|
|
14
|
+
};
|
|
15
|
+
export type SearchByTarjaParams = SearchParams & {
|
|
16
|
+
tarja: Tarja;
|
|
17
|
+
};
|
|
18
|
+
export type MedicamentoResumo = {
|
|
19
|
+
numProcesso: string;
|
|
20
|
+
nomeProduto: string;
|
|
21
|
+
empresa: string;
|
|
22
|
+
cnpj?: string;
|
|
23
|
+
expediente?: string;
|
|
24
|
+
idBulaPacienteProtegido?: string;
|
|
25
|
+
idBulaProfissionalProtegido?: string;
|
|
26
|
+
dataAtualizacao?: string;
|
|
27
|
+
};
|
|
28
|
+
export type MedicamentoDetalhes = MedicamentoResumo & {
|
|
29
|
+
tarja?: Tarja;
|
|
30
|
+
classesTerapeuticas?: string[];
|
|
31
|
+
principioAtivo?: string;
|
|
32
|
+
numeroRegistro?: string;
|
|
33
|
+
};
|
|
34
|
+
export type Apresentacao = {
|
|
35
|
+
descricao: string;
|
|
36
|
+
};
|
|
37
|
+
export type BulaLink = {
|
|
38
|
+
id: string;
|
|
39
|
+
urlPdf?: string;
|
|
40
|
+
};
|
|
41
|
+
export interface BularioSource {
|
|
42
|
+
readonly name: string;
|
|
43
|
+
searchByName(params: SearchByNameParams): Promise<MedicamentoResumo[]>;
|
|
44
|
+
searchByPrincipalAtivo(params: SearchByPrincipalAtivoParams): Promise<MedicamentoResumo[]>;
|
|
45
|
+
searchByClasseTerapeutica(params: SearchByClasseTerapeuticaParams): Promise<MedicamentoResumo[]>;
|
|
46
|
+
searchByTarja(params: SearchByTarjaParams): Promise<MedicamentoResumo[]>;
|
|
47
|
+
getDetalhes(numProcesso: string): Promise<MedicamentoDetalhes>;
|
|
48
|
+
getApresentacoes(numProcesso: string): Promise<Apresentacao[]>;
|
|
49
|
+
getBulaLink(idBulaProtegido: string): Promise<BulaLink>;
|
|
50
|
+
/**
|
|
51
|
+
* Opcional — fontes que precisam liberar recursos (ex: Playwright browser)
|
|
52
|
+
* podem implementar. Chamado no SIGINT/SIGTERM do processo.
|
|
53
|
+
*/
|
|
54
|
+
close?(): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACjE,MAAM,MAAM,4BAA4B,GAAG,YAAY,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AACrF,MAAM,MAAM,+BAA+B,GAAG,YAAY,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3F,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG;IACpD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACvE,sBAAsB,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3F,yBAAyB,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACjG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACzE,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/D,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/D,WAAW,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD;;;OAGG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":""}
|
|
@@ -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 registerBuscarPorClasseTerapeutica(server: McpServer, repository: IBularioRepository): void;
|
|
4
|
+
//# sourceMappingURL=buscar-por-classe-terapeutica.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar-por-classe-terapeutica.d.ts","sourceRoot":"","sources":["../../src/tools/buscar-por-classe-terapeutica.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAOlE,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,kBAAkB,GAC7B,IAAI,CA8BN"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BuscarPorClasseTerapeuticaInputSchema, MedicamentoListaOutputSchema, } from "../schemas/tools.js";
|
|
2
|
+
import { TOOL_ANNOTATIONS, toErrorResult, toListResult } from "./shared.js";
|
|
3
|
+
export function registerBuscarPorClasseTerapeutica(server, repository) {
|
|
4
|
+
server.registerTool("buscar_por_classe_terapeutica", {
|
|
5
|
+
title: "Buscar Medicamento por Classe Terapêutica",
|
|
6
|
+
description: "Busca medicamentos no Bulário Eletrônico da ANVISA pela classe terapêutica " +
|
|
7
|
+
"(ex: antibiótico, analgésico, anti-hipertensivo). " +
|
|
8
|
+
"Retorna lista paginada de medicamentos da classe especificada.",
|
|
9
|
+
inputSchema: BuscarPorClasseTerapeuticaInputSchema,
|
|
10
|
+
outputSchema: MedicamentoListaOutputSchema,
|
|
11
|
+
annotations: TOOL_ANNOTATIONS,
|
|
12
|
+
}, async (args) => {
|
|
13
|
+
const { classeTerapeutica, pagina = 1, count = 10 } = args;
|
|
14
|
+
try {
|
|
15
|
+
const result = await repository.searchByClasseTerapeutica({
|
|
16
|
+
classeTerapeutica,
|
|
17
|
+
pagina,
|
|
18
|
+
count,
|
|
19
|
+
});
|
|
20
|
+
return toListResult({
|
|
21
|
+
data: { total: result.data.length, pagina, medicamentos: result.data },
|
|
22
|
+
_meta: result._meta,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
return toErrorResult(err);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=buscar-por-classe-terapeutica.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar-por-classe-terapeutica.js","sourceRoot":"","sources":["../../src/tools/buscar-por-classe-terapeutica.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qCAAqC,EACrC,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,kCAAkC,CAChD,MAAiB,EACjB,UAA8B;IAE9B,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,2CAA2C;QAClD,WAAW,EACT,6EAA6E;YAC7E,oDAAoD;YACpD,gEAAgE;QAClE,WAAW,EAAE,qCAAqC;QAClD,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,yBAAyB,CAAC;gBACxD,iBAAiB;gBACjB,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YACH,OAAO,YAAY,CAAC;gBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE;gBACtE,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -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 registerBuscarPorNome(server: McpServer, repository: IBularioRepository): void;
|
|
4
|
+
//# sourceMappingURL=buscar-por-nome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar-por-nome.d.ts","sourceRoot":"","sources":["../../src/tools/buscar-por-nome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAyB7F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BuscarPorNomeInputSchema, MedicamentoListaOutputSchema } from "../schemas/tools.js";
|
|
2
|
+
import { TOOL_ANNOTATIONS, toErrorResult, toListResult } from "./shared.js";
|
|
3
|
+
export function registerBuscarPorNome(server, repository) {
|
|
4
|
+
server.registerTool("buscar_por_nome", {
|
|
5
|
+
title: "Buscar Medicamento por Nome Comercial",
|
|
6
|
+
description: "Busca medicamentos no Bulário Eletrônico da ANVISA pelo nome comercial. " +
|
|
7
|
+
"Retorna lista paginada com número de processo, empresa e links de bula.",
|
|
8
|
+
inputSchema: BuscarPorNomeInputSchema,
|
|
9
|
+
outputSchema: MedicamentoListaOutputSchema,
|
|
10
|
+
annotations: TOOL_ANNOTATIONS,
|
|
11
|
+
}, async (args) => {
|
|
12
|
+
const { nome, pagina = 1, count = 10 } = args;
|
|
13
|
+
try {
|
|
14
|
+
const result = await repository.searchByName({ nome, pagina, count });
|
|
15
|
+
return toListResult({
|
|
16
|
+
data: { total: result.data.length, pagina, medicamentos: result.data },
|
|
17
|
+
_meta: result._meta,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return toErrorResult(err);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=buscar-por-nome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar-por-nome.js","sourceRoot":"","sources":["../../src/tools/buscar-por-nome.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,UAA8B;IACrF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EACT,0EAA0E;YAC1E,yEAAyE;QAC3E,WAAW,EAAE,wBAAwB;QACrC,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,OAAO,YAAY,CAAC;gBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE;gBACtE,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -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 registerBuscarPorPrincipioAtivo(server: McpServer, repository: IBularioRepository): void;
|
|
4
|
+
//# sourceMappingURL=buscar-por-principio-ativo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar-por-principio-ativo.d.ts","sourceRoot":"","sources":["../../src/tools/buscar-por-principio-ativo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAOlE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,kBAAkB,GAC7B,IAAI,CAyBN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BuscarPorPrincipioAtivoInputSchema, MedicamentoListaOutputSchema, } from "../schemas/tools.js";
|
|
2
|
+
import { TOOL_ANNOTATIONS, toErrorResult, toListResult } from "./shared.js";
|
|
3
|
+
export function registerBuscarPorPrincipioAtivo(server, repository) {
|
|
4
|
+
server.registerTool("buscar_por_principio_ativo", {
|
|
5
|
+
title: "Buscar Medicamento por Princípio Ativo",
|
|
6
|
+
description: "Busca medicamentos no Bulário Eletrônico da ANVISA pelo princípio ativo (DCB/DCI). " +
|
|
7
|
+
"Retorna lista paginada de medicamentos que contêm o princípio ativo especificado.",
|
|
8
|
+
inputSchema: BuscarPorPrincipioAtivoInputSchema,
|
|
9
|
+
outputSchema: MedicamentoListaOutputSchema,
|
|
10
|
+
annotations: TOOL_ANNOTATIONS,
|
|
11
|
+
}, async (args) => {
|
|
12
|
+
const { principioAtivo, pagina = 1, count = 10 } = args;
|
|
13
|
+
try {
|
|
14
|
+
const result = await repository.searchByPrincipalAtivo({ principioAtivo, pagina, count });
|
|
15
|
+
return toListResult({
|
|
16
|
+
data: { total: result.data.length, pagina, medicamentos: result.data },
|
|
17
|
+
_meta: result._meta,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return toErrorResult(err);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=buscar-por-principio-ativo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar-por-principio-ativo.js","sourceRoot":"","sources":["../../src/tools/buscar-por-principio-ativo.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,+BAA+B,CAC7C,MAAiB,EACjB,UAA8B;IAE9B,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,qFAAqF;YACrF,mFAAmF;QACrF,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,sBAAsB,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1F,OAAO,YAAY,CAAC;gBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE;gBACtE,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -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 registerConsultarBula(server: McpServer, repository: IBularioRepository): void;
|
|
4
|
+
//# sourceMappingURL=consultar-bula.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consultar-bula.d.ts","sourceRoot":"","sources":["../../src/tools/consultar-bula.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI,CA6C7F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { BulaOutputSchema, ConsultarBulaInputSchema } from "../schemas/tools.js";
|
|
2
|
+
import { TOOL_ANNOTATIONS, toBulaResult, toErrorResult } from "./shared.js";
|
|
3
|
+
export function registerConsultarBula(server, repository) {
|
|
4
|
+
server.registerTool("consultar_bula", {
|
|
5
|
+
title: "Consultar Bula de Medicamento",
|
|
6
|
+
description: "Retorna dados completos de um medicamento incluindo tarja, classe terapêutica, " +
|
|
7
|
+
"princípio ativo e links para bula do paciente e do profissional de saúde (PDF). " +
|
|
8
|
+
"Requer o numProcesso obtido via busca de medicamentos.",
|
|
9
|
+
inputSchema: ConsultarBulaInputSchema,
|
|
10
|
+
outputSchema: BulaOutputSchema,
|
|
11
|
+
annotations: TOOL_ANNOTATIONS,
|
|
12
|
+
}, async (args) => {
|
|
13
|
+
const { numProcesso } = args;
|
|
14
|
+
try {
|
|
15
|
+
const detalhesResult = await repository.getDetalhes(numProcesso);
|
|
16
|
+
const detalhes = detalhesResult.data;
|
|
17
|
+
const bulaPaciente = detalhes.idBulaPacienteProtegido
|
|
18
|
+
? (await repository.getBulaLink(detalhes.idBulaPacienteProtegido)).data
|
|
19
|
+
: undefined;
|
|
20
|
+
const bulaProfissional = detalhes.idBulaProfissionalProtegido
|
|
21
|
+
? (await repository.getBulaLink(detalhes.idBulaProfissionalProtegido)).data
|
|
22
|
+
: undefined;
|
|
23
|
+
return toBulaResult({
|
|
24
|
+
data: {
|
|
25
|
+
numProcesso: detalhes.numProcesso,
|
|
26
|
+
nomeProduto: detalhes.nomeProduto,
|
|
27
|
+
empresa: detalhes.empresa,
|
|
28
|
+
tarja: detalhes.tarja,
|
|
29
|
+
classesTerapeuticas: detalhes.classesTerapeuticas,
|
|
30
|
+
principioAtivo: detalhes.principioAtivo,
|
|
31
|
+
bulaPaciente,
|
|
32
|
+
bulaProfissional,
|
|
33
|
+
},
|
|
34
|
+
_meta: detalhesResult._meta,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
return toErrorResult(err);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=consultar-bula.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consultar-bula.js","sourceRoot":"","sources":["../../src/tools/consultar-bula.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,UAA8B;IACrF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,iFAAiF;YACjF,kFAAkF;YAClF,wDAAwD;QAC1D,WAAW,EAAE,wBAAwB;QACrC,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC;YAErC,MAAM,YAAY,GAAG,QAAQ,CAAC,uBAAuB;gBACnD,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI;gBACvE,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,gBAAgB,GAAG,QAAQ,CAAC,2BAA2B;gBAC3D,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI;gBAC3E,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,YAAY,CAAC;gBAClB,IAAI,EAAE;oBACJ,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;oBACjD,cAAc,EAAE,QAAQ,CAAC,cAAc;oBACvC,YAAY;oBACZ,gBAAgB;iBACjB;gBACD,KAAK,EAAE,cAAc,CAAC,KAAK;aAC5B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -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 registerFiltrarPorTarja(server: McpServer, repository: IBularioRepository): void;
|
|
4
|
+
//# sourceMappingURL=filtrar-por-tarja.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filtrar-por-tarja.d.ts","sourceRoot":"","sources":["../../src/tools/filtrar-por-tarja.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI,CA6B/F"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FiltrarPorTarjaInputSchema, MedicamentoListaOutputSchema } from "../schemas/tools.js";
|
|
2
|
+
import { TOOL_ANNOTATIONS, toErrorResult, toListResult } from "./shared.js";
|
|
3
|
+
export function registerFiltrarPorTarja(server, repository) {
|
|
4
|
+
server.registerTool("filtrar_por_tarja", {
|
|
5
|
+
title: "Filtrar Medicamentos por Tarja",
|
|
6
|
+
description: "Lista medicamentos filtrados pelo tipo de tarja. " +
|
|
7
|
+
"LIVRE: venda sem receita. " +
|
|
8
|
+
"VERMELHA: requer receita médica simples (retenção). " +
|
|
9
|
+
"PRETA: controle especial (psicotrópicos, entorpecentes). " +
|
|
10
|
+
"Nota: a API da ANVISA não expõe filtro direto por tarja na listagem; " +
|
|
11
|
+
"use consultar_bula para confirmar a tarja de um medicamento específico.",
|
|
12
|
+
inputSchema: FiltrarPorTarjaInputSchema,
|
|
13
|
+
outputSchema: MedicamentoListaOutputSchema,
|
|
14
|
+
annotations: TOOL_ANNOTATIONS,
|
|
15
|
+
}, async (args) => {
|
|
16
|
+
const { tarja, pagina = 1, count = 10 } = args;
|
|
17
|
+
try {
|
|
18
|
+
const result = await repository.searchByTarja({ tarja, pagina, count });
|
|
19
|
+
return toListResult({
|
|
20
|
+
data: { total: result.data.length, pagina, medicamentos: result.data },
|
|
21
|
+
_meta: result._meta,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
return toErrorResult(err);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=filtrar-por-tarja.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filtrar-por-tarja.js","sourceRoot":"","sources":["../../src/tools/filtrar-por-tarja.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,UAA8B;IACvF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,mDAAmD;YACnD,4BAA4B;YAC5B,sDAAsD;YACtD,2DAA2D;YAC3D,uEAAuE;YACvE,yEAAyE;QAC3E,WAAW,EAAE,0BAA0B;QACvC,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,YAAY,CAAC;gBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE;gBACtE,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -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 registerListarApresentacoes(server: McpServer, repository: IBularioRepository): void;
|
|
4
|
+
//# sourceMappingURL=listar-apresentacoes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listar-apresentacoes.d.ts","sourceRoot":"","sources":["../../src/tools/listar-apresentacoes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,kBAAkB,GAC7B,IAAI,CAmCN"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ApresentacoesOutputSchema, ListarApresentacoesInputSchema } from "../schemas/tools.js";
|
|
2
|
+
import { TOOL_ANNOTATIONS, toApresentacoesResult, toErrorResult } from "./shared.js";
|
|
3
|
+
export function registerListarApresentacoes(server, repository) {
|
|
4
|
+
server.registerTool("listar_apresentacoes", {
|
|
5
|
+
title: "Listar Apresentações de Medicamento",
|
|
6
|
+
description: "Lista as apresentações comerciais disponíveis de um medicamento " +
|
|
7
|
+
"(concentrações, formas farmacêuticas, embalagens). " +
|
|
8
|
+
"Requer o numProcesso obtido via busca de medicamentos.",
|
|
9
|
+
inputSchema: ListarApresentacoesInputSchema,
|
|
10
|
+
outputSchema: ApresentacoesOutputSchema,
|
|
11
|
+
annotations: TOOL_ANNOTATIONS,
|
|
12
|
+
}, async (args) => {
|
|
13
|
+
const { numProcesso } = args;
|
|
14
|
+
try {
|
|
15
|
+
const [detalhesResult, apresentacoesResult] = await Promise.all([
|
|
16
|
+
repository.getDetalhes(numProcesso),
|
|
17
|
+
repository.getApresentacoes(numProcesso),
|
|
18
|
+
]);
|
|
19
|
+
return toApresentacoesResult({
|
|
20
|
+
data: {
|
|
21
|
+
numProcesso,
|
|
22
|
+
nomeProduto: detalhesResult.data.nomeProduto,
|
|
23
|
+
empresa: detalhesResult.data.empresa,
|
|
24
|
+
apresentacoes: apresentacoesResult.data,
|
|
25
|
+
},
|
|
26
|
+
_meta: detalhesResult._meta,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
return toErrorResult(err);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=listar-apresentacoes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listar-apresentacoes.js","sourceRoot":"","sources":["../../src/tools/listar-apresentacoes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,UAAU,2BAA2B,CACzC,MAAiB,EACjB,UAA8B;IAE9B,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EACT,kEAAkE;YAClE,qDAAqD;YACrD,wDAAwD;QAC1D,WAAW,EAAE,8BAA8B;QAC3C,YAAY,EAAE,yBAAyB;QACvC,WAAW,EAAE,gBAAgB;KAC9B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC9D,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC;gBACnC,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC;aACzC,CAAC,CAAC;YAEH,OAAO,qBAAqB,CAAC;gBAC3B,IAAI,EAAE;oBACJ,WAAW;oBACX,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,WAAW;oBAC5C,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO;oBACpC,aAAa,EAAE,mBAAmB,CAAC,IAAI;iBACxC;gBACD,KAAK,EAAE,cAAc,CAAC,KAAK;aAC5B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|