Pesquisar

Limpar filtro
Artigo
Danusa Calixto · Out. 27, 2022

O Servidor FHIR alimenta o Project Vulcan na HL7 FHIR Connectathon

![imagem](/sites/default/files/inline/images/vulcan-logo-full.png) Coloquei o Servidor FHIR da InterSystems para trabalhar na[ HL7 FHIR Connectathon em Baltimore](https://www.hl7.org/events/working_group_meeting/2022/09/) no último final de semana, postando pacotes, usando recursos Rest e interrogando o [Guia de Implementação Vulcan](http://www.hl7.org/vulcan/). Nós montamos os projetos Real World Data (RWD) e Schedule of Activity (SoA) para o pessoal do Vulcan IG, indo em frente e conectando pesquisa clínica e dados de saúde. Empregamos uma abordagem bastante decente para atender aos requisitos, Com os colegas da InterSystems (Huy, Russell, Regilo), estávamos responsáveis por dar suporte ao Servidor FHIR e à apropriação de dados para o evento. Se você já foi encarregado de digitar Pacotes FHIR para um caso de uso específico, acho que pode apreciar como a dificuldade pode ser enganosa. Provemos alguns Servidores FHIR da InterSystems do tamanho de um aparelho de som, 16 núcleos/128 GB, um para cada projeto, e começamos a trabalhar para cada equipe. As equipes vieram preparadas com seus notebooks Python contra nossos endpoints, com a expectativa de escrever uma História FHIR para a SCA, com um script de teste processual validando as chamadas retornadas com os resultados esperados. A meta da coorte para o RWD era bastante simples nas consultas de exemplo da[ Síndrome coronária aguda](https://build.fhir.org/ig/HL7/vulcan-rwd/acs.html) para mim: **Não é?** ``` /Patient?birthdate=le2002-09-01&gender=male,female /Encounter?reason-code:below=I20,I21,I22,I23,I24,I25&date=ge2020-09-01&date=le2021-09-31&status=finished&dischargeDisposition:not=exp /MedicationAdministration?status=completed&effective-time=ge[Encounter-Start-Date]& code=http://www.nlm.nih.gov/research/umls/rxnorm|1116632,http://www.nlm.nih.gov/research/umls/rxnorm|613391,http://www.nlm.nih.gov/research/umls/rxnorm|32968,http://www.nlm.nih.gov/research/umls/rxnorm|687667,http://www.nlm.nih.gov/research/umls/rxnorm|153658 ``` **Claro...** **Fracassos** *Falha do Pacote de Submódulo Synthea* De maneira esperançosa, nossa primeira ave-maria foi para gerar 2 milhões de recursos e milhares de Pacotes Synthea (usando este adorável[ repositório da InterSystems](https://github.com/intersystems-community/irisdemo-base-synthea)) para o endpoint de transação e o recurso de upload do Gerenciamento de Dados, incluindo vários submódulos centrados no coração e comutadores sofisticados... ``` docker run --rm -v $PWD/output:/output -v $PWD/modules:/modules --name synthea-docker intersystemsdc/irisdemo-base-synthea:version-$VERSION --exporter.practitioner.fhir.export true --exporter.hospital.fhir.export true --exporter.fhir.use_us_core_ig true -p 500 -s 21 -d /modules ``` Não alcançamos isso, o que não é surpreendente, eu acho, mas eu meio que esperava pelo menos chegar perto. Não chegamos. **Vitórias** *O Processo de Geração de Dados* Então, o [Geoff Low](https://github.com/glow-mdsol) nos deu uma pista sobre seu processo, nos separamos e prosperamos... é assim que o processo acontece. 1. Pegue um pacote de ponto de partida, em especial um que seja relevante para a Pesquisa e que tenha um mínimo de pacientes e encontros e use o pacote SDTM no [sourceforge](https://sourceforge.net/projects/fhirloinc2sdtm/files/LZZT_Study_Bundle/): 2. Agora, implemente uma [etapa de patching](https://github.com/sween/soa-bridge-match/blob/feature/connectathon_31/upstream/patch_json.py), para colocar o pacote no lugar, certifique-se de que ele seja carregado com sucesso no Servidor FHIR, carregue ou poste o pacote. 3. Depois de um novo ponto de partida, [aumente os encontros](https://github.com/sween/soa-bridge-match/blob/feature/connectathon_31/src/soa_bridge_match/dataset.py) com os códigos de motivos previstos ( I20,I21,I22,I23,I24,I25 ). ``` reasons = ["I21","I22","I23","I24","I25"]``` ``` 4. Adicione medicamentos aos encontros, incluindo todos os medicamentos esperados para o encontro para a Pesquisa da SCA. ``` medchoices = [ { "code": "1116632", "display": "ticagrelor" }, { "code": "613391", "display": "prasurgrel" }, { "code": "32968", "display": "clopidogrel" } ] medchoice = random.choice(medchoices) medconcept = CodeableConcept( coding=[ Coding( code=medchoice["code"], display=medchoice["display"], system="http://www.nlm.nih.gov/research/umls/rxnorm", ) ] ) ``` > IMPORTANTE! Verifique se os medicamentos estão dentro das datas/horários do encontro. > 5. Em seguida, confira se os Encontros realmente são internações e inclua todos os tipos aplicáveis. ``` statuses = ["in-progress","finished"] dischargeCodes = { "code": "home", "display": "Home" }, { "code": "hosp", "display": "Hospice" }, { "code": "exp", "display": "Expired" }, { "code": "long", "display": "Long-term care" }, { "code": "alt-home", "display": "Alternative home" }, ] ``` **Outra vitória** *Implementando o Parâmetro de Pesquisa do GI* O Guia de Implementação Vulcan inclui um parâmetro de pesquisa que é necessário para retornar encontros por disposição de alta. Abordamos isso de duas maneiras: a. Carregar todo o GI b. Carregar o Parâmetro de Pesquisa Carregar só o Parâmetro de Pesquisa era o caminho mais curto e estávamos em uma situação complicada por tempo suficiente, então aqui está como foi esse processo. Criada a pasta `/tmp/mypackage`, adicione o parâmetro de pesquisa do GI e seu próprio arquivo do pacote. ``` [irisdeploy@ip-192-168-0-37 tmp]$ tree /tmp/mypackage /tmp/mypackage ├── package.json └── parameter.json ``` O arquivo do pacote pode parecer assim: ``` { "name":"ron.sweeney.r4", "version":"0.0.1", "dependencies": { "hl7.fhir.r4.core":"4.0.1" } } ``` Em seguida, carregue isso no IRIS, desta maneira: ``` TL4:IRIS:FHIRDB>do ##class(HS.FHIRMeta.Load.NpmLoader).importPackages($lb("/tmp/mypackage")) Saving ron.sweeney.r4@0.0.1 Load Resources: ron.sweeney.r4@0.0.1 ``` A próxima etapa é associar o pacote ao endpoint: ![imagem](/sites/default/files/inline/images/associate.png) Em seguida, indexe novamente os encontros no repositório: ![imagem](/sites/default/files/inline/images/reindexing.png) Agora, você já deve ter o parâmetro de pesquisa/pacote carregado no endpoint: ![imagem](/sites/default/files/inline/images/encounter.png) Com o parâmetro de pesquisa carregado, podemos agora usá-lo assim! `curl https://fhir.ggyxlz8lbozu.workload-prod-fhiraas.isccloud.io/Encounter?dischargeDisposition=hosp` Enfim, o processo funcionou para nós, e considerar a geração de pacotes pela visão do Python foi uma abordagem muito melhor do que o Synthea às vezes é para conjuntos de dados minuciosos. O conjunto de dados resultante com que saímos no Domingo está [aqui](https://github.com/sween/soa-bridge-match/tree/feature/connectathon_31/upstream/subjects_35). Só queria compartilhar a experiência e agradecer às equipes dos projetos por tornarem o que pensei que seria um pesadelo em uma experiência divertida e educativa!
Anúncio
Daniel Alves de Souza · Set. 3, 2021

Oportunidade para atuar como Especialista de Integrações (Ensemble e Caché)

Estamos com uma oportunidade para atuar como Especialista de Integrações (Ensemble e Caché) na AFIP Medicina Diagnóstica e gostaria de saber se tem interesse ou alguém para indicar : Segmento de Atuação : Sáude/ Laboratorios/ Medicina Período : Indeterminado Tipo de Contratação : CLT Local : Full Remote Inicio : Imadiato 1) Especialista de Integrações (Ensemble e Caché) -Atividades a serem realizadas: -Profissional responsável pelas integrações entre Sistemas (Especialista). -Responsável por analisar, documentar, solicitar às empresas parceiras, implementar, implantar, documentar, monitorar e suportar integrações entre os sistemas da AFIP e sistemas de Clientes e/ou parceiros. -Deverá também administrar execuções de scripts na base de produção bem como gerenciar intervenções de terceiros na base de produção para correções de problemas. Como líder técnico, terá como principais responsabilidade: - Documentar estrutura dos sistemas AFIP; - Participar de Reuniões técnicas com fornecedores/colaboradores - Responsável técnico pela arquitetura de integrações entre sistemas. - Responsável pela homologação de sistemas de terceiros. - Responsável por manter catálogo de serviços de integração de dados. - É fundamental que o profissional conheça as tecnologias da Intersystems (Ensemble e Caché) Por favor, enviar CV atual com pretensão salarial CLT para: leonardo@inovation.com.br Assunto: Especialista de Integrações
Pergunta
Anderson F · Abr. 5, 2022

