Carregando...
;
if (!note) return
{note.name}
Status: {note.transcription_status}
{note.note_sections.map(section => (
{section.title}
{section.content}
))}
);
}
```
### Baixar Transcrição
```javascript theme={null} theme={null}
// Baixar arquivo de transcrição
async function downloadTranscription(note) {
if (note.transcription_status !== 'completed' || !note.transcription_url) {
throw new Error('Transcrição não disponível');
}
const response = await fetch(note.transcription_url);
const text = await response.text();
// Criar download
const blob = new Blob([text], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `${note.name}_transcricao.txt`;
a.click();
URL.revokeObjectURL(url);
}
```
### Buscar Seção Específica
```javascript theme={null} theme={null}
// Encontrar seção por label
function findSection(note, label) {
return note.note_sections.find(section => section.label === label);
}
// Extrair informações específicas
function extractKeyInfo(note) {
const anamnesis = findSection(note, 'anamnesis');
const diagnosis = findSection(note, 'diagnosis');
const treatment = findSection(note, 'treatment');
return {
paciente: note.name,
problema: anamnesis?.content.substring(0, 100) + '...',
diagnostico: diagnosis?.content || 'Não informado',
tratamento: treatment?.content || 'Não informado'
};
}
```
### Gerar Relatório
```javascript theme={null} theme={null}
// Gerar relatório estruturado
function generateReport(note) {
if (note.transcription_status !== 'completed') {
return 'Nota ainda não processada';
}
let report = `RELATÓRIO VETERINÁRIO\n\n`;
report += `Paciente: ${note.name}\n`;
report += `Data: ${new Date(note.created_at).toLocaleDateString('pt-BR')}\n`;
// Metadados
if (note.metadata.length > 0) {
report += `\nInformações Adicionais:\n`;
note.metadata.forEach(meta => {
report += `- ${meta.key}: ${meta.value}\n`;
});
}
report += `\n${'='.repeat(50)}\n\n`;
// Seções ordenadas
const sections = note.note_sections.sort((a, b) =>
parseInt(a.order) - parseInt(b.order)
);
sections.forEach(section => {
report += `${section.title.toUpperCase()}\n`;
report += `${'-'.repeat(section.title.length)}\n`;
report += `${section.content}\n\n`;
});
return report;
}
```
### Sincronização com Sistema Local
```javascript theme={null} theme={null}
// Sincronizar nota com banco local
async function syncNoteToLocal(noteId) {
try {
const remoteNote = await getNoteById(noteId);
// Verificar se há atualizações
const localNote = await getLocalNote(noteId);
if (localNote && localNote.updated_at >= remoteNote.updated_at) {
return { updated: false, note: localNote };
}
// Salvar/atualizar no banco local
await saveLocalNote(remoteNote);
return { updated: true, note: remoteNote };
} catch (error) {
console.error(`Erro ao sincronizar nota ${noteId}:`, error);
throw error;
}
}
```
## Tratamento de Erros
### 404 Not Found
```json theme={null} theme={null}
{
"error": "not_found",
"message": "Note not found",
"code": "NOTE_NOT_FOUND"
}
```
**Causas:**
* ID da nota inexistente
* Nota pertence a outro tenant/clínica
* Nota foi deletada
### 401 Unauthorized
```json theme={null} theme={null}
{
"error": "unauthorized",
"message": "API key is required",
"code": "MISSING_API_KEY"
}
```
### Exemplo de Tratamento
```javascript theme={null} theme={null}
async function safeGetNote(noteId) {
try {
const response = await fetch(`/notes/${noteId}`, {
headers: { 'X-API-KEY': apiKey }
});
if (response.status === 404) {
return { error: 'Nota não encontrada', note: null };
}
if (response.status === 401) {
return { error: 'Acesso negado', note: null };
}
if (!response.ok) {
return { error: `Erro ${response.status}`, note: null };
}
const note = await response.json();
return { error: null, note };
} catch (error) {
return { error: error.message, note: null };
}
}
// Uso com tratamento
const { error, note } = await safeGetNote(noteId);
if (error) {
console.error(error);
} else {
console.log('Nota carregada:', note.name);
}
```
## Downloads e Arquivos
### Baixar Áudio Original
```javascript theme={null} theme={null}
async function downloadAudio(note) {
const response = await fetch(note.audio_url);
const blob = await response.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = note.audio_name;
a.click();
URL.revokeObjectURL(url);
}
```
### Verificar Disponibilidade
```javascript theme={null} theme={null}
function checkAvailability(note) {
return {
audio: !!note.audio_url,
transcription: note.transcription_status === 'completed' && !!note.transcription_url,
sections: note.note_sections.length > 0,
completed: note.transcription_status === 'completed'
};
}
const availability = checkAvailability(note);
if (availability.transcription) {
console.log('Transcrição disponível para download');
}
```
## Performance e Cache
### Cache Inteligente
```javascript theme={null} theme={null}
// Cache com TTL para notas completadas
const noteCache = new Map();
async function getCachedNote(noteId) {
const cached = noteCache.get(noteId);
// Cache hit para notas completadas (não mudam)
if (cached && cached.transcription_status === 'completed') {
return cached;
}
// Cache hit com TTL para notas em processamento
if (cached && Date.now() - cached._cached_at < 30000) { // 30s
return cached;
}
// Cache miss - buscar nova versão
const note = await getNoteById(noteId);
note._cached_at = Date.now();
noteCache.set(noteId, note);
return note;
}
```
## Próximos Passos