Nueva publicación

Encontrar

Artículo
· 25 ene, 2026 Lectura de 7 min

Destaque de Busca FHIR 2025.1 - Suporte a Buscas Relacionadas a Listas (_List, $find, Listas Funcionais/"Atuais")

Às vezes é mais conveniente, eficiente e seguro limitar as Buscas FHIR por "Listas" de Recursos pré-definidas.

Desde a v2025.1, suportamos vários recursos relacionados a Listas em nosso Servidor FHIR.

Vou destacar estes recursos aqui e fornecer alguns exemplos.

Em geral, você pode ver os detalhes sobre o Recurso List na documentação oficial do FHIR.

Mas aqui está uma breve descrição baseada no link acima:

O Recurso FHIR List representa uma coleção plana (opcionalmente ordenada) de registros usados para listas clínicas (ex: alergias, medicamentos, alertas, históricos) e gerenciamento de fluxo de trabalho (ex: rastreamento de pacientes, casos de ensino).
Listas podem ser homogêneas (tipo de recurso único) ou heterogêneas (tipos mistos, ex: uma lista de problemas abrangendo Conditions, AllergyIntolerances e Procedures).
Use List quando precisar de um conjunto curado/filtrado que não pode ser obtido via uma consulta simples (ex: alergias “atuais” vs. todas as alergias registradas).
Consultar uma List produz um snapshot de um ponto no tempo curado por humanos, enquanto consultar o endpoint do recurso geralmente retorna um conjunto de dados mais amplo, não curado, “no estado atual”.

Em nossas versões mais recentes (2025.1+), você pode encontrar novos suportes para trabalhar com Listas:

  • O Parâmetro de Busca _list

Veja a documentação FHIR relacionada para uma descrição completa. Veja nossa Documentação relacionada para detalhes sobre o suporte disponível (especificamente sobre buscas em nível de Tipo vs. nível de Sistema).

Usando este recurso, você pode definir, por exemplo, uma Lista de certos Recursos (como Encounters ou Patients, etc.) pelos quais você deseja buscar, sem ter que detalhar todos eles como múltiplos Parâmetros de Busca.

Por exemplo, eu poderia definir uma Lista de Pacientes:

 
Snippet cURL PUT /List

E então buscá-los desta forma:

 
Snippet cURL GET /Patient?_list

E receber de volta uma lista curada dos Pacientes que eu queria, em vez de ter que "mencionar" todos eles em vários Parâmetros de Busca.

E, claro, existem muitos outros casos de uso.

  • Listas Funcionais (incluindo a Operação Customizada $update-functional)

Um tipo especial de listas são as Listas Funcionais (ou Listas de "Recursos Atuais").

Veja a documentação FHIR relacionada para uma descrição completa.

Para sua conveniência, aqui está uma breve descrição baseada no link acima:

Muitos sistemas clínicos mantêm listas de pacientes “atuais” (por exemplo, uma lista de problemas atual e uma lista de medicamentos atual), mas o FHIR não pode inferir com segurança a “atualidade” inspecionando uma única instância de recurso. Usando Condition como exemplo, o mesmo tipo de recurso pode ser postado para múltiplos propósitos legítimos (entrada de lista de problemas curada, queixa/diagnóstico de encontro, contexto de fluxo de trabalho diagnóstico ou dados de encaminhamento de entrada), e a Condition não possui nenhum elemento que distingua claramente esses usos. Como distinguir o atual vs. o passado exigiria alteração retrospectiva (criando preocupações de integridade e assinatura digital), uma busca normal em Condition para um paciente retornará mais do que apenas os “problemas atuais” curados, e limitá-la apenas ao “atual” ocultaria outros registros importantes de Condition. Portanto, se uma Condition (ou registro similar) está na “lista atual” de um paciente pode ser determinado pelo fato de estar ou não referenciada na List apropriada. Via API REST, isso é expresso através do mecanismo de busca de lista usando _list com nomes de listas funcionais padrão (ex: GET [base]/AllergyIntolerance?patient=42&_list=$current-allergies), e o servidor pode suportar isso sem necessariamente expor uma instância de List independente. Existem vários nomes de listas funcionais "comuns", como $current-problems, $current-medications, $current-allergies e $current-drug-allergies (um subconjunto de alergias).

Para permitir a manutenção dessas Listas Funcionais, definimos uma Operação Customizada, chamada $update-functional, que permite a criação e atualização desses tipos de listas. Veja mais detalhes em nossa Documentação.

Você pode definir uma lista de alergias atuais, por exemplo, assim:

 
Snippet cURL POST /List/$update-functional?for=...&name=$current-allergies

Isso criará/atualizará a Lista $current-allergies, para um paciente específico (ID 34 no exemplo acima)

