Painel

Visão Geral (todos os pacientes)

groups
0 Total de Pacientes
bloodtype
0 Pacientes DM
science
0 Total de Exames (HbA1c)

bloodtype Foco em Diabéticos — Acompanhamento de HbA1c

check_circle
0 Em Dia (DM)
schedule
0 Próximos (DM)
warning
0 Atrasados (DM)
hourglass_empty
0 Nunca Fizeram (DM)
analytics
- HbA1c Média (DM)
done_all
0% Na Meta no Último Exame (DM)
verified
0% Na Meta (Últimos 2 Exames) (DM)
moving
0% Taxa de Melhora (Atual vs Ant.) (DM)

Monitoramento de Pedidos (Engajamento Clínico)

receipt_long
0 Total de Pedidos
event_available
0 Pedidos Últimos 30 Dias
trending_up
0 Média Mensal de Pedidos

history Últimos Exames Registrados

Paciente Data A1C (%) Obs.
Nenhum exame registrado

menu_book Últimos Pacientes com Prontuário Aberto

Paciente Local Última Consulta Aberto em
Nenhum prontuário aberto ainda

calendar_month Agenda

Importe a agenda da CASSI, confira diferenças nas reimportações e acompanhe presença/consulta lançada no mês.

upload_file Importar agenda

Cole o texto copiado da outra agenda. Primeiro gere uma prévia para conferir novos horários, alterações e ausências na nova importação.

event_available Mês

DomSegTerQuaQuiSexSáb

share Publicações

Gerencie evoluções e relatórios de produtividade acessíveis publicamente por passkey, com exportação em Word, Excel e PDF.

assignment_ind Histórico de consultas por paciente

O link é individual por paciente. Se o paciente já tiver link, o mesmo endereço será mantido e novas consultas finalizadas aparecerão automaticamente.

home_health Portal único do home care

O link é estável por local e mostra, no mesmo endereço, a produtividade mensal e todas as evoluções finalizadas dos pacientes vinculados ao local selecionado.

link Links publicados

Tipo Título / local/paciente Período/data Acessos Status Ações
Carregando...
0 selecionado(s)
Nome Anterior Última A1C Ação Rápida (Data e Valor) Próximo Exame Status Ações
groups
Nenhum paciente cadastrado
Carregando...
Nenhum paciente pendente

favorite Linhas de Cuidado

Gerencie programas de seguimento clinico sem alterar o fluxo atual do sistema. Aqui ficam os perfis, protocolos e itens de monitoramento da V2.

O modulo atual continua funcionando. A V2 entra como camada adicional de organizacao e busca ativa.
Carregando linhas de cuidado...

add_circle Nova Linha de Cuidado

lightbulb Como Usar a V2

1. Crie ou ajuste as linhas de cuidado que a equipe quer seguir.

2. Monte o protocolo com exames e periodicidade para cada perfil.

3. Vincule os pacientes aos perfis no cadastro do paciente.

4. Use os filtros e as pendencias para busca ativa sem mexer no fluxo atual do sistema.

folder Linhas Configuradas

Carregando...

assignment Protocolo da Linha Selecionada

Selecione uma linha para montar o protocolo Os itens abaixo ficam vinculados a regra de acompanhamento daquela linha.
Item Categoria Intervalo Obrigatorio Sexo Acao
Selecione uma linha de cuidado.

biotech Catalogo de Exames e Rastreios

Nome Categoria Unidade Intervalo (meses) Valor de Referência Ativo
Carregando...

group_add Adicionar Pacientes em Lote

Digite os nomes dos pacientes, um por linha. Todos serão adicionados de uma vez ao sistema.

0 nomes detectados

settings Configurações

Personalize o funcionamento do prontuário, inteligência artificial, dicionários e impressos.

place Locais de Atendimento

Cadastre os consultórios, clínicas ou postos onde você atende. Cada paciente pode ser vinculado a um local, mantendo todos organizados num único repositório.

add_circle Adicionar Local

merge_type Mesclar Locais

Escolha dois locais para unir. Os pacientes e permissões do local de origem serão transferidos para o local de destino, e o local de origem será excluído.