Como obter informações de Locks via consulta SQL?

Bom dia a todos. Preciso consultar informações das tabelas/classes que estejam em lock Eu achei na documentação a classe %SYS.LockQuery mas no exemplo ela parece ser uma Class Query(não estou acostumado com esse conceito) e só consigo consumir os dados via Object Script usando um %ResultSet Existe alguma forma de consumir essas informações diretamente via SQL ? Grato por qualquer ajuda Anderson, Acho que esse formato especifico de query é somente via resultset. Se você realmente precisar disso no SQL uma abordagem poderia ser criar uma sqlproc que internamente chama esse resultset e entrega o resultado. Veja se essa documentação te ajuda: https://docs.intersystems.com/ens201815/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_queries#GOBJ_queries_userqueries_example Oi @Djeniffer.Greffin7753 Primeiramente , muito obrigado pelo seu retorno. Essa sua sugestão é válida, e acredito que atenda o que eu pretendo, irei tentar implementar baseando-me no link que vc me mandou. Só acho estranho a intersystems não ter disponibilizado uma interface SQL pronta para isso. Quando li na documentação que essa informação ficaria em uma "Tabela de Lock" imaginei que seria como em outros bancos de dados Novamente meu muito obrigado pela sua ajuda Djeniffer
Anúncio
Angelo Bruno Braga · Nov. 10, 2022

Anunciando o SAM (System Alerting & Monitoring -> Alerta e Monitoramento do Sistema) 2.0

A InterSystems tem o prazer de anunciar o lançamento do System Alerting & Monitoring (SAM) versão 2.0 O que é o SAM? O SAM se conecta aos padrões utilizados nas APIS de Monioramento e do Monitor de Logs do IRIS com ferramentas familiares padrão do setor, como Grafana e Prometheus, para criar uma solução básica de monitoramento e alerta para clusters IRIS. Para saber mais sobre SAM, consulte o Guia de Alerta e Monitoramento do sistema. O que há de novo no SAM 2.0? As ferramentas padrão do setor nas quais o SAM se baseia foram todas atualizadas. Exportação e importação de configurações – agora você pode exportar sua configuração do SAM e reimportá-la para outra instância do SAM. Isso facilita a mudança de um ambiente para outro. Vários painéis do Grafana – Agora você pode criar vários painéis no Grafana e escolher o que deseja mostrar por padrão para cada instância do IRIS. HTTPS e prefixos de URL – o SAM agora pode usar HTTPS para coletar dados de observabilidade de suas instâncias IRIS. Além disso, você tem a opção de especificar um “prefixo de caminho de URL” que permite ao SAM monitorar várias instâncias IRIS em execução no mesmo host. Veja a documentação para obter mais informações sobre o SAM 2.0.
Pergunta
Luis Oliveira · Mar. 21

Formato de Caracteres não Alfabéticos na Global

Iris Gravando Global com caracteres sem padrão alfabético: ^SASNETWEBORGAO(1,0) = "SECRETARIA DE ADMINISTRAÃ"_$c(135)_"Ã"_$c(131)_"O^1010^01010101" Correto: ^SASNETWEBORGAO(1,0) = "SECRETARIA DE ADMINISTRAÇÃO^1010^01010101" Como solucionar o problema? Just a wild guess... set a="SECRETARIA DE ADMINISTRAÃ"_$c(135)_"Ã"_$c(131)_"O^1010^01010101" set b="SECRETARIA DE ADMINISTRAÇÃO^1010^01010101" set c=$zcvt(a,"I","UTF8") if b=c {write "convert from UTF8" } else { write "no idea..." } Olá Luis, Você pode utilizar a função $ZCONVERT (ObjectScript) para efetuar a conversão para o modo desejado antes da gravação ou da leitura. Verifique a lista de tabelas de tradução. Recomendo também que você verifique as configurações de instalação referentes a localização: Configuring National Language Support (NLS) Localization in InterSystems IRIS Acrescentando ... encontrei essas questões relacionadas ao seu tema na comunidade. https://community.intersystems.com/post/utf-8-translation-issue-within-iris https://community.intersystems.com/post/managing-utf-8-characters-database-rest-application Dá uma olhada. Nas respostas tem dicas e explicações. Pode te ajudar! 😉
Pergunta
Helder Pizzetti · Abr. 12, 2021

Abrir Bases de dados (.dat) antigas com cache

Boa tarde, Necessito abrir algumas bases de dados antigas. Quero dados e programas. Como proceder para conseguir? Helder bom dia Helder, como você já tem acesso ao terminal (entendo que sim pois você enviou o $ZV) você poderia usar o Studio para ter acesso aos programas(rotinas), classes/tabelas(estrutura de dados), se não forem globais, e com isso acesso aos dados. ou executar a aplicação e ter acesso aos dados. Se você está precisando extrair dados, vai precisar de conhecer o modelo de dados desta base. Agora o seu $ZV aponta para a versão 5.2 de 2006, é isto mesmo? Rochael boa tarde, Não tenho acesso ao terminal. O $ZV eu peguei de um arquivo texto que achei. Na realidade só tenho as Bases de Dados no formato .DAT do caché. Gostaria de abrir estas bases de dados. Este é o meu problema. Não tenho software algum da Intersystems instalado neste momento. Todo conteúdo destas bases foram desenvolvidas por mim. Como fazer? Agradeço vossa atenção. Helder Infelizmente não existe alternativa para acesso ao cache.dat que não seja com a instalação do Caché e montagem deste cache.dat neste ambiente. o motivo é segurança. não vou dizer impossível, mas muito improvável que alguém consiga acessar o cache.dat sem o ambiente Caché. o ideal é que você tenha o Caché 5.2 mesmo, mas uma versão superior não muito tempo distante de 2006 pode montar este cache.dat, e provavelmente seria necessário rodar um upgrade. Você tem a licença do Caché 5.2? A aplicação que você criou era character mode? para tentar alguma alternativa vai depender do que você tem no Cache.dat e como foi criado. me conte um pouco da historia para ver se ajudo mais. pode me mandar um email diretamente se preferir. Boa tarde, Tenho esta licença. [ConfigFile]FileType=License 5.1 [License]LicenseCapacity=Cache Department for Intel (Windows):2CustomerName=HP7 Informatica LtdaOrderNumber=200715550ExpirationDate=7/3/2031 Se tivesse arquivo para instalação eu tentaria. Além de ter esquecido Login padrão da intersystems. Helder boa tarde Helder, agora tá mais fácil. você poderia me enviar o cache.key para o email rochael@intersystems.com por favor? vou ver internamente como eu recupero seu acesso para baixar a versão em questão. me avise aqui quando enviar para não ficar perdido no spam!!!! obrigado, Olá, Enviei para seu E-mail. Helder
Pergunta
Fabio Silva · Jun. 25, 2021