Note que eu incluí o 'for=' na URL apontando ao ID do paciente, e na liste eu tenho o 'subject' referenciando o paciente.

(Note também que para o cifrão ($) eu usei uma barra invertida antes (\), ou seja: \$)

E agora, posso solicitar o Recurso AllergyIntolerance deste Paciente e, em vez de receber todos eles, posso pedir apenas os "atuais", conforme definido na Lista acima.

Isso ficaria assim:

 
Snippet cURL GET /AllergyIntolerance?patient=...&_list=$current-allergies

E isso retornaria um subconjunto das alergias deste Paciente, conforme a lista de alergias atuais.

Note que estamos usando o mesmo Parâmetro de Busca _list mencionado anteriormente, apenas desta vez com uma "Lista Funcional" em vez de uma "Lista Customizada".

Note que você pode controlar os nomes das listas funcionais (e para cada lista, seu Parâmetro de Busca subject e o Tipo de Recurso subject; por exemplo, no exemplo acima, o parâmetro de busca subject foi patient e o Tipo de Recurso subject foi Patient), através da configuração do Endpoint FHIR, especificamente em "Interactions Strategy Settings", veja a documentação relacionada aqui. A aparência é esta:

  • Operação $find

Além disso, se você simplesmente quiser obter a própria Lista Funcional (para um assunto específico e de um tipo específico), pode usar a operação $find.

Veja a documentação FHIR relacionada para uma descrição completa. E veja também nossa Documentação relacionada.

Aqui está um exemplo, seguindo o anterior:

 
Snippet cURL /List/$find?patient=...&name=$current-allergies

Isso retornará a lista $current-allergies relacionada para este Paciente, conforme definido acima via a função $update-functional.

 

Veja o aplicativo relacionado no Open Exchange que inclui uma Postman Collection com os exemplos acima (e um pouco mais) e instruções sobre como executar isso no container docker do FHIR server template de @Evgeny Shvarov (de fato, o exemplo acima foi criado com base neste modelo; com uma pequena alteração... veja detalhes nas instruções de uso do meu app).

Uma nota geral - toda essa funcionalidade assume que você está usando a Estratégia de Armazenamento JsonAdvSQL, que é relativamente nova e o padrão atual para o seu Endpoint. (Se relevante, veja aqui sobre a migração de uma Estratégia legada)
Comentarios (0)1
Inicie sesión o regístrese para continuar
Artículo
· 25 ene, 2026 Lectura de 2 min

How to customize SQL table and field names of classes in InterSystems IRIS

In InterSystems IRIS, when you compile a persistent class, you automatically get a SQL table. Sometimes, there are situations that require having a slightly (or not so slightly) different names/options in SQL compared to Object model. Here are some of the settings that you can change to make it happen.

Class-level settings 

They define the "Face" of your class when it appears as a table in the SQL catalog.

SqlTableName allows you to change the name of SQL table that holds objects from your class. This is especially useful, when your class name uses reserved SQL words in a name, e.g. Group.

Usage:

Class Banking.Group Extends %Persistent [ SqlTableName = Banking_Group ]
{ 

}

SqlRowIdName allows you to rename the default primary key column to something semantically meaningful. Every persistent class has a unique identifier, and by default it's called ID. Naming it PatientID or OrderID makes it much more readable and prevents naming collisions in complex queries.

Usage:

Class Banking.Account Extends %Persistent [ SqlRowIdName = AccID ]
{
    
}

DdlAllowed allows or prevents the table schema from being changed using SQL. For example, if you are a "Class-first" developer, you don't want a DBA accidentally running ALTER TABLE and desyncing the class definition. Setting this to Not DdlAllowed (default) ensures the Class is the "source of truth." Setting it to DdlAllowed allows standard SQL DDL commands to modify the class.

Usage:

Class Banking.Transaction Extends %Persistent [ DdlAllowed ]
{
    
}
Class Banking.Account Extends %Persistent [ Not DdlAllowed ]
{
    
}

Property-level settings

These parameters change how individual data points (properties) are projected as columns.

SqlFieldName allows to provide a different column name than the property name. 

Usage:

Property CurrentAmount As %Float [ SqlFieldName = Amount ];

SqlListType and SqlListDelimiter allow to define how "List" collections are stored and viewed in SQL. Since SQL is inherently "flat," it struggles with lists. The goal of these settings is to set the storage method that matches your performance needs for "Unnesting" the data in queries. There are several possible values for the SqlListType:

SUBNODE: Stores list items in a separate global, which is more efficient for large lists (like a default for an array).

DELIMITED: Stores items as a single string with delimiters set in SqlListDelimiter 

LIST: Stored items in $List() format in memory and on disk. This is the default.

Usage:

