Visão Geral
Esta página documenta todos os tipos de dados (schemas) utilizados pela API ConnectVets Notes. Estes schemas seguem as convenções JSON e são consistentes em toda a API.
Schemas Principais
Note
Representa uma nota veterinária completa com áudio, transcrição e seções.
interface Note {
id : string ; // UUID da nota
name : string ; // Nome do paciente
gender : "male" | "female" | "unidentified" ; // Sexo do paciente
transcription_status : "pending" | "processing" | "completed" | "failed" ; // Status da transcrição
external_id ?: string ; // ID do sistema externo (opcional)
metadata : MetadataItem []; // Metadados adicionais
note_sections : NoteSection []; // Seções estruturadas (apenas no GET /notes/{id})
created_at : string ; // Data de criação (ISO 8601)
updated_at : string ; // Data da última atualização (ISO 8601)
}
Exemplo
{
"id" : "6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3" ,
"name" : "Rex" ,
"gender" : "male" ,
"audio_name" : "rex_visit_20240214.wav" ,
"transcription_status" : "completed" ,
"external_id" : "CLIENTE_123" ,
"metadata" : [
{ "key" : "procedimento" , "value" : "vacina" },
{ "key" : "veterinario" , "value" : "Dr. João Silva" }
],
"note_sections" : [
{
"id" : "9b7d8b6a-12e3-45fa-9c1c-7e12f5c4a1b2" ,
"title" : "Anamnese" ,
"label" : "anamnesis" ,
"content" : "Paciente apresenta diminuição do apetite nos últimos 3 dias..." ,
"order" : "1"
}
],
"created_at" : "2024-02-14T18:25:43Z" ,
"updated_at" : "2024-02-14T18:30:23Z"
}
NoteSection
Representa uma seção estruturada de uma nota (anamnese, exame físico, etc.).
interface NoteSection {
id : string ; // UUID da seção
title : string ; // Título exibido da seção
label : string ; // Identificador interno (para programação)
content : string ; // Conteúdo transcrito da seção
order : string ; // Ordem de exibição ("1", "2", "3"...)
}
Labels Comuns
Label Título Descrição anamnesisAnamnese Histórico e relato do proprietário physical_examExame Físico Avaliação física e sinais vitais diagnosisDiagnóstico Conclusões e diagnósticos treatmentTratamento Prescrições e recomendações observationsObservações Notas adicionais follow_upSeguimento Instruções de retorno
Exemplo
{
"id" : "9b7d8b6a-12e3-45fa-9c1c-7e12f5c4a1b2" ,
"title" : "Exame Físico" ,
"label" : "physical_exam" ,
"content" : "Peso: 28kg. Temperatura: 38.8°C. FC: 90 bpm. FR: 24 mpm. Mucosas rosadas e úmidas." ,
"order" : "2"
}
Par chave-valor para armazenar informações adicionais sobre a nota.
interface MetadataItem {
key : string ; // Chave do metadado
value : string ; // Valor do metadado
}
Exemplos Comuns
[
{ "key" : "procedimento" , "value" : "consulta de rotina" },
{ "key" : "veterinario" , "value" : "Dr. João Silva" },
{ "key" : "peso" , "value" : "12.5kg" },
{ "key" : "temperatura" , "value" : "38.5°C" },
{ "key" : "observacoes" , "value" : "animal cooperativo" }
]
Informações de paginação para endpoints que retornam listas.
interface Pagination {
current_page : number ; // Página atual
total_pages : number ; // Total de páginas
total_items : number ; // Total de itens
}
Exemplo
{
"current_page" : 1 ,
"total_pages" : 10 ,
"total_items" : 200
}
NoteListResponse
Resposta para o endpoint GET /notes (listagem).
interface NoteListResponse {
pagination : Pagination ; // Informações de paginação
notes : Note []; // Array de notas (sem note_sections)
}
Importante : Na listagem, as notas não incluem o campo note_sections. Para obter as seções, use GET /notes/{id}.
Exemplo
{
"pagination" : {
"current_page" : 1 ,
"total_pages" : 5 ,
"total_items" : 100
},
"notes" : [
{
"id" : "6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3" ,
"name" : "Rex" ,
"gender" : "male" ,
"transcription_status" : "completed" ,
"external_id" : "CLIENTE_123" ,
"metadata" : [
{ "key" : "procedimento" , "value" : "vacina" }
],
"created_at" : "2024-02-14T18:25:43Z" ,
"updated_at" : "2024-02-14T18:30:23Z"
}
]
}
Enums
TranscriptionStatus
Status do processamento da transcrição:
type TranscriptionStatus = "pending" | "processing" | "completed" | "failed" ;
Valor Descrição Comportamento pendingAguardando processamento Nota criada, mas ainda não iniciou o processamento processingIA processando o áudio Transcrição em andamento completedTranscrição finalizada Seções disponíveis, arquivo de transcrição pronto failedErro no processamento Problema durante a transcrição
Gender
Sexo do paciente:
type Gender = "male" | "female" | "unidentified" ;
Valor Descrição maleMacho femaleFêmea unidentifiedNão identificado (padrão)
Todas as datas utilizam o formato ISO 8601 em UTC :
Exemplos
{
"created_at" : "2024-02-14T18:25:43Z" ,
"updated_at" : "2024-02-14T18:30:23Z"
}
Parsing em Diferentes Linguagens
JavaScript
const createdAt = new Date ( "2024-02-14T18:25:43Z" );
console . log ( createdAt . toLocaleDateString ( 'pt-BR' ));
// Output: 14/02/2024
Python
from datetime import datetime
created_at = datetime.fromisoformat( "2024-02-14T18:25:43Z" .replace( 'Z' , '+00:00' ))
print (created_at.strftime( " %d /%m/%Y %H:%M" ))
# Output: 14/02/2024 18:25
package main
import (
" fmt "
" time "
)
func main () {
t , _ := time . Parse ( time . RFC3339 , "2024-02-14T18:25:43Z" )
fmt . Println ( t . Format ( "02/01/2006 15:04" ))
// Output: 14/02/2024 18:25
}
Identificadores UUID
Todos os IDs utilizam o formato UUID v4 (RFC 4122):
6a4fe1de-52c4-4b2b-a30f-4b3fa9d7d8b3
Características
Comprimento : 36 caracteres
Formato : 8-4-4-4-12 (hexadecimal com hífens)
Geração : Aleatório/pseudo-aleatório
Unicidade : Globalmente único
Validação
JavaScript
function isValidUUID ( uuid ) {
const uuidRegex = / ^ [ 0-9a-f ] {8} - [ 0-9a-f ] {4} -4 [ 0-9a-f ] {3} - [ 89ab ][ 0-9a-f ] {3} - [ 0-9a-f ] {12} $ / i ;
return uuidRegex . test ( uuid );
}
Python
import uuid
def is_valid_uuid ( uuid_string ):
try :
uuid.UUID(uuid_string, version = 4 )
return True
except ValueError :
return False
Tratamento de Nulos
Campos Opcionais
Campos que podem ser null ou ausentes:
transcription_url - Disponível apenas quando transcription_status = "completed"
external_id - Sempre opcional
note_sections - Vazio para status pending/processing/failed
{
"id" : "7b5fe2ef-63d5-5c3c-b41f-5c4fa8e8d9c4" ,
"name" : "Luna" ,
"transcription_status" : "processing" ,
"transcription_url" : null ,
"external_id" : null ,
"note_sections" : []
}
Validação de Dados
Regras de Validação
Note (criação)
name: Obrigatório, 1-100 caracteres
gender: Opcional, enum válido
external_id: Opcional, máx 100 caracteres
metadata: Opcional, array de objetos válidos
key: Obrigatório, 1-50 caracteres
value: Obrigatório, 1-500 caracteres
Exemplo de Validação JavaScript
function validateNote ( note ) {
const errors = [];
if ( ! note . name || note . name . length === 0 ) {
errors . push ( "Nome do paciente é obrigatório" );
}
if ( note . name && note . name . length > 100 ) {
errors . push ( "Nome do paciente deve ter no máximo 100 caracteres" );
}
if ( note . gender && ! [ "male" , "female" , "unidentified" ]. includes ( note . gender )) {
errors . push ( "Sexo deve ser male, female ou unidentified" );
}
if ( note . metadata ) {
note . metadata . forEach (( item , index ) => {
if ( ! item . key ) {
errors . push ( `Metadata[ ${ index } ]: chave é obrigatória` );
}
if ( ! item . value ) {
errors . push ( `Metadata[ ${ index } ]: valor é obrigatório` );
}
});
}
return errors ;
}
Próximos Passos
Criar Nota Como criar uma nova nota com áudio
Listar Notas Como buscar e filtrar notas
Obter Nota Como acessar detalhes de uma nota
Conceitos - Notas Entenda os conceitos das notas