Case em virtualização

Bom dia. Alguém tem algum case de utilização do Caché / Ensemble versões 2009, 2012 e 2018 no ambiente produtivo com o ESXI 7.0 da vmware? Falei com a InterSystems e eles responderam que não homologam virtualização, porém gostaria de saber se alguém tem algum caso de uso. Obrigado. Olá Fabio, Onde trabalho temos alguns ambientes virtualizados com o Caché. Qual sua dúvida especificadamente? oi Djeniffer. A dúvida é se vocês utilizam o Caché / Ensemble versões 2009, 2012 e 2018 no ambiente produtivo com o ESXI 7.0 da vmware Olá Fabio, A gente usa a versão 6.7. Mas, já atendi alguns clientes com a versão 7 rodando a versão 2018 do caché. Obrigado lembro que o VMware 7 foi lançado em Abril de 2020. Ou seja, versões mais antigas do nosso produto, não foram testas neste novo ambiente. April 2, 2020 Most users automatically associate virtualization with VMware. System administrators respect VMware for its great reliability, performance and usability. The official vSphere 7 release date was April 2, 2020. vSphere 7 is the newest version of the virtualization platform adding many new features.
Artigo
Anastasia Dyubaylo · Fev. 18, 2021

Como ganhar pontos no Global Masters ?

Olá Desenvolvedores ! Não é segredo para ninguém que o Global Masters está fortemente ligado a Comunidade de Desenvolvedores. Qualquer contribuição feita à Comunidade de Desenvolvedores acabará por prover pontos para o Global Masters. Para orientá-los preparamos um pequeno guia de como ganhar pontos no Global Masters: COMO GANHAR PONTOS NO GLOBAL MASTERS Cada post publicado na Comunidade de Desenvolvedores em Inglês Cada post publicado na Comunidade de Desenvolvedores em Português / Espanhol / Chinês / Japonês 200 400 1° Comentário na Comunidade de Desenvolvedores Cada Comentário na Comunidade de Desenvolvedores em Inglês* Cada Comentário na Comunidade de Desenvolvedores em Português* 300 30 60 Primeira resposta marcada como Aceita / cada resposta aceita 1 000 / 150 Tradução de um artigo 100 Publicação de 1 / 5 / 10 / 25 / 50 artigos na Comunidade de Desenvolvedores 1 500 / 7 500 / 15 000 / 40 000 / 75 000 Publicação de 1 / 5 / 10 / 25 / 50 perguntas na Comunidade de Desenvolvedores 500 / 2 000 / 5 000 / 15 000 / 30 000 Cada Aplicação no Open ExchangePontos Bônus para cada aplicação ZPM Publicação de 1 / 5 / 10 / 25 aplicações no Open Exchange 8004001 000 / 10 000 / 25 000 / 75 000 1 / 5 / 10 / 25 / 50 respostas aceitas na Comunidade de Desenvolvedores 1 000 / 4 000 / 8 000 / 20 000 / 40 000 750+ / 2000+ / 5000+ / 15000+ visualizações de sua publicação 600 / 2 500 / 7 000 / 20 000 Ler um artigo na Comunidade de DesenvolvedoresVer o vídeoCompartilhar um artigo / vídeo nas Redes Sociais 102040 Escrever 1 / 2 / 3 / 4 / 5 Artigos com a tag Melhores Práticas 1000 / 3000 / 7000 / 10 000 / 15 000 50 / 100 / 250 / 500 / 1000 downloads de sua aplicação no Open Exchange 2 500 / 5 000 / 7 500 / 12 500 / 25 000 Escrever uma avaliação da InterSystems / produtos InterSystems 2 000 / 3 000 Convidar um amigo para a Comunidade de Desenvolvedores 600 Criar um vídeo sobre sua aplicação OEX 3000 *contados somente os comentários que foram publicados após o registro no Global Masters . Completem os desafios, adquiram os distintivos, aumente seu nível. Quanto maior for o seu nível, melhores e mais interessantes são os prêmios disponíveis ! Vejam as informações adicionais sobre o Global Masters: O que é o Global Masters ? Comece sua jornada aqui ! Descrição dos Distintivos do Global Masters Descrição dos Níveis do Global Masters
Artigo
Guillaume Rongier · jan 11, 2021

iOS, FHIR e IRIS for Health

