hub/textos/nox-macos-fila-que-baixa-exames-antes-do-clique.md
1
<!-- projetos / artigo -->
2
# Nox macOS: a fila que baixa exames antes do clique
3
 
4
> Em radiologia, ganho de tempo também vem de fazer a fila, o backend e a estação local trabalharem antes do radiologista clicar no exame.
5
 
6
Publicado em 7 de junho de 2026
7
 
8
Uma forma simples de perder tempo em radiologia é fazer o médico esperar o exame chegar depois que ele já decidiu laudar.
9
 
10
Isso parece pequeno.
11
 
12
Mas, em escala, vira fricção diária.
13
 
14
Interface macOS do Nox mostrando a fila Plantão, busca, botões de ação e colunas de disponibilidade Zip, Ant e Art.
Captura da versão macOS do Nox com sinais de disponibilidade do Skadi. Os dados identificáveis da fila foram desfocados.
18
 
19
## Problema
20
 
21
O fluxo cotidiano pode parecer simples: olhar a fila, escolher um exame, abrir o viewer e laudar.
22
 
23
Só que, em muitos ambientes, existe uma etapa intermediária mal resolvida.
24
 
25
O exame ainda precisa ser baixado.
26
 
27
As imagens ainda precisam chegar.
28
 
29
O viewer ainda precisa importar o estudo.
30
 
31
E, em alguns fluxos, anexos clínicos ainda precisam ser encontrados em outro lugar.
32
 
33
E, quando isso acontece depois da decisão de laudar, o tempo perdido já entrou no fluxo do radiologista.
34
 
35
O Nox nasceu para atuar exatamente nessa fricção.
36
 
37
Não como PACS.
38
 
39
Não como viewer.
40
 
41
Não como sistema de laudo.
42
 
43
Mas como uma ferramenta local de aquisição DICOM orientada por fila.
44
 
45
## Recorte macOS
46
 
47
A versão macOS é uma aplicação nativa em Swift/AppKit.
48
 
49
Esse recorte importa.
50
 
51
O objetivo não era carregar um runtime pesado para uma tarefa estreita, nem transformar a estação de leitura em bancada de engenharia.
52
 
53
Era criar uma interface pequena, rápida e aderente ao uso real.
54
 
55
Na build observada, o executável nativo tinha 828 KB, o bundle .app cerca de 1,1 MB e o pacote .dmg cerca de 465 KB.
56
 
57
O tamanho não é o valor principal do projeto.
58
 
59
Mas ele ajuda a mostrar a tese: software operacional útil em saúde digital nem sempre precisa ser grande.
60
 
61
Às vezes, precisa ser pequeno, específico e bem posicionado.
62
 
63
## Fila central
64
 
65
Um ponto importante é que a fila não é montada manualmente por cada usuário.
66
 
67
Ela vem de uma fonte central.
68
 
69
Na prática, o app consome listas prontas, como Plantão, Medicina Interna, Cardiovascular, Neurorradiologia e Músculo-Esquelético.
70
 
71
Essas listas são servidas a partir de queries estruturadas em banco, já com metadados úteis para operação: data, hora, SLA, unidade, accession number, paciente, modalidade, quantidade de imagens, especialidade e tipo.
72
 
73
Isso muda o papel da interface.
74
 
75
Ela deixa de ser uma tela onde o usuário tenta descobrir o que deve fazer.
76
 
77
Passa a ser um consumidor local de uma decisão operacional centralizada.
78
 
79
## Cliente fino, backend como fonte de verdade
80
 
81
No desenho do Nox, a estação local não é a fonte de verdade da operação.
82
 
83
O cliente macOS não tenta carregar regra de negócio local que deveria ser compartilhada com outros clientes ou com a operação.
84
 
85
Ele consome contratos publicados pelo backend.
86
 
87
A fila, a ordem, a disponibilidade de pacotes em nuvem, os anexos DICOMizados, artefatos de IA publicados como egress, as referências para exames anteriores, a informação clínica resumida e algumas ações operacionais vêm de serviços externos.
88
 
89
O app nativo fica com uma função mais estreita: apresentar a lista, executar ações autorizadas, baixar arquivos, manter estado local, abrir no viewer e reduzir atrito na estação de leitura.
90
 
91
Essa separação evita transformar uma GUI local em sistema de verdade da operação.
92
 
93
## Dois caminhos para a imagem
94
 
95
O Nox coordena dois caminhos possíveis para aproximar o exame do viewer.
96
 
97
O primeiro é o caminho direto pelo PACS. Na implementação atual, esse caminho usa WADO, mas a ideia não depende de um protocolo específico.
98
 
99
O segundo é o caminho pelo Skadi Hot Cache, quando já existem pacotes e artefatos prontos em nuvem.
100
 
101
Essa diferença é central para entender o projeto.
102
 
103
O Skadi não substitui o PACS.
104
 
