Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.connectvets.com.br/llms.txt

Use this file to discover all available pages before exploring further.

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

LabelTítuloDescrição
anamnesisAnamneseHistórico e relato do proprietário
physical_examExame FísicoAvaliação física e sinais vitais
diagnosisDiagnósticoConclusões e diagnósticos
treatmentTratamentoPrescrições e recomendações
observationsObservaçõesNotas adicionais
follow_upSeguimentoInstruçõ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"
}

MetadataItem

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"}
]

Pagination

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";
ValorDescriçãoComportamento
pendingAguardando processamentoNota criada, mas ainda não iniciou o processamento
processingIA processando o áudioTranscrição em andamento
completedTranscrição finalizadaSeções disponíveis, arquivo de transcrição pronto
failedErro no processamentoProblema durante a transcrição

Gender

Sexo do paciente:
type Gender = "male" | "female" | "unidentified";
ValorDescrição
maleMacho
femaleFêmea
unidentifiedNão identificado (padrão)

Formatos de Data

Todas as datas utilizam o formato ISO 8601 em UTC:
YYYY-MM-DDThh:mm:ssZ

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

Go

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

Exemplo com Valores Nulos

{
  "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

MetadataItem

  • 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