# Swift-FHIR-Iris Aplicativo iOS para exportar dados HealthKit para o InterSystems IRIS for Health (ou qualquer repositório FHIR) ![main](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/FHIR.png) # Índice * [Objetivo desta demonstração](#goal) * [Como executar esta demonstração](#rundemo) * [Pré-requisitos](#prerequisites) * [Instale o Xcode](#installxcode) * [Abra o projeto SwiftUi](#openswiftui) * [Configure o simulador](#simulator) * [Inicie o servidor InterSystems FHIR](#lunchfhir) * [Brinque com o aplicativo iOS](#iosplay) * [Como funciona](#howtos) * [iOS](#howtosios) * [Como verificar a autorização para dados de saúde](#authorisation) * [Como se conectar a um repositório FHIR](#howtoFhir) * [Como salvar um paciente no repositório FHIR](#howtoPatientFhir) * [Como extrair dados do HealthKit](#queryHK) * [Como transformar dados HealthKit em FHIR](#HKtoFHIR) * [Backend (FHIR)](#backend) * [Frontend](#frontend) * [Tarefas](#todo) Objetivo desta demonstração O objetivo é criar uma demonstração de ponta a ponta do protocolo FHIR. O que quero dizer com de ponta a ponta é, de uma fonte de informação como um iPhone. Colete seus dados de saúde no formato Apple (HealthKit), transforme-os em FHIR e envie para o repositório InterSystems IRIS for Health. Essas informações devem ser acessíveis por meio de uma interface web. iPhone -> InterSystems FHIR -> Página Web. Como executar esta demonstração Pré-requisitos Para a parte do cliente (iOS) Xcode 12 Para o servidor e aplicativo web Docker Instale o Xcode Não há muito o que falar aqui, abra a AppStore, procure por Xcode, instale. Abra o projeto SwiftUi Swift é a linguagem de programação da Apple para iOS, Mac, Apple TV e Apple Watch. É o substituto do objective-C. Clique duas vezes em Swift-FHIR-Iris.xcodeproj Abra o simulador clicando na seta superior esquerda. Configure o simulador Vá em Health Clique em Steps Add Data Inicie o servidor InterSystems FHIR Na pasta raiz deste git, execute o seguinte comando: docker-compose up -d No final do processo de construção, você será capaz de se conectar ao repositório FHIR: http://localhost:32783/fhir/portal/patientlist.html Este portal foi feito por @diashenrique. Com algumas modificações para lidar com os passos de atividade da Apple. Brinque com o aplicativo iOS O aplicativo primeiro solicitará que você aceite o compartilhamento de algumas informações. Clique em authorize Então você pode testar o servidor FHIR clicando em 'Save and test server' As configurações padrão apontam para a configuração do docker. Se tiver sucesso, você pode inserir as informações do seu paciente. Nome, Sobrenome, Aniversário, Gênero. Salve o paciente para FHIR. Um pop-up mostrará seu ID FHIR único. Consulte este paciente no portal: Acesse: http://localhost:32783/fhir/portal/patientlist.html Podemos ver aqui, que há um novo paciente "toto" com 0 atividades. Envie suas atividades: Volte para o aplicativo iOS e clique em Step count Este painel resume a contagem de passos da semana. No nosso caso, 2 entradas. Agora você pode enviá-los para o InterSystems IRIS FHIR clicando em enviar. Consulte as novas atividades no portal: Podemos ver agora que o Toto tem duas novas observações e atividades. Você pode eventualmente clicar no botão do gráfico para exibi-lo como um gráfico. Como funciona iOS A maior parte desta demonstração é construída em SwiftUI. https://developer.apple.com/xcode/swiftui/ Que é o framework mais recente para iOS e co. Como verificar a autorização para dados de saúde Ele está na classe SwiftFhirIrisManager. Esta classe é um singleton e estará carregando todo o aplicativo com a anotação @EnvironmentObject. Mais informações em: https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-views O método requestAuthorization: // Solicita autorização para acessar o HealthKit. func requestAuthorization() { // Solicitando autorização. /// - Tag: RequestAuthorization let writeDataTypes: Set<HKSampleType> = dataTypesToWrite() let readDataTypes: Set<HKObjectType> = dataTypesToRead() // pedido de autorização healthStore.requestAuthorization(toShare: writeDataTypes, read: readDataTypes) { (success, error) in if !success { // Trata o erro aqui. } else { DispatchQueue.main.async { self.authorizedHK = true } } } } Onde healthStore é o objeto de HKHealthStore(). O HKHealthStore é como um banco de dados de dados de saúde no iOS. dataTypesToWrite e dataTypesToRead são os objetos que gostaríamos de consultar no banco de dados. A autorização precisa de um propósito e isso é feito no arquivo xml Info.plist adicionando: <key>NSHealthClinicalHealthRecordsShareUsageDescription</key> <string>Read data for IrisExporter</string> <key>NSHealthShareUsageDescription</key> <string>Send data to IRIS</string> <key>NSHealthUpdateUsageDescription</key> <string>Write date for IrisExporter</string> Como conectar a um repositório FHIR Para esta parte usei o pacote FHIR do Smart-On-FHIR: https://github.com/smart-on-fhir/Swift-FHIR A classe usada é a FHIROpenServer. private func test() { progress = true let url = URL(string: self.url) swiftIrisManager.fhirServer = FHIROpenServer(baseURL : url! , auth: nil) swiftIrisManager.fhirServer.getCapabilityStatement() { FHIRError in progress = false showingPopup = true if FHIRError == nil { showingSuccess = true textSuccess = "Connected to the fhir repository" } else { textError = FHIRError?.description ?? "Unknow error" showingSuccess = false } return } } Isso cria um novo objeto fhirServer no singleton swiftIrisManager. Em seguida, usamos getCapabilityStatement() Se pudermos recuperar a declaração de capacidade do servidor FHIR, isso significa que nos conectamos com sucesso ao repositório FHIR. Este repositório não está em HTTPS, por padrão, a apple bloqueia este tipo de comunicação. Para permitir o suporte HTTP, o arquivo xml Info.plist pode ser editado assim: <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>localhost</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict> Como salvar um paciente no repositório FHIR Operação básica verificando primeiro se o paciente já existe no repositório Patient.search(["family": "\(self.lastName)"]).perform(fhirServer) Isso pesquisa por paciente com o mesmo sobrenome. Aqui, podemos imaginar outros cenários, como token Oauth2 e JWT para unir o patientid e seu token. Mas para esta demonstração, mantemos as coisas simples. Em seguida, se o paciente existe, nós o recuperamos, caso contrário, criamos o paciente: func createPatient(callback: @escaping (Patient?, Error?) -> Void) { // Cria um novo paciente let patient = Patient.createPatient(given: firstName, family: lastName, dateOfBirth: birthDay, gender: gender) patient?.create(fhirServer, callback: { (error) in callback(patient, error) }) } Como extrair dados do HealthKit Isso é feito consultando o healthkit Store (HKHealthStore()) Aqui nós estamos consultando os passos. Prepare a consulta com o predicado. //Semana passada let startDate = swiftFhirIrisManager.startDate //Agora let endDate = swiftFhirIrisManager.endDate print("Collecting workouts between \(startDate) and \(endDate)") let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions.strictEndDate) Em seguida, a própria consulta com seu tipo de dados (HKQuantityType.quantityType(forIdentifier: .stepCount)) e o predicado. func queryStepCount(){ //Semana passada let startDate = swiftFhirIrisManager.startDate //Agora let endDate = swiftFhirIrisManager.endDate print("Collecting workouts between \(startDate) and \(endDate)") let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions.strictEndDate) let query = HKSampleQuery(sampleType: HKQuantityType.quantityType(forIdentifier: .stepCount)!, predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: nil) { (query, results, error) in guard let results = results as? [HKQuantitySample] else { return } process(results, type: .stepCount) } healthStore.execute(query) } Como transformar dados HealthKit em FHIR Para esta parte, usamos o pacote Microsoft HealthKitToFHIR https://github.com/microsoft/healthkit-to-fhir Este é um pacote útil que oferece factories para transformar HKQuantitySample em FHIR Observation let observation = try! ObservationFactory().observation(from: item) let patientReference = try! Reference(json: ["reference" : "Patient/\(patientId)"]) observation.category = try! [CodeableConcept(json: [ "coding": [ [ "system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "activity", "display": "Activity" ] ] ])] observation.subject = patientReference observation.status = .final print(observation) observation.create(self.fhirServer,callback: { (error) in if error != nil { completion(error) } }) Onde item é um HKQuantitySample, em nosso caso, um tipo stepCount. O factory faz a maioria do trabalho de converter 'unit' e 'type' para FHIR codeableConcept e 'value' para FHIR valueQuantity. A referência ao PatientId é feita manualmente, lançando uma referência json fhir. let patientReference = try! Reference(json: ["reference" : "Patient/\(patientId)"]) O mesmo é feito para a categoria: observation.category = try! [CodeableConcept(json: [ "coding": [ [ "system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "activity", "display": "Activity" ] ] ])] Por fim, a observação é criada no repositório fhir: observation.create(self.fhirServer,callback: { (error) in if error != nil { completion(error) } }) Backend (FHIR) Não há muito a dizer, é baseado no modelo fhir da comunidade InterSystems: https://openexchange.intersystems.com/package/iris-fhir-template Frontend É baseado no trabalho de Henrique, que é um bom front end para repositórios FHIR feitos em jquery. https://openexchange.intersystems.com/package/iris-fhir-portal
Artigo
Larissa Prussak · Mar. 12, 2021

Agende tarefas com uma linha usando iris-cron-task

Oi pessoal! Às vezes, preciso agendar uma tarefa programaticamente. E em 99% preciso que algum método de classe seja chamado periodicamente. E eu quero que a programação seja iniciada por uma linha. Como um trabalho no crontab. Decidi apresentar esse módulo com o módulo iris-cron-task. Veja os detalhes abaixo! Instale o módulo com: USER> zpm "install iris-cron-task" E então você poderá agendar tarefas com uma linha. Por exemplo, se eu quiser o seguinte comando: set ^A($I(^A))=$H ser iniciado a cada minuto, posso ligar para o seguinte: zw ##class(dc.cron.task).Start("Task name","* * * * *","set ^A($I(^A))=$H",1,.taskid) isso criará uma tarefa com taskid que será executada a cada minuto. Quando você não precisar mais da tarefa, pode excluí-la com: zw ##class(dc.cron.task).Kill(taskid) Eu suportei apenas algumas configurações de cron, como a cada minuto: * * * * * Toda hora: 0 * * * * E todos os dias em uma certa hora: 0 0 * * * Você pode achar útil o site cronmaker para obter a expressão cron para qualquer programação de que precisar. Obrigado a @Lorenzo Scalese por apresentar o suporte para uma expressão cron arbitrária. PR são bem-vindos se você precisar de mais! Espero que gostem, qualquer feedback é apreciado! Verifique o aplicativo relacionado no InterSystems Open Exchange
Anúncio
Angelo Bruno Braga · Mar. 31, 2022

Conheçam Lorenzo Scalese – o Novo Moderador da Comunidade de Desenvolvedores!

