GET
/
notes
/
{noteId}
/
export
Exportar nota
curl --request GET \
  --url https://api-sandbox.connectvets.com.br/notes/v1/notes/{noteId}/export \
  --header 'X-API-KEY: <api-key>'
"PRONTUÁRIO MÉDICO\n================\n\nPaciente: Rex\n\nAnamnese\n--------\nPaciente apresenta histórico de...\n"

Descrição

Exporta o prontuário completo de uma nota em diferentes formatos para download direto. O export inclui todas as seções estruturadas da nota formatadas apropriadamente.
Requisito: O export só está disponível para notas com transcription_status: "completed"

Parâmetros da Requisição

Path Parameters

ParâmetroTipoObrigatórioDescrição
noteIdUUID✅ SimID único da nota

Headers

HeaderObrigatórioValor
X-API-KEY✅ SimSua chave de API

Query Parameters

ParâmetroTipoObrigatórioDescriçãoPadrão
formatString❌ NãoFormato de export: rtf ou txttxt

Formatos Disponíveis

TXT (Texto Simples)

  • Content-Type: text/plain; charset=utf-8
  • Estrutura: Texto simples e estruturado com hierarquia
  • Codificação: UTF-8
  • Uso: Compatibilidade máxima, fácil integração

RTF (Rich Text Format)

  • Content-Type: application/rtf
  • Estrutura: Formatação rica com cores e fontes
  • Características:
    • Títulos em azul e negrito
    • Seções organizadas com cores diferentes
    • Fontes apropriadas (Arial para títulos, Times New Roman para conteúdo)
  • Uso: Documentos profissionais, compatível com Word

Exemplos de Requisição

Exportar em formato TXT (padrão)

curl -H "X-API-KEY: cvn_live_abc123def456..." \
  -O -J \
  https://api.connectvets.com/notes/6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3/export

Exportar em formato RTF

curl -H "X-API-KEY: cvn_live_abc123def456..." \
  -O -J \
  "https://api.connectvets.com/notes/6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3/export?format=rtf"

JavaScript/TypeScript

async function exportNote(noteId, format = 'txt') {
  const response = await fetch(`https://api.connectvets.com/notes/${noteId}/export?format=${format}`, {
    headers: {
      'X-API-KEY': 'cvn_live_abc123def456...'
    }
  });
  
  if (!response.ok) {
    throw new Error(`Erro no export: ${response.status}`);
  }
  
  // Obter nome do arquivo do header
  const contentDisposition = response.headers.get('Content-Disposition');
  const filename = contentDisposition?.match(/filename="(.+)"/)?.[1] || `nota_${noteId}.${format}`;
  
  // Criar download
  const blob = await response.blob();
  const url = URL.createObjectURL(blob);
  
  const a = document.createElement('a');
  a.href = url;
  a.download = filename;
  a.click();
  
  URL.revokeObjectURL(url);
}

// Uso
await exportNote('6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3', 'rtf');

Python

import requests

def export_note(api_key, note_id, format='txt'):
    url = f"https://api.connectvets.com/notes/{note_id}/export"
    headers = {"X-API-KEY": api_key}
    params = {"format": format}
    
    response = requests.get(url, headers=headers, params=params)
    
    if response.status_code == 200:
        # Obter nome do arquivo
        content_disposition = response.headers.get('Content-Disposition', '')
        filename = content_disposition.split('filename="')[1].split('"')[0] if 'filename=' in content_disposition else f'nota_{note_id}.{format}'
        
        # Salvar arquivo
        with open(filename, 'wb') as f:
            f.write(response.content)
            
        print(f"Nota exportada: {filename}")
        return filename
    else:
        print(f"Erro no export: {response.status_code}")
        return None

# Uso
api_key = "cvn_live_abc123def456..."
note_id = "6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3"

# Export em TXT
txt_file = export_note(api_key, note_id, 'txt')

# Export em RTF  
rtf_file = export_note(api_key, note_id, 'rtf')

Resposta de Sucesso (200 OK)

Headers de Resposta

Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="Rex_prontuario.txt"
Content-Length: 2048
Content-Type: application/rtf
Content-Disposition: attachment; filename="Rex_prontuario.rtf"
Content-Length: 4096