105
Ele é uma camada intermediária.
106
 
107
A fonte de verdade clínica permanece sendo o PACS.
108
 
109
O que o Skadi faz é publicar sinais operacionais que ajudam o cliente local a escolher melhor como baixar e entregar o material.
110
 
111
Na interface do Nox, isso aparece em colunas como Zip, Ant e Art.
112
 
113
Zip indica que o exame atual pode ter pacote DICOM pronto em nuvem.
114
 
115
Ant sinaliza exames anteriores disponíveis, ou a ausência confirmada deles.
116
 
117
Art aponta artefatos derivados, incluindo material produzido fora do PACS.
118
 
119
Quando o manifesto do exame está disponível, o Nox pode não precisar buscar o exame diretamente no PACS, série por série. Ele pode consumir os pacotes publicados pelo Skadi.
120
 
121
O cliente lê a ordem de download, baixa os ZIPs em sequência, valida o tamanho quando essa informação foi publicada e só entrega o arquivo completo ao destino do viewer.
122
 
123
Isso evita que o OsiriX ou o Horos enxerguem um ZIP parcial como se fosse um artefato pronto.
124
 
125
O caminho direto ao PACS existe como opção explícita ou de retaguarda.
126
 
127
A ação Baixar do PACS, por exemplo, força o fluxo direto pelo PACS e não consulta os artefatos do Skadi.
128
 
129
Essa distinção importa porque ela preserva duas ideias ao mesmo tempo:
130
 
131
- o PACS permanece como origem canônica do exame;
132
- o Skadi desloca a espera para antes do clique, quando já existe material quente em nuvem.
133
 
134
Também muda a economia do download.
135
 
136
Nos testes, o PACS nativo acessado pela Internet ficava na casa de 20-60 Mb/s.
137
 
138
Com os pacotes servidos pela AWS, a velocidade chegou a 550 Mb/s.
139
 
140
Quando essa diferença aparece na prática, o problema deixa de ser apenas "como baixar mais cedo".
141
 
142
Passa a ser "como escolher o melhor caminho e entregar rápido quando o radiologista precisa".
143
 
144
## Monitoramento e fila
145
 
146
O monitoramento continua fazendo sentido em um cenário específico: quando o caminho disponível é buscar imagens diretamente no PACS.
147
 
148
Nesse fluxo, a aplicação pode consultar o PACS em ciclos, perceber que um exame apareceu cedo na fila, identificar novas imagens chegando depois e baixar o que falta antes da decisão de leitura.
149
 
150
É uma forma de compensar uma origem lenta e variável.
151
 
152
Com o Skadi, a lógica muda.
153
 
154
Se o exame já está aquecido em nuvem e pode ser entregue muito mais rápido, monitorar para baixar preventivamente deixa de ser a estratégia principal.
155
 
156
O ganho passa a estar menos em sondar o PACS o tempo todo e mais em priorizar corretamente a fila local, escolher entre Img PACS e Img Skadi e abrir o viewer no momento certo.
157
 
158
Por isso a fila persistente de Downloads é uma peça central do cliente.
159
 
160
Essa fila pode ser alimentada por ações manuais, por Baixar agora, pela intenção de abrir um exame, por exames anteriores selecionados e por outros comandos autorizados.
161
 
162
O app abre na tela de downloads, mantém a fila entre sessões e permite pausar, retomar, reordenar, limpar e abrir itens já entregues.
163
 
164
Esse detalhe parece operacional, mas muda a ergonomia.
165
 
166
O usuário deixa de depender de uma ação frágil e repetida no momento da leitura.
167
 
168
Ele pode organizar a fila antes, ou deixar que a própria intenção de abertura promova um item para prioridade.
169
 
170
Na tela, o progresso também ficou mais honesto: há separação entre Img PACS e Img Skadi.
171
 
172
Img PACS representa o caminho direto ao PACS.
173
 
174
Img Skadi representa pacotes do exame atual, anteriores e artefatos derivados vindos do cache quente.
175
 
176
## Contexto antes da leitura
177
 
178
Além de baixar o exame atual, o cliente aproveita outros sinais publicados junto da fila.
179
 
180
Quando a lista informa que há exames anteriores disponíveis, o Nox pode abrir um diálogo de seleção, baixar o manifesto leve, validar a referência publicada e, só então, carregar o snapshot completo para permitir que o usuário escolha quais anteriores baixar.
181
 
182
Os exames anteriores selecionados entram em uma fila própria, sem misturar essa ação com o download do exame atual.
183
 
184
Outro contrato útil é a informação clínica.
185
 
186
Quando há contrato de backend para informação clínica, o app pode copiar uma síntese para a área de transferência. Se não houver informação clínica publicada, isso aparece como ausência de dado, não como falha técnica do fluxo de imagem.
187
 
188
Esse detalhe é importante porque o projeto não está tentando fazer o viewer ou o PACS virarem interface universal de contexto. Ele aproxima o contexto que já foi estruturado no backend do ponto em que a leitura acontece.
189
 