Olá Comunidade, Dêem as boas-vindas ao @Lorenzo.Scalese nosso novo Moderador em Francês na Equipe da Comunidade de Desenvolvedores! 🎉 Vamos receber o Lorenzo com muitos aplausos e dar uma olhada em sua biografia! @Lorenzo.Scalese é Arquiteto de Soluções na Zorgi. > Zorgi é especialista e líder no mercado belga em soluções de TI para o setor de saúde. Um pouco sobre o Lorenzo: Ele começou sua carreira 2007 como desenvolvedor e trabalhou em vários projetos relacionados a industria de saúde: Soluções de Registro Médico Eletrônico (EMR), soluções de radiologia, conectividade com RIS\PACS e modalidades ionizantes, intercâmbio de dados médicos nacional,... Ele tem trabalhado com tecnologias InterSystems desde que ele iniciou sua carreira, desde o Caché 5.2 até o IRIS hoje. Hoje seu trabalho é principalmente definir a arquitetura geral de uma solução de EMR, criando ferramentas de desenvolvimento, scripts de implantação e migrar as aplicações baseadas em Caché/HealthShare para IRIS utilizando contêineres. Alguns outros fatos sobre o Lorenzo: Ele nasceu na Bélgica em 1984, seus pais são Italianos. Ele mora em uma vila rural, casado e pai de dois meninos (11 e 8 anos de idade). Seus hobbies são tecnologia, codificar, passeios de mountain bike, Faça-você-mesmo e vídeo games. BOAS-VINDAS CALOROSAS! Obrigado e seja bem-vindo @Lorenzo.Scalese 👏🏼 Que a força de Moderador da Comunidade de Desenvolvedores esteja com você ;)
Artigo
Claudio Devecchi · Mar. 11, 2021

Paciente no centro de todas as Informações - Parte 3

### Healthshare - Unified Care Record Todas as instituições de saúde hoje, sejam públicas ou privadas, enfrentam os mesmos desafios: Como fazer com que todas as informações de cada paciente sejam facilmente transmitidas dos seus sistemas de origem para as pessoas que precisam delas e vice-versa? E como utilizar todas estas informações para melhorar a tomada de decisões, a qualidade do atendimento e os resultados? Para atingir estes objetivos e fazer com que a informação consolidada do indivíduo seja finalmente disponibilizada para os diversos usos é preciso que as informações fluam por uma série de processos que vão desde a coleta da informação no sistema de origem, o seu tratamento, até as diferentes formas de disponibilização para os usuários finais. E é exatamente esta a especialidade do produto [HealthShare Unified Care Record](https://learning.intersystems.com/enrol/index.php?id=26) da InterSystems. Ele atua em todas as etapas do processo, de forma rápida, através de inúmeras ferramentas e funcionalidades, as quais explanarei a seguir: ### Interoperabilidade e Governança Esta etapa engloba todos os mecanismos de coleta e tratamento das informações nos sistemas de origem, seja através de API’s com protocolos específicos de saúde como o HL7, seja através de processos específicos ou customizados. Neste ponto, é importante que a plataforma de integração assegure flexibilidade, governança e segurança, além de performance e escalabilidade. Se qualquer sistema de origem “cair” a plataforma deve ter mecanismos de notificação para o time que gerencia o processo, assegurando que se o sistema voltar nenhuma informação será perdida. A plataforma deve ser escalável tanto para “plugar” novas fontes de informação, quanto para suportar todas as requisições dos consumidores e usuários. É muito comum sistemas de prontuário eletrônico internacionais fornecerem nativamente exportações de dados usando o protocolo HL7, que neste caso também é nativo nos produtos da Intersystems. Os sistemas nacionais geralmente demandam processos menos padronizados, e é por isso que é necessário que a plataforma seja de fácil e rápida implementação, e que esteja preparada para trabalhar com os sistemas de prontuário eletrônico conhecidos no mercado brasileiro e fornecer outras abordagens de captura de dados que não exijam que o sistema de origem tenha API’s prontas para fornecer as informações necessárias. ### Gestão de Terminologia Quando se junta informações de diferentes sistemas e fontes, se junta também inúmeros sistemas de codificações, sejam eles públicos ou proprietários. Exemplos: CID10, TUSS, LOINC, SNOMED CT, CBHPMl, etc. Isso pode gerar uma dificuldade para interpretar todos estes distintos sistemas de codificação. Um exemplo hipotético de terminologia: 0 sistema A registrou no episódio de atendimento de um determinado paciente o código “S53 – Luxação, entorse e distensão das articulações e dos ligamentos do cotovelo”, referente ao sistema de codificação CID10. O mesmo código foi registrado pelo sistema B com uma ligeira diferença na descrição, por exemplo “Luxação e dist. das art. e dos ligamentos do cotovelo”, sofrendo uma abreviação por uma questão de limitação do campo descrição no sistema de origem. Se os diagnósticos tratarem da mesma pessoa e do mesmo sistema de codificação, o profissional usuário da informação consolidada espera ver e interpretar as informações apresentadas da mesma maneira, não com descrições distintas. Se os diagnósticos tratarem da mesma pessoa, mas de sistemas de codificações distintos, é importante que o sistema ofereça mecanismos de De/Para das tabelas de codificação para serem aplicadas apenas no consumo das informações, facilitando assim a interpretação das informações aos seus usuários e a aplicação de algoritmos pelos cientistas de dados. Também é fundamental que todo tratamento de terminologia não altere e mantenha a informação que foi registrada no seu sistema de origem, com o seu devido sistema de codificação. Esse princípio é importante para que se mantenha e respeite todo o lastro da informação original e evite interpretações equivocadas em função do tratamento do dado. ### Modelo Canônico de Dados e múltiplas formas de “input” ou consumo Considerando apenas trocas de informações da área da saúde, há uma infinidade de protocolos. Temos por exemplo o HL7v2, o CCD, o PIX, o PDQ, DICOM para imagens, ASTM para laboratórios e o mais moderno HL7 FHIR, em diversas versões. No mercado nacional temos o TISS, que é utilizado para a saúde suplementar, entre muitos outros. Todos estes padrões de interoperabilidade carregam informações relevantes do paciente e muitos deles são baseados em modelos de dados completamente distintos. E mesmo quando não surge um novo, todos estes citados anteriormente sofrem constantes atualizações. Sem considerar os modelos de mensagens proprietários no mercado brasileiro. Levando em conta toda a variedade e dinamismo das mensagens, a InterSystems decidiu construir um modelo de dados central chamado de SDA (Summary Document Architecture) que fosse de simples entendimento, extensível e completo o suficiente para realizar a tradução, importação e exportação de todos estes protocolos que carregam as mensagens dos pacientes. Isso dá uma enorme vantagem para quem irá construir regras de negócio para notificações clínicas, para sistemas de decisões clínicas (CDSS), algoritmos de predição ou para quaisquer outros processos ou fluxos de negócio. Isso porque não exige que o especialista do negócio conheça os protocolos de entrada e saída, mas sim de apenas um único modelo de dados extremamente simplificado. Outra vantagem é que a própria InterSystems mantem atualizada as bibliotecas de transformações dos protocolos conhecidos, tanto de entrada (captura) quanto de saída (consumo) para este modelo canônico central. ### Gestão de Consentimento Em 2018, o Brasil passou a fazer parte dos países que contam com uma legislação específica para proteção de dados e da privacidade dos seus cidadãos. Isso significa que os dados pessoais e sensíveis não podem ser deliberadamente utilizados sem a obtenção da expressa autorização do seu proprietário. Mesmo antes de entrar em vigor esta legislação, a plataforma HealthShare já contava com as seguintes funcionalidades: • Cadastrar e manter políticas de consentimento dos dados em nível de ecossistema, de estabelecimento, ou por indivíduo, dando a opção de quais dados serão utilizados e para qual finalidade. • Armazenar o registro do consentimento, considerando-o também como parte das informações do paciente. • Aplicar as políticas de consentimento em toda a plataforma, fornecendo aos consumidores logs e mensagens específicas do motivo da não exibição de determinado grupo de informação. • Fornecer API’s para que além da plataforma, outros sistemas e usuários possam acessar e utilizar estes registros de consentimento. ### Visualizador Clínico, Serviços e API’s Depois que todas as informações do paciente são captadas, normalizadas e trabalhadas pela plataforma em todas as etapas descritas anteriormente, elas são disponibilizadas através de serviços na plataforma de Registro Unificado de Saúde. O consumo destes serviços pode ocorrer de diversas maneiras, partindo de diferentes profissionais ou sistemas de informação. A plataforma HealthShare Unified Care Record fornece nativamente as seguintes formas: • **Visualizador Clínico**: Trata-se de uma aplicação responsiva que exibe aos profissionais de saúde e times de cuidado todas as informações relevantes do paciente. Nesta aplicação é possível visualizar todo o histórico evolutivo dos exames do paciente, as alergias, os sinais vitais, os exames e laudos de radiologia, etc. Essa aplicação pode ser acessada através do próprio sistema de prontuário eletrônico ou vista através de um “frame” embutido no mesmo. • **Mensageria**: Consiste na entrega de mensagens clínicas, alertas ou notificações clínicas utilizando todo o potencial da plataforma de interoperabilidade e a riqueza das bibliotecas e protocolos disponíveis. • **API’s de Consumo**: A plataforma fornece um conjunto de API’s para trabalhar com todos os tipos de interações com a plataforma. Por exemplo: Serviços de Interação com o **Master Patient Index** (PIX, PDQ, Golden Record, etc.) Serviços de **Gestão de Consentimento**, podendo ser acessado por outros sistemas para fins de LGPD. Serviços de **Cadastro de Usuários e Profissionais** possibilitando a sincronização com o Single Sign-On da Organização. Serviços de **Auditoria** (ATNA). Qualquer interação com a plataforma gera um registro de log. Serviços de obtenção do *Registro Unificado do Paciente*, expostos de inúmeras formas (Documento PDF, TXT, XML, JSON, CDA, CCD, HL7, etc.) **HL7 FHIR**: Possibilita o acesso aos dados do paciente utilizando as últimas versões do poderoso protocolo HL7 FHIR e todas as suas capacidades. ### Conclusão O que as instituições estão buscando, cada vez mais, é uma abordagem holística do cuidado contínuo, da prevenção e da experiência centrada no paciente. E para viabilizar de forma completa este objetivo tão almejado, é preciso que todas as informações do indivíduo sejam colocadas dentro de uma mesma “caixa”, independentes do local, da instituição, do sistema, da tecnologia e do tipo de informação que é coletada, podendo ser de saúde, administrativo financeira, assistencial, comportamental e social, registro das interações do paciente com a instituição, autorizações do convênio, etc. É literalmente colocar o paciente no centro de tudo. É quebrar a fronteira dos silos e fazer uso das informações para o benefício do paciente e consequentemente de todos os que estão envolvidos no processo que o suporta. Claudio, Excelente a artigo sobre ambas as ferramentas da InterSystems para a área de saúde tanto o UCR quando o PatientIndex. Aqui na empresa fazemos uso do PatientIndex da InterSystems para centralizarmos nossa base de pacientes, bem como integrarmos nossos sistemas que fazem uso destes dados. Ainda estamos finalizando parte da implementação, mas, os ganhos com esta ferramenta são imensos para quem precisa realizar o gerenciamento destas informações, bem como sempre prover o dado correto aos sistemas requisitantes. A simplicidade de implementação das API's também é um fator destacável, visto que praticamente todos os protocolos atualmente são aceitos e é facilmente integrável ao MPI. Oi Djeniffer, muito obrigado pelo comentário, pelo compartilhamento da tua experiência e pelo trabalho que realizamos no Sabin. Eu também aprendo muito trabalhando com vocês.
Artigo
Olga Zavrazhnova · Mar. 19, 2021