Exemplo de Conteúdo TXT

==============================================
PRONTUÁRIO VETERINÁRIO - Rex
==============================================

Data da Consulta: 2024-02-14T18:25:43Z
Paciente: Rex
Sexo: Macho
ID Externo: CLIENTE_123

==============================================
ANAMNESE
==============================================

Paciente apresenta histórico de vacinação em dia...

==============================================
EXAME FÍSICO
==============================================

Peso: 12kg
Frequência Cardíaca: 90 bpm
Temperatura: 38.5°C...

==============================================
DIAGNÓSTICO
==============================================

Diagnóstico principal: Consulta de rotina...

==============================================
TRATAMENTO
==============================================

Recomendações:
- Manter vacinação em dia
- Retorno em 6 meses...

Tratamento de Erros

400 Bad Request

{
  "error": "bad_request",
  "message": "Invalid format parameter",
  "code": "INVALID_FORMAT",
  "details": {
    "allowed_formats": ["txt", "rtf"],
    "received": "pdf"
  }
}

404 Not Found

{
  "error": "not_found",
  "message": "Note not found",
  "code": "NOTE_NOT_FOUND"
}

422 Unprocessable Entity

{
  "error": "unprocessable_entity",
  "message": "Note transcription not completed",
  "code": "TRANSCRIPTION_NOT_COMPLETED",
  "details": {
    "current_status": "processing",
    "required_status": "completed"
  }
}

Casos de Uso

Export Automático após Processamento

async function processAndExport(audioFile, metadata) {
  // 1. Criar nota
  const note = await createNote(audioFile, metadata);
  
  // 2. Aguardar conclusão
  await waitForCompletion(note.id);
  
  // 3. Exportar automaticamente
  await exportNote(note.id, 'rtf');
  
  console.log('Processo completo: nota criada e exportada');
}

Export em Lote

async function bulkExport(noteIds, format = 'txt') {
  const results = [];
  
  for (const noteId of noteIds) {
    try {
      await exportNote(noteId, format);
      results.push({ noteId, status: 'success' });
    } catch (error) {
      results.push({ noteId, status: 'error', error: error.message });
    }
  }
  
  return results;
}

Integração com Sistema Local

async function syncAndExport(noteId) {
  // Verificar se nota está completa
  const status = await getNoteStatus(noteId);
  
  if (status.status !== 'completed') {
    throw new Error('Nota ainda não foi processada');
  }
  
  // Exportar ambos os formatos
  const [txtFile, rtfFile] = await Promise.all([
    exportNote(noteId, 'txt'),
    exportNote(noteId, 'rtf')
  ]);
  
  // Salvar referências no sistema local
  await saveExportReferences(noteId, { txtFile, rtfFile });
  
  return { txtFile, rtfFile };
}

Boas Práticas

📄 Escolha do Formato

  • TXT: Use para integrações automatizadas, processamento de texto, compatibilidade máxima
  • RTF: Use para documentos profissionais, apresentações, quando formatação é importante

🔄 Cache e Performance

  • Cache exports localmente quando possível
  • Use o export apenas quando necessário (após transcription_status: completed)
  • Para múltiplos exports, considere fazer em lote com controle de rate

📁 Organização de Arquivos

// Estrutura de pastas recomendada
const exportPath = `exports/${date}/${patientName}_${noteId}.${format}`;

// Nomenclatura consistente
const filename = `${patientName}_${consultationDate}_${noteId}.${format}`;

⚠️ Tratamento de Erros

async function safeExport(noteId, format) {
  try {
    // Verificar status primeiro
    const status = await getNoteStatus(noteId);
    
    if (status.status !== 'completed') {
      return { error: 'Nota não processada', status: status.status };
    }
    
    // Fazer export
    const filename = await exportNote(noteId, format);
    return { success: true, filename };
    
  } catch (error) {
    return { error: error.message };
  }
}

Authorizations

X-API-KEY
string
header
required

API Key para autenticação

Path Parameters

noteId
string<uuid>
required

ID único da nota

Query Parameters

format
enum<string>
default:txt

Formato de export

Available options:
txt,
rtf

Response

200
text/plain

Arquivo exportado com sucesso

Arquivo TXT com prontuário