science Tipos de Exames e Periodicidade

Configure os tipos de exames monitorados e o intervalo de retorno de cada um.

add_circle Adicionar Novo Tipo de Exame

healing Terapias Seriadas — Justificativas

Essas justificativas aparecem apenas no template Terapias Seriadas do prontuário. Não alteram logotipo, endereço, responsável técnico nem demais dados dos documentos médicos.

auto_awesome Inteligência Artificial (Magic SOAP)

Configure as chaves usadas pelos recursos de IA do prontuário. O Magic SOAP usa DeepSeek para organizar texto livre; os Insights IA usam DeepSeek para resumir consultas e OpenAI para consolidar achados e pendências.

Escolha como o campo de evolução aparece por padrão no prontuário. Você pode alternar a qualquer momento dentro da consulta.

Alterne entre a versão clássica/original (v1) e a nova versão otimizada para consultas subsequentes e áudio ambiente (v2).

psychology Insights IA

bolt Dicionário de Exames (Entrada Rápida)

expand_more

Cadastre exames novos, seus sinônimos e a faixa de referência (mín/máx) usada para colorir os resultados (verde = normal, vermelho = alterado, laranja = sem faixa definida). Ex.: Ácido Metilmalônico · sinônimos amm, ac metilmalonico · mín 0,07 · máx 0,27 · un. µmol/L.

Ver exames já reconhecidos (referência, com faixas)

medication Dicionário de Medicamentos (Entrada Rápida)

expand_more

A lista abaixo já vem com o dicionário base (editável). Altere os sinônimos/marcas de qualquer medicamento, edite nomes ou adicione novos. Ex.: Metformina · sinônimos glifage, glucoformin

Na entrada rápida você também pode clicar em corrigir num medicamento para ensinar uma variação na hora.

Ver dicionário base original (referência)

draft Documentos — Cabeçalho e Rodapé

Padrão usado em atestados, relatórios e demais documentos. O logo, o responsável técnico e os dados de contato são obrigatórios e aparecem em todos os documentos.

contacts Guia de Referências

expand_more

Gerencie sua lista de especialistas, laboratórios e informações úteis. Esses contatos ficam disponíveis em um painel rápido dentro do prontuário — basta clicar no botão Referências.

Carregando...

manage_accounts Gerenciar Médicos (Apenas Administrador)

Crie contas para outros profissionais. Cada usuário acessará uma carteira isolada de pacientes no próprio login.

person_add Cadastrar Novo Médico

NomeLogin de AcessoAções
Carregando...

manage_accounts Gerenciar Usuários

Crie usuários com acesso restrito a locais de atendimento e funcionalidades específicas.

key Tokens de Integração

Crie chaves para sistemas externos consultarem ou enviarem dados para o sistema. O token completo aparece apenas uma vez, logo após a criação.

add_circle Nova Integração

O último escopo libera raw_text e a transcrição do consultório. Conceda apenas quando o destino precisar do registro bruto para auditoria ou migração.

Integração Token Escopos Status Último uso Ações
Carregando...

integration_instructions Documentação da API

Use esta API para integrar laboratórios, sistemas externos, BI ou outras ferramentas. Todas as chamadas precisam do header Authorization: Bearer SEU_TOKEN.

Base URL

/external_api.php/v1

Autenticação

Authorization: Bearer dm2_xxxxxxxxxxxxxxxxx

Prontuário completo

GET /v1/patients/{id}/record

Retorna linhas de cuidado, anotações/consultas, exames, laboratório, medicamentos, condições, pedidos e documentos.

Endpoints disponíveis