Descrição dos Distintivos do Global Masters

Olá Comunidade! Aqui você encontrará informações dobre os distintivos da Comunidade de Desenvolvedores & InterSystems Global Masters, além da lisa completa de distintivos com suas descrições e como consegui-los. Informação geral sobre os Níveis e Distintivos no Global Masters Todos os participantes iniciam no 1° nível "Insider" após se juntarem ao Global Masters. Para subir de nível você deve conquistar o número de distintivos necessários para o próximo nível. Distintivos são conquistados através da realização de vários desafios no Global Masters. Verifique o artigo Descrição dos Níveis do Global Masters para ver a lista completa de Níveis.Você pode verificar os níveis e distintivos no Global Masters aqui: 1. Clique na aba "Progress" na página de desafios: 2. Role a página para baixo até a seção "Achievements" e então dê um clique no link "Level up by unlocking X more badges": Você pode ver todos os distintivos conquistados também na sua página de perfil da Comunidade de Desenvolvedores, excluindo-se os distintivos da seção Conquistas Global Masters (esses distintivos são relacionados a conquistas no próprio Global Masters e são visiveis apenas na sua página de perfil do Global Masters). Regras de como conquistar distintivos no Global Masters Esta tabela será atualizada conforme novos distintivos forem adicionados. Nome do Distintivo Regras Distintivos de Visualizações Popular Writer - 750 visualizações Concedido se alguma de suas postagens (perguntas ou artigos) na Comunidade de Desenvolvedores reunir mais de 750/2000/5000 visualizações exclusivas. A postagem não pode ser deletada; Ela deve estar publicada. Contamos apenas as postagens com avaliação positiva. Postagens do grupo de Feedback da Comunidade de Desenvolvedores não são contados. O distintivos é entregue apenas uma vez. Pontos são são fornecidos para cada postagem que reúna a quantidade listada de pontos. Notable Writer - 2.000 visualizações Famous Writer - 5.000 visualizações Gold Writer - 15.000 visualizações Distintivos de Artigos Publicados Reporter - 5 artigos Concedido quando o número de seus artigos (não perguntas) na Comunidade de Desenvolvedores atinge a quantidade de 5/10/25/50 respectivamente. A postagem não pode ser deletada; Ela deve estar publicada. Contamos apenas as postagens com avaliação positiva. Postagens do grupo de Feedback da Comunidade de Desenvolvedores não são contados. Blogger - 10 artigos Influencer - 25 artigos Opinion Maker - 50 artigos DC Best Practices Author Badge - 1 melhor prática Concedido depois que 1/10/25/50 de seus artigos (não perguntas) forem considerados como Melhores Práticas da Plataforma de Dados InterSystems na Comunidade de Desenvolvedores. A postagem não pode ser deletada; Ela deve estar publicada. Contamos apenas as postagens com avaliação positiva. Postagens do grupo de Feedback da Comunidade de Desenvolvedores não são contados. RecognizableBest Practices Author Badge - 2 melhores práticas Bronze Best Practices Author Badge - 3 melhores práticas Silver Best Practices Author Badge- 4 melhores práticas Gold Best Practices Author Badge - 5 melhores práticas Master of Answers - 5 respostas aceitas na Comunidade de Desenvolvedores Concedido após 5/10/25/50 de suas respostas forem marcadas como respostas aceitas na Comunidade de Desenvolvedores. Bronze Master of Answers - 10 respostas aceitas na Comunidade de Desenvolvedores Silver Master of Answers - 25 respostas aceitas na Comunidade de Desenvolvedores Gold Master of Answers - 50 respostas aceitas na Comunidade de Desenvolvedores Distintivos de Perguntas Curious Member - 5 perguntas Concedido quando a quantidade de suas perguntas na Comunidade de Desenvolvedores atinge 5/10/25/50 respectivamente. As perguntas não devem ser excluídas, devem estar publicadas. Contamos apenas as perguntas com avaliação positiva. Perguntas do grupo de Feedback da Comunidade de Desenvolvedores não são contadas. Thorough Member - 10 perguntas​ Inquisitive Member - 25 perguntas​ Socratic Member - 50 perguntas​ Distintivos de Favoritos Favorite Post - 10 vezes Concedido quando sua postagem (artigo, pergunta) na Comunidade de Desenvolvedores foi adicionada aos favoritos 10/50/100 vezes. A postagem não pode ser deletada; Ela deve estar publicada. Contamos apenas as postagens com avaliação positiva. Postagens do grupo de Feedback da Comunidade de Desenvolvedores não são contados. Remarkable Post - 50 vezes Unforgettable Post - 100 vezes Distintivos de Votação Insightful Author - 50 votos Concedido quando suas postagens (artigos, perguntas) obtiverem o total de 50/100/500/1000 votos na Comunidade de Desenvolvedores. A postagem não pode ser deletada; Ela deve estar publicada. Postagens do grupo de Feedback da Comunidade de Desenvolvedores não são contados. Expert Author - 100 votos Recognizable Author - 500 votos Powerful Author - 1000 votos Insightful Commenter - 50 votos Concedido quando suas respostas (comentários às perguntas) obtiverem o total de 50/100/500/1000 votos na Comunidade de Desenvolvedores. Respostas apagadas não são contadas Respostas no grupo de Feedback da Comunidade de Desenvolvedores não são contadas. Expert Commenter - 100 votos Recognizable Commenter - 500 votos Powerful Commenter - 1000 votos DC Moderator Concedido aos moderadores da Comunidade de Desenvolvedores. O distintivo não está vinculado a níveis. Conquistas Anuais - Os 10 principais autores Gold Best-Selling Author - 1° lugar 1° / 2° / 3° / 4° a 10° lugares na indicação "Best-Selling Author". Dado a autores cujos artigos obtiveram a quantidade máxima de visualizações na Comunidade de Desenvolvedores no ano. Silver Best-Selling Author - 2° lugar Bronze Best-Selling Author - 3° lugar DC Best-Selling Author - 4° a 10° lugares Gold Expert- 1° lugar 1° / 2° / 3° / 4° a 10° lugares na indicação “DC Expert”. Dado aos autores, que obtiveram o maior número de respostas aceitas no ano. Silver Expert - 2° lugar Bronze Expert - 3° lugar DC Expert - 4° a 10° lugares Gold Opinion Leader - 1° lugar 1° / 2° / 3° / 4° a 10° lugares na indicação “DC Opinion Leader”. Dado a autores cujas postagens e respostas obtiveram o maior número de votos na Comunidade de Desenvolvedores no ano. Silver Opinion Leader - 2° lugar Bronze Opinion Leader - 3° lugar DC Opinion Leader - 4° a 10° lugares Conquistas de Recrutadores Gold Recruiter - 100 referências Concedido após 1/10/50/100 de suas referências entrarem na Comunidade de Desenvolvedores. Silver Recruiter - 50 referências Bronze Recruiter - 10 referências DC Recruiter - 1 referências Contribuições Básicas à Comunidade de Desenvolvedores DC Author Concedido depois que você publicar seu primeiro artigo na Comunidade de Desenvolvedores. A postagem não pode ser deletada; Ela deve estar publicada. Artigos do grupo de Feedback da Comunidade de Desenvolvedores não são contados. A postagem deve ser do tipo "Artigo". InterSystems Researcher Concedido depois que você publicar sua primeira pergunta na Comunidade de Desenvolvedores. As perguntas não devem ser excluídas, devem estar publicadas. Perguntas do grupo de Feedback da Comunidade de Desenvolvedores não são contadas. A postagem deverá ser do tipo "Pergunta". DC Commenter Concedido depois que você publicar seu primeiro comentário na Comunidade de Desenvolvedores. Classificação positiva (votos para cima) ou zero votos Comentários feitos no grupo de Feedback da Comunidade de Desenvolvedores não são contados. DC Problem Solver Concedido depois que sua resposta foi marcada como a resposta aceita na Comunidade de Desenvolvedores. Marcado como Aceito Respostas no grupo de Feedback da Comunidade de Desenvolvedores não serão contadas. DC Translator Concedido após você traduzir 1 postagem na comunidade de desenvolvedores. Como adicionar uma tradução Winner of Advent Of COS Concedido aos Vencedores do Advento do Código no ano. Informações aqui. Global Master of the Month Concedido depois que você se tornar o "Advocate of the Month" no Global Masters Gold Advocate of the Year Concedido depois que você se tornar um dos "Best Advocates of the Year" no Global Masters no ano. Silver Advocate of the Year Bronze Advocate of the Year Conquistas do Open Exchange InterSystems Open Exchange Developer Concedido depois que você publicar 1/5/10/25 aplicações no InterSystems Open Exchange. Bronze Open Exchange Developer Silver Open Exchange Developer Gold Open Exchange Developer Verifique as informações adicionais sobre o Global Masters: Como se juntar ao InterSystems Global Masters Descrição dos Níveis do Global Masters Sinta-se a vontade para deixar seu questionamento sobre níveis e distintivos nos comentários!
Artigo
Andre Larsen Barbosa · Jul. 19, 2021

