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âmetro | Tipo | Obrigatório | Descrição |
noteId | UUID | ✅ Sim | ID único da nota |
| Header | Obrigatório | Valor |
X-API-KEY | ✅ Sim | Sua chave de API |
Query Parameters
| Parâmetro | Tipo | Obrigatório | Descrição | Padrão |
format | String | ❌ Não | Formato de export: rtf ou txt | txt |
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
curl -H "X-API-KEY: cvn_live_abc123def456..." \
-O -J \
https://api.connectvets.com/notes/6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3/export
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)
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;
}
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
- TXT: Use para integrações automatizadas, processamento de texto, compatibilidade máxima
- RTF: Use para documentos profissionais, apresentações, quando formatação é importante
- 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 };
}
}
API Key para autenticação
Available options:
txt,
rtf
Arquivo exportado com sucesso
Arquivo TXT com prontuário