MétodoEndpointUsoEscopo
GET/v1/healthVerificar disponibilidadetoken válido
GET/v1/patients?q=nome-ou-cpfListar/buscar pacientes por nome, CPF ou CNSpatients:read
GET/v1/patients/{id}Consultar paciente com resumo de prontuáriopatients:read
GET/v1/patients/{id}/recordConsultar linhas, consultas, exames, medicamentos, condições e documentospatients:read
POST/v1/patientsCriar ou vincular pacientepatients:write
PATCH/v1/patients/{id}Atualizar pacientepatients:write
GET/v1/patients/{id}/examsExames-chave do paciente (tabela histórica)exams:read
POST/v1/patients/{id}/examsEnviar exame para pacienteexams:write
POST/v1/examsEnviar exame localizando por CPF/external_idexams:write
GET/v1/lab-resultsTodos os resultados de exame lançadosexams:read
GET/v1/consultationsConsultas (SOAP, sinais e status)patients:read
GET/v1/conditionsCondições/diagnósticos com CID-10patients:read
GET/v1/medicationsMedicamentos em uso e suspensospatients:read
GET/v1/vitalsSinais vitais por consultapatients:read
GET/v1/documentsDocumentos emitidos (atestados, receitas…)patients:read
GET/v1/attachmentsMetadados dos anexospatients:read
GET/v1/attachments/{id}/contentBaixar o arquivo do anexopatients:read
GET/v1/exam-requestsPedidos de exameexams:read
GET/v1/patient-care-linesVínculo paciente ↔ linha de cuidadopatients:read
GET/v1/care-linesLinhas de cuidado cadastradaspatients:read
GET/v1/locationsLocais/unidadespatients:read
GET/v1/reference-contactsRede de referênciapatients:read
GET/v1/appointmentsAgendamentospatients:read

Todo recurso ligado a paciente aceita ?patient_id=, ?cpf= e a forma aninhada /v1/patients/{id}/{recurso}. Consultar um registro específico: /v1/consultations/456.

Parâmetros comuns a todas as listagens

ParâmetroO que fazExemplo
sinceSó o que mudou depois do momento informado (ISO 8601 ou timestamp Unix)since=2026-07-01T00:00:00Z
after_idPaginação por cursor — use esta para varredura completaafter_id=1240
page / per_pagePaginação por página (teto de 200 por página)page=2&per_page=100
patient_id / cpfFiltrar por pacientecpf=52998224725
Por que preferir after_id a page numa migração: com paginação por página, um registro criado durante a varredura desloca as páginas seguintes e um registro pode nunca ser lido. O cursor por id não tem esse problema. A resposta traz pagination.next_after_id; repita até vir null.

search Exemplo: buscar paciente

expand_more
curl "BASE_URL/external_api.php/v1/patients?q=Adail%20Nicolau%20Linhares" \
  -H "Authorization: Bearer SEU_TOKEN"

O parâmetro q busca por nome. Se tiver números, também busca em CPF e CNS.

assignment Exemplo: consultar prontuário

expand_more
curl "BASE_URL/external_api.php/v1/patients/123/record?consultations_limit=10&lab_results_limit=30" \
  -H "Authorization: Bearer SEU_TOKEN"

Retorna linhas de cuidado, condições, medicamentos, exames-chave, resultados laboratoriais, pedidos, consultas/anotações SOAP, sinais vitais e documentos do paciente.

schema Chaves retornadas pelo record

expand_more
{
  "care_lines": [],
  "conditions": [],
  "medications": [],
  "key_exams": [],
  "lab_results": [],
  "exam_requests": [],
  "consultations": [],
  "documents": [],
  "limits": {}
}

care_lines: id, care_line_id, name, description, color, icon, status, start_date, end_date, risk_level, notes, created_at, updated_at.

conditions: id, patient_id, care_line_id, name, status, started_at, ended_at, notes, created_at, updated_at, care_line_name, care_line_color.

medications: id, patient_id, name, dose, frequency, route, started_at, ended_at, status, last_reviewed_at, notes, created_at, updated_at.

key_exams: id, patient_id, exam_type_id, exam_type_name, exam_date, result_value, notes, created_at.

lab_results: id, patient_id, consultation_id, exam_date, canonical_name, raw_key, value_numeric, value_text, unit, recognized, created_at.

exam_requests: id, patient_id, requested_at, status, note.

consultations: id, patient_id, consultation_date, status, chief_complaint, subjective, objective, assessment, plan, notes, copied_from_consultation_id, created_at, updated_at, finalized_at, vitals, lab_results, documents. O campo raw_text só aparece com o escopo clinical_notes:read.