190
## Artefatos e anexos
191
 
192
Outra dor prática são os anexos do paciente.
193
 
194
Na ponta, nem sempre se controla bem a qualidade ou o tamanho do que foi digitalizado. O resultado pode ser um PDF grande, pesado, fora do fluxo natural de leitura.
195
 
196
No Nox, quando configurado, o cliente também consome anexos já DICOMizados.
197
 
198
Aqui a fronteira é importante: a aplicação macOS não é quem busca o PDF original nem faz a DICOMização.
199
 
200
Esse trabalho fica em outra aplicação, que consulta o endpoint adequado, transforma o conteúdo em DICOM e expõe os arquivos pela API de artefatos.
201
 
202
O Nox consome essa API, baixa os arquivos publicados e entrega os anexos no mesmo destino operacional dos DICOMs do exame.
203
 
204
Na prática, o anexo deixa de ser uma peça externa que o usuário precisa procurar manualmente e passa a chegar junto do fluxo de imagem, quando disponível.
205
 
206
## Artefatos de IA fora do PACS
207
 
208
O mesmo desenho também ajuda em outra dificuldade prática: incorporar artefatos de uma pipeline de IA em um fluxo que continua girando em torno do PACS e do viewer.
209
 
210
Nem todo resultado útil de IA precisa, ou consegue, nascer dentro do PACS.
211
 
212
Às vezes o artefato é produzido por uma pipeline externa, com autenticação, contrato próprio e controle de acesso adequado.
213
 
214
Nesse cenário, o Nox pode consumir esse egress como artefato do Skadi e aproximar o material do exame na estação de leitura, sem exigir que o PACS passe a conhecer nativamente aquela pipeline.
215
 
216
Essa diferença é relevante.
217
 
218
O app não transforma um resultado de IA em decisão clínica automática.
219
 
220
Ele apenas entrega, no ponto de uso, um artefato que já foi produzido e autorizado por outro componente do sistema.
221
 
222
## Integração com viewer
223
 
224
No macOS, o destino natural é usar OsiriX ou Horos.
225
 
226
O Nox pode gravar os DICOMs diretamente na pasta incoming do viewer, permitindo importação progressiva quando o caminho é a entrega direta a partir do PACS.
227
 
228
Quando o caminho é o Skadi, ele usa área de staging fora do incoming e só move o pacote completo para o destino operacional depois da validação.
229
 
230
Isso reduz a necessidade de o usuário ficar gerenciando arquivos, pastas ou etapas manuais.
231
 
232
O objetivo é simples:
233
 
234
quando o radiologista for abrir o estudo, o exame já deve estar mais perto de estar pronto.
235
 
236
## Limites
237
 
238
O Nox não substitui o PACS.
239
 
240
Não interpreta imagem.
241
 
242
Não decide prioridade clínica sozinho.
243
 
244
Não assina laudo.
245
 
246
E não tenta resolver todos os problemas de distribuição DICOM de uma instituição.
247
 
248
O projeto tem uma fronteira mais estreita:
249
 
250
- consumir uma fila pronta;
251
- manter uma fila local persistente de downloads;
252
- consumir pacotes DICOM do Skadi Hot Cache, quando disponíveis;
253
- baixar DICOMs diretamente do PACS quando esse for o caminho explícito ou necessário;
254
- consumir anexos DICOMizados publicados pela API de artefatos;
255
- consumir artefatos de IA publicados como egress fora do PACS;
256
- consumir referências de exames anteriores publicadas pelo backend;
257
- copiar informação clínica quando ela existir em contrato próprio;
258
- disparar ações operacionais autorizadas, quando configuradas, sem codificar a decisão no cliente;
259
- persistir estado local;
260
- integrar com o viewer;
261
- reduzir microesperas no fluxo de leitura.
262
 
263
Essa fronteira é justamente o que torna o projeto útil.
264
 
265
Ele não controla a qualidade da digitalização na ponta, não substitui o serviço que DICOMiza os anexos e não transforma cache em fonte de verdade. Apenas aproxima esse material do ponto de leitura quando ele já foi publicado em formato consumível.
266
 
267
## Síntese
268
 
269
Em radiologia, tempo perdido nem sempre aparece como grande falha.
270
 
271
Às vezes, aparece como pequenos intervalos repetidos: esperar a lista carregar, esperar o exame baixar, esperar o viewer importar, verificar se chegaram mais imagens, procurar anexos que deveriam estar no mesmo fluxo.
272
 
273
O Nox tenta reduzir essa camada de atrito.
274
 
275
Não por força bruta.
276
 
277
Mas por uma ideia simples:
278
 
279
fazer a fila trabalhar antes do clique.

Rodrigo Américo Cunha de Souza

Escreve sobre operações, dados e engenharia de processos em radiologia.