Property Currencies As list Of %String [ SqlListDelimiter = ";", SqlListType = DELIMITED ];

There are several more settings you can configure to change how your SQL data is represented compared to the object model. Go through the documentation to uncver them all!

Comentarios (0)2
Inicie sesión o regístrese para continuar
Pregunta
· 25 ene, 2026

I am getting ASTM messages in a single line instead of different lines like H|..../rQ|..../rL in the service. How can I resolve it?

I've modified the class file, but messages still arrive as a single line (e.g., "H|.../rQ|.../rL") instead of separate lines in the ASTM service. The <ENQ>..<EOT> header looks correct, logs show no errors, and the service receives messages fine. Is there an Ensemble 2018.1 engine setting (like line terminator handling or TCP framing) to fix the line splitting? ​

4 comentarios
Comentarios (4)2
Inicie sesión o regístrese para continuar
Job
· 25 ene, 2026

What Is Machine Learning? Simple Explanation for Beginners

 

Machine Learning (ML) is one of the most exciting and important technologies in today’s digital world. It is a major part of Artificial Intelligence (AI) and is used in everything from social media and online shopping to healthcare and self-driving cars. But what exactly is machine learning, and how does it work?

In this beginner-friendly guide, you’ll learn what machine learning is, how it works, its types, real-life examples, benefits, challenges, and why it matters for the future.

What Is Machine Learning?

Machine Learning is a branch of Artificial Intelligence that allows computers to learn from data and improve their performance without being explicitly programmed.

In simple words, instead of telling a computer exactly what to do, we give it data and let it learn patterns from that data.

For example:

  • Email services use machine learning to filter spam messages.
  • Netflix uses machine learning to recommend movies and shows.
  • Banks use machine learning to detect fraud.

How Does Machine Learning Work?

Machine learning works by using data, algorithms, and models.

Data Collection

First, a large amount of data is collected. This data can be text, images, numbers, or videos.

Data Preparation

The data is cleaned and organized. Errors, duplicates, and missing values are removed.

Choosing an Algorithm

An algorithm is selected based on the type of problem. Different algorithms are used for different tasks.

Training the Model

The algorithm is trained using data. During training, the model learns patterns and relationships.

Testing and Prediction

The trained model is tested with new data. If the results are accurate, it can be used to make predictions.

Types of Machine Learning

There are three main types of machine learning:

Supervised Learning

In supervised learning, the model is trained using labeled data.

Examples:

  • Email spam detection
  • Price prediction
  • Image classification

Unsupervised Learning

In unsupervised learning, the model works with unlabeled data and finds hidden patterns.

Examples:

  • Customer segmentation
  • Recommendation systems
  • Data clustering

Reinforcement Learning

In reinforcement learning, the model learns by trial and error.

Examples:

  • Game-playing AI
  • Robotics
  • Self-driving cars

Real-Life Examples of Machine Learning

Machine learning is already part of our daily lives:

  • Social Media: Shows relevant posts and ads.
  • E-commerce: Recommends products.
  • Healthcare: Helps detect diseases.
  • Finance: Identifies fraud.
  • Voice Assistants: Understand speech.

Benefits of Machine Learning

Machine learning offers many advantages:

  • Automates repetitive tasks
  • Improves accuracy
  • Handles large amounts of data
  • Makes better predictions
  • Saves time and money

Challenges and Limitations of Machine Learning

Despite its benefits, machine learning also has challenges:

  • Requires large amounts of data
  • Can be biased
  • Needs high computing power
  • Difficult to explain decisions
  • Expensive to develop

Machine Learning vs Artificial Intelligence

Many beginners confuse machine learning with artificial intelligence.

  • Artificial Intelligence is the broader concept of making machines smart.
  • Machine Learning is a subset of AI that focuses on learning from data.

The Future of Machine Learning

The future of machine learning looks very promising. It will play a major role in:

  • Healthcare
  • Education
  • Business
  • Smart cities
  • Climate research

FAQs:

What is machine learning in simple words?

Machine learning means teaching computers to learn from data and make decisions on their own.

Is machine learning the same as artificial intelligence?

No. Machine learning is a part of artificial intelligence.

Where is machine learning used?

Machine learning is used in social media, healthcare, finance, online shopping, and voice assistants.

Do I need coding to learn machine learning?

Basic programming knowledge is helpful but not always required for beginners.

Is machine learning hard to learn?

It can be challenging at first, but beginners can learn it step by step.

Conclusion:

Machine learning is a powerful technology that allows computers to learn from data and make smart decisions. It is already transforming industries such as healthcare, finance, education, and entertainment. While machine learning offers many benefits like automation and better predictions, it also comes with challenges such as data bias, high costs, and privacy concerns.