consultations[].vitals: id, consultation_id, blood_pressure_systolic, blood_pressure_diastolic, weight_kg, height_cm, bmi, capillary_glucose, heart_rate, waist_cm, notes, created_at, updated_at.

documents: id, patient_id, consultation_id, doc_type, title, body, created_at.

limits: key_exams, lab_results, consultations, documents.

fact_check Coortes na listagem de pacientes

expand_more

Campos calculados automaticamente no GET /v1/patients e GET /v1/patients/{id} para montar coortes como sem consulta há 12 meses, HbA1c vencida/acima de 7 e sem exames recentes, sem buscar o /record completo de cada paciente.

Campos calculados no objeto do paciente:

last_consultation_date: data da consulta mais recente registrada em consultations.consultation_date, ou null. Não é agendamento.

consultation_count: total de consultas registradas do paciente.

last_hba1c_value: valor da HbA1c mais recente, ou null.

last_hba1c_date: data do exame referente à última HbA1c, ou null.

last_exam_date: data do exame mais recente do paciente, considerando exames-chave e laboratório.

Filtros aceitos: is_dm=1, last_consultation_before=2025-06-07, months_without_consultation=12, hba1c_min=7, hba1c_max=6, hba1c_before=2026-01-07, last_exam_before=2026-01-07.

Observação: filtros *_before incluem pacientes sem dado correspondente, para facilitar coortes de pendência.

Qualidade de dados futura: preencher lab_results.unit quando possível e validar HbA1c implausível, como 0. Faixa sugerida: 3 a 20.

person_add Exemplo: criar paciente

expand_more
curl -X POST "BASE_URL/external_api.php/v1/patients" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 0dd9b3e6-a444-4f47-b6d5-f35d4ecb0a37" \
  -d '{
    "source": "sistema_externo",
    "external_id": "pac-123",
    "name": "Maria da Silva",
    "cpf": "52998224725",
    "birth_date": "1970-01-01",
    "phone": "11999999999",
    "is_dm": true
  }'

science Exemplo: enviar exame

expand_more
curl -X POST "BASE_URL/external_api.php/v1/exams" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 8da28349-40a8-4215-b98f-03f674145f3c" \
  -d '{
    "source": "laboratorio_x",
    "external_id": "lab-987",
    "patient_cpf": "52998224725",
    "exam_type": "hba1c",
    "exam_name": "Hemoglobina glicada",
    "result_value": "7.2",
    "result_unit": "%",
    "collected_at": "2026-06-01"
  }'

sync Exemplo: sincronizar só o que mudou

expand_more

Guarde o horário da última carga e envie em since na próxima. Evita varrer tudo de novo.

curl "BASE_URL/external_api.php/v1/lab-results?since=2026-07-01T00:00:00Z&per_page=200" \
  -H "Authorization: Bearer SEU_TOKEN"

As datas saem em ISO 8601 com fuso (2026-07-24T21:05:48+02:00). Guarde o updated_at mais recente que recebeu e use-o como próximo since.

download Exemplo: exportar tudo para outro sistema

expand_more

O sistema acompanha um script pronto: tools/export_all.php. Ele varre todos os recursos com cursor, grava um arquivo NDJSON por recurso (um registro por linha) e gera um manifest.json com as contagens, para você conferir que recebeu tudo. Só depende de PHP com cURL.

php tools/export_all.php \
  --base=BASE_URL/external_api.php/v1 \
  --token=SEU_TOKEN \
  --out=./export

Saída:

  locations                   7 registro(s)
  care-lines                  8 registro(s)
  patients                  383 registro(s)
  consultations             489 registro(s)
  vitals                    441 registro(s)
  conditions                612 registro(s)
  medications              1154 registro(s)
  lab-results              2402 registro(s)
  ...
Concluido: 6659 registro(s) em 14 recurso(s).

Os recursos saem na ordem em que devem ser importados: locais e pacientes primeiro, porque os demais referenciam patient_id. Se a contagem exportada divergir do total informado pelo servidor, o script avisa e termina com erro — não dá migração por concluída em silêncio.