Configurando aplicativos cliente Caché para SSL / TLS

Ao usar o Studio, ODBC ou uma conexão de terminal para Caché ou Ensemble, você deve estar se perguntando como proteger a conexão. Uma opção é adicionar TLS (também conhecido como SSL) à sua conexão. Os aplicativos cliente Caché - TELNET, ODBC e Studio - todos sabem como adicionar TLS à conexão. Eles só precisam ser configurados para fazer isso. Configurar esses clientes é mais fácil em 2015.1 e posteriores. Vou discutir esse novo método. Se você já estiver usando o método antigo e legado, ele continuará funcionando, mas eu recomendo que você considere mudar para o novo. ## Background Esses aplicativos cliente podem ser instalados em uma máquina que não tenha o servidor instalado. Eles não podem depender de ter acesso aos locais normais para armazenar configurações, como o banco de dados CACHESYS ou o arquivo cpf. Em vez disso, suas configurações para os certificados ou protocolos a serem aceitos são armazenadas em um arquivo de texto. Muitas das configurações neste arquivo são semelhantes às configurações em uma configuração SSL / TLS no portal de gerenciamento. ## Onde está o arquivo de configurações? Você terá que criar seu próprio arquivo. O instalador do cliente não cria um para você. Por padrão, o arquivo de configurações é chamado SSLDefs.ini e deve ser colocado no diretório InterSystems \ Cache sob o diretório para arquivos de programas comuns de 32 bits. Este diretório é encontrado na variável de ambiente do Windows * CommonProgramFiles (x86) * no Windows de 64 bits ou * CommonProgramFiles * no Windows de 32 bits. Por exemplo, no Windows 8.1, o arquivo padrão seria: ~~~ C:\Program Files (x86)\Common Files\InterSystems\Cache\SSLdefs.ini ~~~ Se quiser mudar isso, você terá que dizer aos executáveis do cliente onde encontrar o arquivo de configurações. Você pode fazer isso definindo a variável de ambiente * ISC_SSLconfigurations * e configurando-a para todo o caminho e nome de arquivo do seu arquivo. Você pode precisar de permissões de administrador para fazer isso. ## O que há no arquivo de configurações? O arquivo possui dois tipos de seções. O primeiro tipo combina conexões com configurações TLS. Por exemplo, pode dizer ao Studio para usar a seção chamada "Configurações padrão" para encontrar seus parâmetros TLS ao se conectar a development.intersystems.com. O segundo tipo define as configurações de TLS a serem usadas para a conexão. Por exemplo, eles definiriam por qual Autoridade de Certificação esperar que o certificado do servidor seja assinado. As configurações nestas seções são muito semelhantes às configurações em uma configuração SSL / TLS em um servidor Caché ou Ensemble. O primeiro tipo de seção se parece com isto: ~~~ [Development Server] Address=10.100.0.17 Port=1972 TelnetPort=23​ SSLConfig=DefaultSettings​ ~~~ O nome entre colchetes pode ser o que você quiser. Ele está lá apenas para tornar mais fácil para você manter o controle de qual conexão é essa. As configurações de Endereço, Porta e TelnetPort são usadas para decidir quais conexões devem corresponder a esta seção. Os endereços IP ou nomes DNS podem ser usados para o endereço em clientes 2016.1 ou posteriores. Tanto o endereço quanto a porta ou TelnetPort devem corresponder ao local onde o aplicativo cliente está se conectando para que a configuração seja usada. O parâmetro final (SSLConfig) é o nome da configuração da qual obter as configurações de TLS. Ele precisa corresponder ao nome de uma das configurações no arquivo. O segundo tipo de seção tem a seguinte aparência: ~~~ [DefaultSettings] VerifyPeer=2 VerifyHost=1 CAfile=c:\InterSystems\certificates\CAcert.pem CertFile=c:\InterSystems\certificates\ClientCert.pem KeyFile=c:\InterSystems\certificates\ClientKey.key Password= KeyType=2 Protocols=24 CipherList=ALL:!aNULL:!eNULL:!EXP:!SSLv2 ~~~ O nome da seção está listado na primeira linha: [DefaultSettings] e corresponde ao nome listado no parâmetro SSLConfig da primeira seção do exemplo acima. Portanto, esta configuração será usada para conexões com o servidor 10.100.0.17 na porta 1972 ou na porta 23. Usar copiar e colar no exemplo acima geralmente causa caracteres não imprimíveis em seu arquivo de texto. Certifique-se de ter removido quaisquer caracteres extras, por exemplo, salvando o arquivo como somente texto e abrindo-o novamente. Aqui está uma descrição do que os parâmetros significam: - **VerifyPeer** As opções para isso são 0 = nenhum, 1 = solicitação e 2 = exigir. Exigir é o valor recomendado. Se você não escolher nenhum, é possível que um servidor malicioso finja ser o servidor ao qual você pretende se conectar. Se você escolher requerer, precisará preencher uma Autoridade de certificação em que você confia para verificar os certificados para o valor CAFile. Isso é equivalente a "Verificação do certificado do servidor" no portal. (Observação: a solicitação não faz sentido para uma configuração de cliente, mas eu a incluí aqui para que você possa entender por que as opções são 0 e 2.) - **VerifyHost** As opções para isso são 0 = nenhum, 1 = obrigatório. Esta opção verifica se o certificado do servidor lista o nome do host ou IP ao qual você pediu para se conectar nos campos Nome comum do assunto ou subjectAlternativeName. Este campo não possui equivalente no portal, mas é o mesmo tipo de verificação da propriedade SSLCheckServerIdentity da classe% Net.HttpRequest. Só é configurável se o seu cliente estiver usando o Caché / Ensemble 2018.1 ou posterior, ou qualquer versão da InterSystems IRIS Data Platform. - **CAfile** O caminho para o arquivo de autoridade de certificação (CA) confiável. Deve ser a CA que assinou o certificado do * outro * lado (o servidor), não o seu próprio certificado. Isso deve ser preenchido se você escolheu um valor VerifyPeer de 2. Isso é o equivalente a "Arquivo contendo certificado (s) de autoridade de certificação confiável (s)" no portal. Os certificados devem estar no formato PEM. - **CertFile** O caminho para seu próprio certificado. Deve ficar em branco se o seu cliente não tiver um. Equivale a "Arquivo contendo o certificado deste cliente" no portal. Os certificados devem estar no formato PEM. - **KeyFile** O caminho para a chave privada correspondente para CertFile. Deve ser preenchido se você tiver um CertFile e em branco se não tiver. Isso é equivalente a "Arquivo contendo chave privada associada" no portal. - **Password** A senha necessária para descriptografar sua chave privada. Deve ficar em branco se você não estiver usando um certificado para este cliente ou se a chave privada do certificado não estiver criptografada no disco. - **KeyType** A sua chave privada é RSA (2) ou DSA (1)? O valor é relevante apenas para configurações que possuem CertFile e KeyFile definidos. Se você não tiver certeza de qual é, sua chave provavelmente é RSA. - **Protocols** Esta é uma representação decimal de valores de bits para as versões de SSL / TLS suportadas. As opções são: 1 = SSLv2, 2 = SSLv3, 4 = TLSv1, 8 = TLSv1.1, 16 = TLSv1.2. SSLv2 e SSLv3 têm problemas conhecidos e não são recomendados. Mais de uma versão pode ser especificada adicionando números. Por exemplo, 24 é TLSv1.1 e TLSv1.2. Isso equivale às caixas de seleção "Protocolos" do portal. (Observação: os 8 e 16 bits não estão em 2015.1. Se quiser usá-los, você precisa atualizar para 2015.2 ou superior.) - **CipherList** Isso é o equivalente a "ciphersuites ativados" no portal. Isso controla exatamente quais tipos de criptografia e hashing serão aceitáveis para este cliente. ** ALL:! ANULL:! ENULL:! EXP:! SSLv2 ** é o valor padrão para esta configuração no portal de gerenciamento. Se você está tendo problemas com sua conexão, provavelmente não é isso. Alterar isso pode tornar sua conexão menos segura, permitindo uma criptografia fraca. Você pode encontrar mais informações sobre este valor no site do openssl. ## Final notes Isso é tudo que você precisa fazer! Se você criar seu arquivo e colocá-lo no local conhecido, ele será usado automaticamente se o nome ou endereço IP e a porta que você está conectando corresponderem a uma das conexões listadas no arquivo. ### Server setup Este artigo é sobre como configurar o lado do cliente de sua conexão para usar SSL, mas não se esqueça de que o servidor ao qual você está se conectando também precisa entender como aceitar SSL. A documentação sobre como configurar o SuperServer para usar SSL pode ser encontrada aqui: [http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_superserver](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_superserver) E a documentação de configuração do serviço Telnet está aqui: [http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_telnet_svr](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_telnet_svr) O método $ SYSTEM.Security.Users.SetTelnetSSLSetting () permite controlar se o servidor Telnet permite ou exige o uso de SSL. Ele está disponível em 2016.1 e posteriores. ### DSN configuration Você não precisa alterar o DSN para uma conexão ODBC, contanto que tenha um endereço de conexão e uma porta correspondentes em seu arquivo de configurações. SSL será usado mesmo se a senha for selecionada para o método de autenticação no DSN. As opções __Password with SSL / TLS__ e ** SSL / TLS server name ** eram para o estilo pré-2015.1 de configuração de SSL para ODBC. ### Documentation link A documentação sobre TLS para aplicativos cliente está agora disponível no site de documentos IRIS: [https://irisdocs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_windotinifile](https://irisdocs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GCAS_ssltls#GCAS_ssltls_windotinifile)
Anúncio
Rochael Ribeiro · Maio 24, 2021

