|
import { AiAgent } from '../src/services/AiAgent'; |
|
import { extractJsonOutput } from './utils/TestHelpers'; |
|
|
|
|
|
describe('Validação dos Protocolos', () => { |
|
const agent = new AiAgent(); |
|
|
|
describe('Tratamento: Rejuvenescimento', () => { |
|
|
|
it('Protocolo: Rejuvenescimento', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Rejuvenescimento, do tratamento Rejuvenescimento"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('FRAC3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('30J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 PASSADA CRUZADA'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][1].descricao).toContain('FRACTAT®'); |
|
expect(protocolo['passos'][1].descricao).toContain('9X9MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('20J'); |
|
expect(protocolo['passos'][1].descricao).toContain('MAQX-2'); |
|
expect(protocolo['passos'][1].descricao).toContain('2 PASSADAS CRUZADAS'); |
|
}); |
|
|
|
it('Protocolo: Rejuvenescimento (Pescoço e Colo)', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Rejuvenescimento (Pescoço e Colo), do tratamento Rejuvenescimento"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(1); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][0].descricao).toContain('FRACTAT®'); |
|
expect(protocolo['passos'][0].descricao).toContain('9X9MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-2 20J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 PASSADA CRUZADA'); |
|
}); |
|
}); |
|
|
|
describe('Tratamento: Pigmentação', () => { |
|
|
|
it('Protocolo: Remoção de Tattoo (Dark)', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Remoção de Tattoo (Dark), do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-10'); |
|
expect(protocolo['passos'][0].descricao).toContain('9X9MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('75J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('2 PASSADAS NA TATTOO'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][1].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('2.5J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 PASSADAS FROSTING'); |
|
}); |
|
|
|
it('Protocolo: Remoção de Tattoo (Light)', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Remoção de Tattoo (Light), do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-10'); |
|
expect(protocolo['passos'][0].descricao).toContain('9X9MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('75J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('2 PASSADAS NA TATTOO'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('Nd:YAG'); |
|
expect(protocolo['passos'][1].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('1J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 PASSADAS FROSTING'); |
|
}); |
|
|
|
it('Protocolo: Green Toning (Superficial)', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Green Toning (Superficial), do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][0].descricao).toContain('8MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.4-1.8J'); |
|
expect(protocolo['passos'][0].descricao).toContain('4.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('2-3 PASSADAS EM VARREDURA FULL FACE'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('KTP 532nm'); |
|
expect(protocolo['passos'][1].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('0.5J'); |
|
expect(protocolo['passos'][1].descricao).toContain('3 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 PASSADA CRUZADA EM VARREDURA'); |
|
}); |
|
|
|
|
|
it('Protocolo: Hipercromia', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Hipercromia, do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][0].descricao).toContain('8MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.4-1.8J'); |
|
expect(protocolo['passos'][0].descricao).toContain('4.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('2-3 PASSADAS CRUZADAS'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][1].descricao).toContain('Nd:YAG 1064nm'); |
|
expect(protocolo['passos'][1].descricao).toContain('20-30J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1.5-2 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 PASSADA CRUZADA'); |
|
}); |
|
|
|
it('Protocolo: Nevo de Ota', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Nevo de Ota, do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(1); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][0].descricao).toContain('8MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('4J'); |
|
expect(protocolo['passos'][0].descricao).toContain('4.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('6 PASSADAS EM VARREDURA'); |
|
}); |
|
|
|
it('Protocolo: Lentigo Solar & Melanose Solar & Queratose Seborreica Plana', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Lentigo Solar & Melanose Solar & Queratose Seborreica Plana, do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(1); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][0].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.2-1.5J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('PONTUAL NAS MANCHAS'); |
|
}); |
|
|
|
it('Protocolo: Manchas - Café com Leite', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Manchas - Café com Leite, do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERDE MAQX-1'); |
|
expect(protocolo['passos'][0].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('6-10J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('PONTUAL NAS MANCHAS'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('Qs KTP MAQX-1'); |
|
expect(protocolo['passos'][1].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('1.2-1.5J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('PONTUAL NAS MANCHAS'); |
|
}); |
|
|
|
it('Protocolo: PIH - Hiperpigmentação Pós Inflamatória', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: PIH - Hiperpigmentação Pós Inflamatória, do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(3); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('35J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 PASSADA CRUZADA'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][1].descricao).toContain('6MM e 8MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('1.4-1.8J'); |
|
expect(protocolo['passos'][1].descricao).toContain('4.5 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('Spot 6MM (FULL FACE): 4 PASSADAS EM VARREDURA, Spot 8MM: 2 PASSADAS NO MELASMA'); |
|
|
|
expect(protocolo['passos'][2]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][2]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][2].descricao).toContain('R58'); |
|
expect(protocolo['passos'][2].descricao).toContain('VERDE®'); |
|
expect(protocolo['passos'][2].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][2].descricao).toContain('4-6J'); |
|
expect(protocolo['passos'][2].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][2].descricao).toContain('PONTUAL NAS MANCHAS'); |
|
}); |
|
|
|
it('Protocolo: Melasma Pigmentar', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Melasma Pigmentar, do tratamento Pigmentação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][0].descricao).toContain('6MM e 8MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.4-1.8J'); |
|
expect(protocolo['passos'][0].descricao).toContain('4.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('Spot 6MM (FULL FACE): 4 PASSADAS EM VARREDURA, Spot 8MM: 2 PASSADAS NO MELASMA'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][1].descricao).toContain('FRACTAT MAQX-5'); |
|
expect(protocolo['passos'][1].descricao).toContain('9x9MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('10J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1.5 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('2 PASSADAS NO MELASMA'); |
|
}); |
|
|
|
// Continua com mais protocolos... |
|
}); |
|
|
|
describe('Tratamento: Vascular', () => { |
|
|
|
it('Protocolo: Telangiectasia', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Telangiectasia, do tratamento Vascular"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
try { |
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(1); |
|
} catch (error) { |
|
console.log(result.response); |
|
throw error; |
|
} |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('2MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('160 J/cm²'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('PONTUAL'); |
|
}); |
|
|
|
it('Protocolo: Spider Angioma', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Spider Angioma, do tratamento Vascular"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('MAQX-1'); |
|
expect(protocolo['passos'][0].descricao).toContain('8MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.8-2J'); |
|
expect(protocolo['passos'][0].descricao).toContain('4.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('ATÉ FROSTING'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R58'); |
|
expect(protocolo['passos'][1].descricao).toContain('VERDE®'); |
|
expect(protocolo['passos'][1].descricao).toContain('3MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('4-6J'); |
|
expect(protocolo['passos'][1].descricao).toContain('2-4 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('FROSTING'); |
|
}); |
|
|
|
|
|
// ERRO: divergencia no passo 2, no spot |
|
it('Protocolo: Angioma Rubi', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Angioma Rubi, do tratamento Vascular"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('90-120J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('PONTUAL'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R58'); |
|
expect(protocolo['passos'][1].descricao).toContain('VERDE®'); |
|
expect(protocolo['passos'][1].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('6-8 J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('PONTUAL'); |
|
}); |
|
|
|
|
|
// ERRO: divergencia de valores no segundo passo |
|
it('Protocolo: Lago Venoso', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Lago Venoso, do tratamento Vascular"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('90-120J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1-1.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('PONTUAL'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R58'); |
|
expect(protocolo['passos'][1].descricao).toContain('VERDE®'); |
|
expect(protocolo['passos'][1].descricao).toContain('3MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('4-8J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1-1.5 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('ESBRANQUIÇADO OU FROSTING'); |
|
}); |
|
|
|
|
|
// ERRO: só está vindo 2 passos |
|
it('Protocolo: Rosácea', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Rosácea, do tratamento Vascular"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(3); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('35 J/cm²'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 PASSADA CRUZADA (#) Com resfriamento'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][1].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('170-190J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1-1.5 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('PONTUAL Com resfriamento'); |
|
|
|
expect(protocolo['passos'][2]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][2]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][2].descricao).toContain('R28'); |
|
expect(protocolo['passos'][2].descricao).toContain('FRAC3®'); |
|
expect(protocolo['passos'][2].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][2].descricao).toContain('10J'); |
|
expect(protocolo['passos'][2].descricao).toContain('10 Hz'); |
|
expect(protocolo['passos'][2].descricao).toContain('5 A 10 PASSADAS OU 5 EM VARREDURA'); |
|
}); |
|
|
|
it('Protocolo: PWS (Parkes Weber Syndrome)', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: PWS (Parkes Weber Syndrome), do tratamento Vascular"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA®'); |
|
expect(protocolo['passos'][0].descricao).toContain('2MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('120-150J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1-1.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('PONTUAL'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R58'); |
|
expect(protocolo['passos'][1].descricao).toContain('VERDE®'); |
|
expect(protocolo['passos'][1].descricao).toContain('3MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('4-6J'); |
|
expect(protocolo['passos'][1].descricao).toContain('1-1.5 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('PONTUAL'); |
|
}); |
|
|
|
|
|
// ERRO: esta retornadno 3 passos a maioria das vezes |
|
it('Protocolo: Poiquilodermia', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Poiquilodermia, do tratamento Vascular"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(5); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('35 J/cm²'); |
|
expect(protocolo['passos'][0].descricao).toContain('1-1.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 PASSADA CRUZADA'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('MAQX1'); |
|
expect(protocolo['passos'][1].descricao).toContain('6MM ou 7MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('1.7-2J'); |
|
expect(protocolo['passos'][1].descricao).toContain('4.5 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('6 PASSADAS EM VARREDURA'); |
|
|
|
expect(protocolo['passos'][2]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][2]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][2].descricao).toContain('R28'); |
|
expect(protocolo['passos'][2].descricao).toContain('KTP 532nm'); |
|
expect(protocolo['passos'][2].descricao).toContain('7MM'); |
|
expect(protocolo['passos'][2].descricao).toContain('0.5J'); |
|
expect(protocolo['passos'][2].descricao).toContain('1-1.5 Hz'); |
|
expect(protocolo['passos'][2].descricao).toContain('EM VARREDURA'); |
|
|
|
expect(protocolo['passos'][3]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][3]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][3].descricao).toContain('R28'); |
|
expect(protocolo['passos'][3].descricao).toContain('FRAC3®'); |
|
expect(protocolo['passos'][3].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][3].descricao).toContain('10J'); |
|
expect(protocolo['passos'][3].descricao).toContain('10 Hz'); |
|
expect(protocolo['passos'][3].descricao).toContain('5 A 10 PASSADAS EM VARREDURA'); |
|
|
|
expect(protocolo['passos'][4]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][4]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][4].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][4].descricao).toContain('FRACTAT®'); |
|
expect(protocolo['passos'][4].descricao).toContain('9x9MM'); |
|
expect(protocolo['passos'][4].descricao).toContain('20-30J'); |
|
expect(protocolo['passos'][4].descricao).toContain('1.5-2 Hz'); |
|
expect(protocolo['passos'][4].descricao).toContain('1 PASSADA CRUZADA'); |
|
}); |
|
|
|
|
|
}); |
|
|
|
describe('Tratamento: Benignos', () => { |
|
|
|
// it('Protocolo: Verrugas Viral', async () => { |
|
// const result = await agent.ask("Gostaria dos detalhes do Protocolo: Verrugas Viral, do tratamento Benignos"); |
|
|
|
// const protocolo = extractJsonOutput(result.response); |
|
|
|
// expect(protocolo).toHaveProperty('tratamento'); |
|
// expect(protocolo).toHave |
|
|
|
it('Protocolo: Onicomicose', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Onicomicose, do tratamento Benignos"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(1); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('35J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.5-2 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('3 PASSADAS POR TODA UNHA'); |
|
}); |
|
|
|
|
|
describe('Tratamento: Cicatrizes', () => { |
|
|
|
it('Protocolo: Cicatrizes Hipertróficas, Pós Cirúrgicas e Estrias Recentes', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Cicatrizes Hipertróficas, Pós Cirúrgicas e Estrias Recentes, do tratamento Cicatrizes"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(3); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('35J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 PASSADA CRUZADA'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('FRAC3®'); |
|
expect(protocolo['passos'][1].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('10J'); |
|
expect(protocolo['passos'][1].descricao).toContain('10 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('5 A 10 PASSADAS EM VARREDURA'); |
|
|
|
expect(protocolo['passos'][2]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][2]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][2].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][2].descricao).toContain('FRACTAT®'); |
|
expect(protocolo['passos'][2].descricao).toContain('9X9MM'); |
|
expect(protocolo['passos'][2].descricao).toContain('50-75J'); |
|
expect(protocolo['passos'][2].descricao).toContain('2 Hz'); |
|
expect(protocolo['passos'][2].descricao).toContain('2 PASSADAS'); |
|
}); |
|
|
|
it('Protocolo: Cicatrizes Artróficas, Estrias e Acne', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Cicatrizes Artróficas, Estrias e Acne, do tratamento Cicatrizes"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('FRAC3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('30J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.5-2 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('4-6 PASSADAS'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('FS20A'); |
|
expect(protocolo['passos'][1].descricao).toContain('FRACTAT®'); |
|
expect(protocolo['passos'][1].descricao).toContain('9X9MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('30J'); |
|
expect(protocolo['passos'][1].descricao).toContain('MAQX-5'); |
|
expect(protocolo['passos'][1].descricao).toContain('2 PASSADAS'); |
|
}); |
|
|
|
it('Protocolo: Acne Inflamatória', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Acne Inflamatória, do tratamento Cicatrizes"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(2); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('VERSA3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('35-40 J/cm²'); |
|
expect(protocolo['passos'][0].descricao).toContain('1 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('PONTUAL'); |
|
|
|
expect(protocolo['passos'][1]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][1]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][1].descricao).toContain('R28'); |
|
expect(protocolo['passos'][1].descricao).toContain('FRAC3®'); |
|
expect(protocolo['passos'][1].descricao).toContain('4MM'); |
|
expect(protocolo['passos'][1].descricao).toContain('10-12J'); |
|
expect(protocolo['passos'][1].descricao).toContain('8-10 Hz'); |
|
expect(protocolo['passos'][1].descricao).toContain('4-5 PASSADAS CRUZADAS'); |
|
}); |
|
}); |
|
|
|
|
|
describe('Tratamento: Depilação', () => { |
|
it('Protocolo: Remoção de Pelos', async () => { |
|
const result = await agent.ask("Gostaria dos detalhes do Protocolo: Remoção de Pelos, do tratamento Depilação"); |
|
|
|
const protocolo = extractJsonOutput(result.response); |
|
|
|
expect(protocolo).toHaveProperty('tratamento'); |
|
expect(protocolo).toHaveProperty('nome'); |
|
expect(protocolo).toHaveProperty('passos'); |
|
expect(protocolo.passos).toHaveLength(1); |
|
|
|
expect(protocolo['passos'][0]).toHaveProperty('numero'); |
|
expect(protocolo['passos'][0]).toHaveProperty('descricao'); |
|
expect(protocolo['passos'][0].descricao).toContain('R28'); |
|
expect(protocolo['passos'][0].descricao).toContain('FRAC3®'); |
|
expect(protocolo['passos'][0].descricao).toContain('5MM'); |
|
expect(protocolo['passos'][0].descricao).toContain('20-30J'); |
|
expect(protocolo['passos'][0].descricao).toContain('1.5-2.5 Hz'); |
|
expect(protocolo['passos'][0].descricao).toContain('2 PASSADAS'); |
|
}); |
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
Resultados com gpt-4o-mini
FAIL test/validacaoEtapasProtocolos.test.ts (66.542 s)
Validação dos Protocolos
Tratamento: Rejuvenescimento
✓ Protocolo: Rejuvenescimento (4740 ms)
✕ Protocolo: Rejuvenescimento (Pescoço e Colo) (2220 ms)
Tratamento: Pigmentação
✓ Protocolo: Remoção de Tattoo (Dark) (8244 ms)
✓ Protocolo: Remoção de Tattoo (Light) (5037 ms)
✕ Protocolo: Green Toning (Superficial) (840 ms)
✕ Protocolo: Hipercromia (776 ms)
✕ Protocolo: Nevo de Ota (1845 ms)
✕ Protocolo: Lentigo Solar & Melanose Solar & Queratose Seborreica Plana (891 ms)
✕ Protocolo: Manchas - Café com Leite (929 ms)
✕ Protocolo: PIH - Hiperpigmentação Pós Inflamatória (910 ms)
✕ Protocolo: Melasma Pigmentar (724 ms)
Tratamento: Vascular
✓ Protocolo: Telangiectasia (1744 ms)
✓ Protocolo: Spider Angioma (3080 ms)
✓ Protocolo: Angioma Rubi (2611 ms)
✓ Protocolo: Lago Venoso (3096 ms)
✕ Protocolo: Rosácea (4201 ms)
✓ Protocolo: PWS (Parkes Weber Syndrome) (3010 ms)
✓ Protocolo: Poiquilodermia (6587 ms)
Tratamento: Benignos
✓ Protocolo: Onicomicose (2157 ms)
Tratamento: Cicatrizes
✓ Protocolo: Cicatrizes Hipertróficas, Pós Cirúrgicas e Estrias Recentes (8201 ms)
✕ Protocolo: Cicatrizes Artróficas, Estrias e Acne (913 ms)
✕ Protocolo: Acne Inflamatória (1014 ms)
Tratamento: Depilação
✓ Protocolo: Remoção de Pelos (1641 ms)
Test Suites: 1 failed, 1 total
Tests: 11 failed, 12 passed, 23 total
Snapshots: 0 total
Time: 66.579 s, estimated 165 s