Para cargas seguintes, some --since=2026-07-01T00:00:00Z e só o que mudou é baixado. O script respeita Retry-After automaticamente se atingir o limite de requisições.

attach_file Exemplo: baixar anexos

expand_more

Os metadados vêm em JSON; o arquivo sai em rota separada, com Content-Type real e nome sugerido. Um anexo digitalizado pode ter várias páginas — page_count informa quantas, e ?page=N escolhe qual.

curl -o exame.jpg \
  "BASE_URL/external_api.php/v1/attachments/14/content?page=1" \
  -H "Authorization: Bearer SEU_TOKEN"

Baixando todos a partir do attachments.ndjson gerado pela exportação:

while read -r LINHA; do
  ID=$(php -r '$d=json_decode(fgets(STDIN),true); echo $d["id"];' <<< "$LINHA")
  PAGS=$(php -r '$d=json_decode(fgets(STDIN),true); echo max(1,(int)$d["page_count"]);' <<< "$LINHA")
  for P in $(seq 1 "$PAGS"); do
    curl -s -o "anexo_${ID}_${P}.bin" \
      "BASE_URL/external_api.php/v1/attachments/$ID/content?page=$P" \
      -H "Authorization: Bearer SEU_TOKEN"
  done
done < export/attachments.ndjson

lock Relato bruto e transcrição do áudio

expand_more

Os campos raw_text, typed_raw_text, ambient_raw_text e ambient_transcript guardam o texto bruto digitado pelo médico e a transcrição do áudio ambiente do consultório. São o dado mais sensível do sistema e não saem com patients:read — nem em /v1/consultations, nem em /record.

Quando existem mas não vieram, a resposta declara isso:

{
  "id": 481,
  "subjective": "Paciente refere melhora da dispneia...",
  "clinical_notes_available": true,
  "clinical_notes_scope": "clinical_notes:read"
}

O SOAP (subjective, objective, assessment, plan) continua saindo com patients:read — é o registro clínico em si. Para liberar o relato bruto, crie um token com o escopo clinical_notes:read no formulário acima.

speed Limites, cache e erros

expand_more
CódigoSignificadoO que fazer
200Sucesso
304Nada mudou (resposta a If-None-Match)Reaproveite o que já tem
400Parâmetro inválidoVeja error.message
401Token ausente ou inválidoConfira o header Authorization
403Token sem o escopo necessárioVeja error.details.required_scope
404Recurso não encontrado
409Idempotency-Key reusada com outro corpoGere uma chave nova
429Limite de requisições excedidoAguarde os segundos de Retry-After

Padrão de 120 requisições por minuto por token, ajustável por cliente. Toda resposta traz X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset.

Toda resposta 200 de GET traz ETag. Reenviando em If-None-Match, a API responde 304 sem corpo quando nada mudou:

curl -i "BASE_URL/external_api.php/v1/patients?per_page=50" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H 'If-None-Match: "a1b2c3d4..."'
Boas práticas: use HTTPS em produção, defina escopos mínimos, informe source e external_id em toda escrita e use Idempotency-Key em chamadas POST para evitar duplicidade. Em cargas completas, prefira after_id a page e respeite o Retry-After quando receber 429.

Relatório Analítico

Análise histórica da saúde populacional e adesão aos exames.

tune Configurar Relatório

Relatório Executivo de Saúde Populacional

Monitoramento de Pacientes Diabéticos (DM2)

1. Cenário e Cobertura Assistencial

2. Controle Glicêmico e Classificação de Risco

3. Evolução Temporal Populacional

4. Trajetória Individual de Curto Prazo

5. Comportamento e Taxa de Adesão

6. Cobertura de Solicitações e Absenteísmo Recorrente

Pacientes com Pedido por Categoria

Pacientes com Múltiplas Solicitações Sem Exame (Absenteísmo Recorrente)

Paciente Telefone Status Atual Qtd. Pedidos Última A1C

7. Distribuição e Volume de Exames