Conheça Djeniffer Greffin– A nova moderadora da Comunidade!

Olá Desenvolvedores Estamos felizes por anunciar @Djeniffer.Greffin7753 como a nova moderadora na nossa comunidade! Vamos recebe-la com aplausos e deem uma olhada na biografia dela! Djeniffer trabalha como DBA Consulting no Sabin Medicina Diagnóstica. E aqui estão algumas palavras de @Djeniffer.Greffin7753: - Trabalho com tecnologia da InterSystems desde 2009, meu primeiro contato com a tecnologia foi em uma migração de sistemaoriginalmente escrito em MUMPS para um sistema WEB desenvolvido em ZEN, usando classes e mapeamento global. - Em 2012, fui para uma empresa de desenvolvimento de cuidados de saúde mais especificamente em laboratórios, com um produto LIS (Laboratory Information System). Foi aqui que comecei a trabalhar mais fortemente com interoperabilidade no setor de saúde. Foi neste ponto que comecei a me especializar mais e passei a não só desenvolver, mas também a atuar na performance de aplicações e na afinação de sistemas operacionais. - Em 2018 fui convidada por um de nossos clientes para fazer parte da equipe responsável pelo ambiente core da empresa. Neste cliente, especializei-me em criar interoperabilidade entre dispositivos de laboratório. Tenho profundo conhecimento dos padrões de comunicação na área de saúde. - Hoje atuo fortemente na concepção, implementação e segurança de soluções tecnológicas em laboratório. Portanto, vamos dar as boas-vindas a nossa nova moderadora DC! Obrigado e parabéns, @Djeniffer.Greffin7753! Espero que nossa comunidade cresça com sua ajuda! 👏🏼 Seja muito bem vinda Djeniffer. Tenho certeza que irá agregar muito na comunidade com a tua experiência. Obrigada Claudio!