Setup Completo com IA
Visão Geral
Este exemplo demonstra uma integração completa do Iara Syncfusion Adapter com todas as funcionalidades de IA habilitadas e configuradas.
Código Completo
<!DOCTYPE html><html lang="pt-BR"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Iara Adapter - Setup Completo com IA</title>
<!-- Syncfusion CSS - Versão 26.2.14 --> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-base/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-buttons/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-inputs/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-popups/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-lists/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-navigations/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-splitbuttons/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-dropdowns/styles/material.css" rel="stylesheet" /> <link href="https://cdn.syncfusion.com/ej2/26.2.14/ej2-documenteditor/styles/material.css" rel="stylesheet" />
<style> body { margin: 0; padding: 20px; font-family: Arial, sans-serif; background: #f5f5f5; } .container { max-width: 1400px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } h1 { color: #0066cc; margin-top: 0; } .controls { margin: 20px 0; padding: 15px; background: #f8f9fa; border-radius: 4px; display: flex; gap: 10px; flex-wrap: wrap; } .controls button { padding: 8px 16px; background: #0066cc; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 14px; } .controls button:hover { background: #0052a3; } #editor-wrapper { position: relative; height: 700px; border: 1px solid #ddd; border-radius: 4px; } #editor-container { height: 100%; } .status { margin: 10px 0; padding: 10px; border-radius: 4px; font-size: 14px; } .status.success { background: #d4edda; color: #155724; } .status.error { background: #f8d7da; color: #721c24; } .status.info { background: #d1ecf1; color: #0c5460; } </style> </head> <body> <div class="container"> <h1>🤖 Iara Syncfusion Adapter - IA Completa</h1>
<div id="status" class="status info">Inicializando...</div>
<div class="controls"> <button onclick="exportHTML()">📄 Exportar HTML</button> <button onclick="exportText()">📝 Exportar Texto</button> <button onclick="exportRTF()">📋 Exportar RTF</button> <button onclick="clearEditor()">🗑️ Limpar</button> <button onclick="insertTemplate()">📋 Inserir Template</button> </div>
<div id="editor-wrapper"> <div id="editor-container"></div> </div> </div>
<!-- Syncfusion Scripts - Versão 26.2.14 --> <script src="https://cdn.syncfusion.com/ej2/26.2.14/dist/ej2.min.js"></script>
<!-- Iara Speech SDK --> <script src="https://cdn.iarahealth.com/sdk/javascript/latest/iara-speech.min.js"></script>
<!-- Iara Components Library --> <script src="https://dev.components.iarahealth.com/components-lib.js" type="module"></script>
<!-- Iara Syncfusion Adapter --> <script type="module"> import { IaraSyncfusionAdapter } from 'https://unpkg.com/@iarastt/adapters@latest/dist/adapters.mjs';
const statusEl = document.getElementById('status'); let adapter = null;
function updateStatus(message, type = 'info') { statusEl.textContent = message; statusEl.className = `status ${type}`; }
// Criar editor Syncfusion updateStatus('Criando editor Syncfusion...', 'info');
ej.documenteditor.DocumentEditorContainer.Inject( ej.documenteditor.Toolbar );
const editor = new ej.documenteditor.DocumentEditorContainer({ enableToolbar: true, height: "100%", serviceUrl: "https://api.iarahealth.com/speech/syncfusion/api/documenteditor/", }); editor.appendTo("#editor-container");
// Criar e configurar recognition const recognition = new IaraSpeechRecognition();
recognition.init({ userId: 'seu-email@exemplo.com', // ⚠️ SUBSTITUA com seu email apiToken: 'seu-token-aqui', // ⚠️ SUBSTITUA com seu token lang: 'pt-BR', region: 'south-america', interimResults: true, useVAD: true, engine: 'Iara Desktop' }) .done(function() { updateStatus('Recognition inicializado. Criando adapter com IA...', 'info');
// Configuração completa com IA const config = { // Assistente de IA - COMPLETO assistant: { enabled: true, enableDiffHighlighting: true, impression: { itemizedOutput: true // Formatar como lista }, user_rules: { report: [ 'Usar terminologia médica padrão', 'Incluir dados vitais quando disponíveis', 'Seguir estrutura: Identificação, Anamnese, Exame Físico, Impressão', 'Máximo de 1000 palavras' ], impression: [ 'Ser conciso e objetivo', 'Listar achados em ordem de relevância', 'Incluir recomendações de follow-up quando necessário', 'Usar bullet points' ] }, draggable: { containerId: '#editor-wrapper', defaultPosition: { x: 50, y: 50 } } },
// Funcionalidades enableSpeechRecognition: true, saveReport: true, highlightInference: true,
// Interface replaceToolbar: false, showFinishReportButton: true, showBookmarks: true,
// Comportamento navigateAdditiveMode: 'use',
// Aparência darkMode: false, language: 'pt-BR', zoomFactor: '100%',
// Fonte font: { family: 'Arial', size: 12, availableFamilies: ['Arial', 'Times New Roman', 'Calibri', 'Verdana'], availableSizes: [10, 11, 12, 14, 16, 18, 20, 24] } };
try { adapter = new IaraSyncfusionAdapter( editor.documentEditor, recognition, config );
// Configurar callbacks adapter.onIaraCommand = function(command) { console.log('📌 Comando executado:', command); updateStatus(`Comando: ${command}`, 'info'); };
// Configurar listener para evento de salvamento addEventListener('IaraOnSaveReport', function(event) { console.log('💾 Salvando relatório...'); updateStatus('Salvando relatório...', 'info');
// Simular salvamento setTimeout(() => { updateStatus('✅ Relatório salvo com sucesso!', 'success'); }, 1000); });
updateStatus('✅ Tudo pronto! Use o microfone para ditar ou selecione texto para usar a IA.', 'success');
// Tornar adapter global para funções de controle window.iaraAdapter = adapter;
} catch (error) { updateStatus(`❌ Erro ao criar adapter: ${error.message}`, 'error'); console.error(error); } }) .fail(function(error) { updateStatus(`❌ Erro na inicialização: ${error.message}`, 'error'); console.error(error); });
// Nota: Métodos de navegação não estão disponíveis publicamente no adapter // A navegação entre campos é gerenciada internamente pelo adapter
window.exportHTML = async function() { if (window.iaraAdapter) { const html = await window.iaraAdapter.contentManager.reader.getHtmlContent(); console.log('HTML:', html); updateStatus('HTML exportado para console', 'success'); } };
window.exportRTF = async function() { if (window.iaraAdapter) { const rtf = await window.iaraAdapter.contentManager.reader.getRtfContent(); console.log('RTF:', rtf); updateStatus('RTF exportado para console', 'success'); } };
window.exportText = async function() { if (window.iaraAdapter) { const text = await window.iaraAdapter.contentManager.reader.getPlainTextContent(); console.log('Texto:', text); updateStatus('Texto exportado para console', 'success'); } };
window.clearEditor = async function() { if (window.iaraAdapter && confirm('Limpar todo o conteúdo?')) { await window.iaraAdapter.clearReport(); updateStatus('Editor limpo', 'info'); } };
window.insertTemplate = async function() { if (window.iaraAdapter) { const template = `<div> <h2>RELATÓRIO MÉDICO</h2> <p><strong>Identificação:</strong> [CAMPO_NOME]</p> <p><strong>Data:</strong> ${new Date().toLocaleDateString('pt-BR')}</p> <h3>Anamnese</h3> <p>[CAMPO_ANAMNESE]</p> <h3>Exame Físico</h3> <p>[CAMPO_EXAME]</p> <h3>Impressão</h3> <p>[CAMPO_IMPRESSAO]</p> </div> `; await window.iaraAdapter.insertTemplate(template); updateStatus('Template inserido', 'success'); } }; </script> </body></html>Recursos Demonstrados
✅ Assistente de IA completo com regras personalizadas
✅ Reconhecimento de voz com VAD
✅ Destaque de diferenças nas sugestões da IA
✅ Painel arrastável do assistente
✅ Auto-salvamento com callback
✅ Navegação entre campos
✅ Exportação em múltiplos formatos
✅ Templates dinâmicos
✅ Interface de controle customizada
Próximos Passos
- Configuração Avançada - Personalize ainda mais
- API Reference - Documentação completa
- Troubleshooting - Solução de problemas