For beginners, understanding the basics of machine learning is the first step toward exploring the world of artificial intelligence. As technology continues to evolve, machine learning will become even more important in shaping the future. Learning about machine learning today can help you stay prepared for tomorrow’s opportunities.

To continue learning with simple guides, tutorials, and the latest updates on artificial intelligence and machine learning, explore more content on AI With Arzan and stay connected with a platform dedicated to beginners and tech learners.

Comentarios (0)1
Inicie sesión o regístrese para continuar
Artículo
· 24 ene, 2026 Lectura de 4 min

通过 ODBC 将 C# 连接到 InterSystems IRIS

对于构建外部应用程序的开发人员,尤其是使用C# 等熟悉技术的开发人员来说,ODBC(开放数据库连接)是连接任何关系数据库(包括 InterSystems IRIS)的重要标准化桥梁。虽然 InterSystems 提供了自己的本地 ADO.NET 提供商,但 ODBC 驱动程序通常是与通用数据库工具和框架集成的最直接途径。

以下是使用 ODBC 驱动程序将 C# 应用程序连接到 IRIS 实例的分步指南,重点是无 DSN 连接字符串。

第 1 步:安装 InterSystems IRIS ODBC 驱动程序

在 Windows 机器上安装 InterSystems IRIS 时,默认会安装 InterSystems ODBC 驱动程序。

  • 如果 IRIS 位于同一台计算机上:驱动程序已经存在。
  • 如果 IRIS 位于远程服务器上:如果您是客户机,则必须从 WRC 网站下载并安装适用于客户机操作系统(Windows、Linux 或 macOS)和位元(32 位或 64 位)的独立 ODBC 客户机驱动程序包,或者安装客户机组件并复制 ODBC 驱动程序。

安装完成后,可在 Windows 的ODBC 数据源管理员(ODBC Data Source Administrator)工具中验证其是否存在(查找 InterSystems IRIS ODBC35 驱动程序)。

第 2 步:定义无 DSN 连接字符串

我们不在 Windows 管理员工具中创建预配置的数据源名称 (DSN),而是使用无 DSN 连接字符串。这样更便于部署,因为您的应用程序会携带所有必要的连接详细信息。

该格式指定了驱动程序名称和服务器参数:

Driver={InterSystems IRIS ODBC35};
server=127.0.0.1;
port=1972;
database=USER;
uid=_System

注意

  • 驱动程序名称InterSystems IRIS ODBC35 或有时为 InterSystems ODBC)必须与在本地 ODBC 数据源管理员中注册的名称完全一致。
  • Port 是 IRIS Superserver 端口(通常为 1972)。
  • Database 是 InterSystems IRIS 中的目标命名空间(Namespace)(如 USER 或您的自定义应用程序名称空间)。
  • 默认的 UID_System,密码是 SYS请务必在生产环境中更改这些默认值。

第 3 步:用 C# 实现连接

在 C# 项目中,您需要引用System.Data.Odbc命名空间,以使用通用 .NET ODBC 提供程序。

下面是一个最简单的 C# 示例,用于建立连接、针对默认表执行简单查询并显示结果。

using System.Data;
using System.Data.Odbc;

public class IrisOdbcExample
{
    public static void Main()
    {
        // 1. Define the DSN-less connection string
        string connectionString =
            "DRIVER={InterSystems IRIS ODBC35};" +
            "Server=127.0.0.1;Port=1972;Database=USER;" +
            "UID=_System;PWD=SYS;";

        // 2. Define the SQL Query (Example: querying the default Sample.Person table)
        string sql = "SELECT ID, Name FROM Sample.Person WHERE ID < 5";

        using (OdbcConnection connection = new OdbcConnection(connectionString))
        {
            try
            {
                connection.Open();
                Console.WriteLine("Connection successful!");

                using (OdbcCommand command = new OdbcCommand(sql, connection))
                using (OdbcDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Console.WriteLine($"ID: {reader["ID"]}, Name: {reader["Name"]}");
                    }
                }
            }
            catch (OdbcException ex)
            {
                // 3. Handle specific ODBC errors (e.g., wrong password, port blocked)
                Console.WriteLine($"ODBC Error: {ex.Message}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"General Error: {ex.Message}");
            }
            // The connection is automatically closed at
            // the end of the Using block.
        }
    }
}
 
设置 DSN

下一步

这种无 DSN 的方法提供了灵活性,并避免了客户端配置的臃肿。对于高性能的 C# 应用程序,您可以考虑使用本地InterSystems ADO.NET Provider,但对于快速集成和工具兼容性,ODBC 连接是一个可靠的选择。

❗始终记住在生产代码中使用参数化查询,以防止 SQL 注入漏洞。

Comentarios (0)1
Inicie sesión o regístrese para continuar