{"id":8475,"date":"2020-04-25T21:40:43","date_gmt":"2020-04-26T04:40:43","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8475"},"modified":"2025-06-13T23:42:42","modified_gmt":"2025-06-14T06:42:42","slug":"fhir-data-model-with-couchbase-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/fhir-data-model-with-couchbase-n1ql\/","title":{"rendered":"Modelo de dados FHIR com o Couchbase N1QL"},"content":{"rendered":"<p><span style=\"font-weight: 400\">O Couchbase \u00e9 um banco de dados JSON que agora se tornou uma alternativa ao RDBMS tradicional. Ele conseguiu isso, n\u00e3o apenas fornecendo o armazenamento de chave-valor l\u00edder do setor e os mesmos recursos de consulta e tradu\u00e7\u00e3o ACID que as organiza\u00e7\u00f5es esperam, mas tamb\u00e9m a flexibilidade de armazenar nativamente seus dados no formato JSON. Al\u00e9m disso, o Couchbase tamb\u00e9m inclui armazenamento distribu\u00eddo, escalabilidade multidimensional, alta disponibilidade e replica\u00e7\u00e3o entre datacenters (XDCR). Tudo isso em uma \u00fanica plataforma de dados Couchbase que se estende at\u00e9 a borda com o Couchbase Mobile.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O Couchbase tamb\u00e9m est\u00e1 comprometido em ampliar seus recursos muito al\u00e9m do que \u00e9 necess\u00e1rio em aplicativos RDBMS tradicionais. Com o Couchbase Cloud, onde tudo \u00e9 totalmente gerenciado e automatizado, fornecendo um banco de dados como servi\u00e7o (DBaaS) seguro que simplifica o gerenciamento de esquemas de banco de dados FHIR, implantando, gerenciando e operando o Couchbase Server em ambientes de v\u00e1rias nuvens com apenas alguns cliques. O Couchbase Cloud \u00e9 flex\u00edvel, altamente dispon\u00edvel e oferece uma op\u00e7\u00e3o econ\u00f4mica diferenciada para empresas que buscam reduzir as tarefas operacionais e, ao mesmo tempo, aproveitar a mais avan\u00e7ada tecnologia NoSQL. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Tamb\u00e9m estamos fazendo isso colaborando com muitos de nossos clientes de diferentes setores para entender suas necessidades de neg\u00f3cios e como o Couchbase pode ajudar com esses desafios. Esses setores incluem varejo e com\u00e9rcio eletr\u00f4nico, viagens e hotelaria, servi\u00e7os financeiros, energia e servi\u00e7os p\u00fablicos, al\u00e9m de alta tecnologia e jogos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Neste blog, gostaria de me concentrar em como o banco de dados Couchbase pode ser usado no setor de sa\u00fade. Especificamente, o foco ser\u00e1 a especifica\u00e7\u00e3o Fast Healthcare Interoperability Resources (FHIR), definida por <\/span><a href=\"https:\/\/www.hl7.org\/fhir\/overview.html\"><span style=\"font-weight: 400\">HL7 FHIR<\/span><\/a><span style=\"font-weight: 400\">.   O motivo deste blog \u00e9 o n\u00edvel de interesse de muitos de nossos clientes que est\u00e3o atualmente planejando ou implementando seus aplicativos compat\u00edveis com FHIR usando o banco de dados Couchbase.<\/span><\/p>\n<h3>Por que o FHIR com Couchbase \u00e9 de seu interesse?<\/h3>\n<ol>\n<li>As organiza\u00e7\u00f5es buscam desenvolver aplicativos FHIR e\/ou procuram aproveitar os muitos benef\u00edcios do banco de dados NoSQL, como escalabilidade distribu\u00edda, alta disponibilidade, XDCR e multidimensional.<\/li>\n<li>Os arquitetos ou desenvolvedores precisam entender como o banco de dados JSON do Couchbase pode reduzir bastante a complexidade de seus aplicativos, relegando o complexo FHIR Search [<a href=\"https:\/\/www.hl7.org\/fhir\/searchparameter-registry.html\">https:\/\/www.hl7.org\/fhir\/searchparameter-registry.html<\/a>] processamento para a camada do servidor de banco de dados.<\/li>\n<li>Os analistas de dados precisam entender como aproveitar seu conhecimento de SQL para consultar dados FHIR diretamente com <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/n1ql\/\">Couchbase N1Q<\/a>L e <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/full-text-search\/\">Pesquisa de texto completo.<\/a><\/li>\n<li>Voc\u00ea est\u00e1 interessado em descobrir como o Couchbase N1QL, um SQL para JSON, pode fornecer uma maneira eficiente de consultar um modelo de dados relacional, conforme definido pelo protocolo FHIR, que \u00e9 de natureza hier\u00e1rquica e relacional JSON.<\/li>\n<\/ol>\n<h3><span style=\"font-weight: 400\">O que \u00e9 FHIR?<\/span><\/h3>\n<p><span style=\"font-weight: 400\">FHIR\u00ae - <a href=\"https:\/\/hl7.org\/fhir\">Recursos r\u00e1pidos de interoperabilidade na \u00e1rea de sa\u00fade<\/a> - \u00e9 uma estrutura de padr\u00f5es de \u00faltima gera\u00e7\u00e3o criada pela HL7. O FHIR (pronuncia-se \"fire\", fogo) combina os melhores recursos do HL7 e aproveita os mais recentes padr\u00f5es da Web, aplicando um foco r\u00edgido na capacidade de implementa\u00e7\u00e3o para trocas de informa\u00e7\u00f5es.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os aplicativos FHIR s\u00e3o baseados no conceito de \"Recursos\". Esses recursos s\u00e3o reunidos em aplicativos espec\u00edficos de sa\u00fade, abrangendo desde as fun\u00e7\u00f5es administrativas e cl\u00ednicas at\u00e9 as fun\u00e7\u00f5es de atendimento ao paciente. <\/span>O FHIR \u00e9 adequado para uso em uma ampla variedade de contextos - aplicativos para telefones celulares, comunica\u00e7\u00f5es em nuvem, compartilhamento de dados com base em EHR, comunica\u00e7\u00e3o com servidores para provedores de servi\u00e7os de sa\u00fade.<\/p>\n<p>Um dos principais objetivos do FHIR \u00e9 especificar um padr\u00e3o que possa ser adotado por diferentes aplicativos de sa\u00fade, permitindo assim a interoperabilidade entre diferentes aplicativos funcionais e, por fim, reduzindo o custo das implementa\u00e7\u00f5es.<\/p>\n<p><span style=\"font-weight: 400\">Consulte o <a href=\"https:\/\/www.hl7.org\/fhir\/overview.html\">Site de vis\u00e3o geral da FHIR<\/a> Para mais informa\u00e7\u00f5es.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">O modelo de dados FHIR<\/span><\/h4>\n<p><span style=\"font-weight: 400\">No centro da FHIR est\u00e1 a defini\u00e7\u00e3o comum dos diferentes tipos de recursos que englobam todos os diferentes aspectos do setor de sa\u00fade. Desde a fun\u00e7\u00e3o administrativa de Paciente, Profissional, Equipe de Atendimento, Dispositivo, Organiza\u00e7\u00e3o, Local, Servi\u00e7o de Sa\u00fade, at\u00e9 a Cl\u00ednica, Diagn\u00f3stico, Medicamentos, bem como as fun\u00e7\u00f5es Financeiras, como Cobertura de Seguro.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Para os fins deste artigo, estou usando o conjunto de dados sint\u00e9ticos de amostra dispon\u00edvel no Synthetic Mass que foi gerado por <a href=\"https:\/\/synthetichealth.github.io\/synthea\/\">S\u00edntese<\/a>uma simula\u00e7\u00e3o de popula\u00e7\u00e3o de pacientes de c\u00f3digo aberto disponibilizada pela The MITRE Corporation.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os dados foram disponibilizados como um pacote de recursos para cada paciente sint\u00e9tico, que foram importados para uma inst\u00e2ncia do banco de dados Couchbase 6.5.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8476 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM.png\" alt=\"HL7 FHIR API Data Model for Healthcare in NoSQL JSON Database\" width=\"1151\" height=\"835\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM.png 1151w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-300x218.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1024x743.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-768x557.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-20x15.png 20w\" sizes=\"auto, (max-width: 1151px) 100vw, 1151px\" \/><\/p>\n<pre class=\"lang:default decode:true\">SELECT resourceType, COUNT(1) doc_count\r\n FROM fhir_admin\r\nWHERE resourceType IS NOT MISSING\r\n GROUP BY resourceType\r\n\r\ndoc_count\tresourceType\r\n567\t\"AllergyIntolerance\"\r\n3577\t\"CarePlan\"\r\n3577\t\"CareTeam\"\r\n52387\t\"Claim\"\r\n8714\t\"Condition\"\r\n57\t\"Device\"\r\n17069\t\"DiagnosticReport\"\r\n42019\t\"Encounter\"\r\n42019\t\"ExplanationOfBenefit\"\r\n2942\t\"Goal\"\r\n965\t\"ImagingStudy\"\r\n14982\t\"Immunization\"\r\n926\t\"MedicationAdministration\"\r\n10368\t\"MedicationRequest\"\r\n235332\t\"Observation\"\r\n1033\t\"Organization\"\r\n1177\t\"Patient\"\r\n1034\t\"Practitioner\"\r\n32454\t\"Procedure\"\r\n<\/pre>\n<h4><span style=\"font-weight: 400\">Alguns pontos importantes sobre o modelo de dados FHIR<\/span><\/h4>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O modelo gira em torno do objeto \"paciente<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O tipo de objeto \u00e9 representado pelo campo \"resourceType<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A estrutura JSON suporta um conjunto mais rico de informa\u00e7\u00f5es de sa\u00fade que podem ser mantidas sobre o paciente: n\u00edvel de sa\u00fade, detalhes de contato, endere\u00e7os, comunica\u00e7\u00f5es, etc.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Cada objeto tem um campo \"id\" exclusivamente identific\u00e1vel.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os objetos est\u00e3o fazendo refer\u00eancia uns aos outros. A maioria deles tem refer\u00eancias ao objeto \"paciente\".<\/span><\/li>\n<\/ol>\n<h3><span style=\"font-weight: 400\">Por que o Couchbase \u00e9 adequado para o FHIR<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Como mencionado acima, o Couchbase armazena seus dados nativamente em JSON, que \u00e9 um formato de documento leg\u00edvel. Os aplicativos podem usar as APIs de chave-valor ou aproveitar a linguagem de consulta N1QL do Couchbase para manipular os documentos. A vantagem de armazenar os dados no formato JSON, em vez de como um tipo de coluna como em muitos RDBMS, \u00e9 a facilidade com que os usu\u00e1rios podem acessar as informa\u00e7\u00f5es nele contidas. Os elementos do documento JSON, como campo, objeto de matriz e objeto hier\u00e1rquico, podem ser acessados diretamente do objeto pai sem a necessidade de sintaxe adicional. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Aqui est\u00e1 um exemplo do documento do paciente, conforme definido pelo FHIR.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8477\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/Screen-Shot-2020-04-23-at-2.36.19-PM.png\" alt=\"HL7 FHIR protocol patient admin document database\" width=\"687\" height=\"665\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-23-at-2.36.19-PM.png 862w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-23-at-2.36.19-PM-300x290.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-23-at-2.36.19-PM-768x743.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-23-at-2.36.19-PM-20x20.png 20w\" sizes=\"auto, (max-width: 687px) 100vw, 687px\" \/><\/p>\n<p><span style=\"font-weight: 400\">O que isso significa para o aplicativo FHIR \u00e9 que os usu\u00e1rios com experi\u00eancia em RDBMS que t\u00eam um conhecimento b\u00e1sico de SQL podem acessar o paciente FHIR e os recursos associados exatamente da mesma forma que com o RDBMS tradicional.\u00a0<\/span><\/p>\n<h4>Couchbase N1QL para pesquisar dados FHIR<\/h4>\n<h5><strong>Consultar pacientes por ID<\/strong><\/h5>\n<pre class=\"lang:default decode:true\">SELECT *\r\nFROM fhir_admin res\r\nWHERE res.resourceType='Patient'\r\nAND\u00a0 res.id='e3ae7831-14c8-4d13-a8fb-dad68fa12bc9'<\/pre>\n<h5><strong>Consulta de pacientes por faixa et\u00e1ria<\/strong><\/h5>\n<pre class=\"lang:default decode:true\">SELECT\u00a0 agegroup,count(*)\r\nFROM fhir_admin p\r\n\u00a0\u00a0\u00a0LET age=DATE_DIFF_STR(now_str(),p.birthDate,'year'),\r\n\u00a0\u00a0\u00a0\u00a0agegroup = CASE WHEN age &lt;= 4 THEN 'A - 0-4'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WHEN age &lt;= 17 THEN 'B - 5-17'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WHEN age &lt;= 49 THEN 'C - 18-49'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WHEN age &lt;= 64 THEN 'D - 50-64'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ELSE 'E - &gt; 65' END\u00a0\r\nWHERE p.resourceType='Patient'\r\nGROUP BY agegroup<\/pre>\n<ol>\n<li>A idade do paciente deve ser calculada a partir da data atual - DOB.<\/li>\n<li>A consulta usa a constru\u00e7\u00e3o N1QL LET para definir \"age\" (idade) e agrupar a idade em \"agegroup\" (grupo de idade).<\/li>\n<li>Um ANSI GROUP BY e COUNT padr\u00e3o retorna o n\u00famero de pacientes por faixa et\u00e1ria.<\/li>\n<\/ol>\n<p>Al\u00e9m disso, a capacidade de unir e unir documentos com o Couchbase N1QL permite que os usu\u00e1rios consultem informa\u00e7\u00f5es relacionadas ao paciente.<\/p>\n<h5><strong>Consultar pacientes e suas condi\u00e7\u00f5es atuais n\u00e3o resolvidas\u00a0<\/strong><\/h5>\n<pre class=\"lang:default decode:true\">SELECT ARRAY v FOR v IN p.name WHEN v.`use`='official' END fullname ,\r\n       cc.display\r\nFROM fhir_admin c\r\nINNER JOIN fhir_admin p USE HASH(BUILD) ON split(c.subject.reference,':')[2] = p.id AND p.resourceType='Patient'\r\nUNNEST c.code.coding as cc\r\nWHERE c.resourceType='Condition'\r\nAND EVERY s in c.clinicalStatus.coding SATISFIES s.code != 'resolved' END\r\n<\/pre>\n<ol>\n<li>Um paciente pode ter v\u00e1rios nomes, que s\u00e3o representados na matriz \"name\". Essa consulta usa o operador ARRAY para filtrar apenas o elemento oficial da matriz 'name'.<\/li>\n<li>A consulta associa a \"condi\u00e7\u00e3o\" ao objeto \"paciente\" usando parte do campo \"subject.reference\" do objeto \"condi\u00e7\u00e3o\" ao \"patient.id\".<\/li>\n<li>Cada \"paciente\" pode ter v\u00e1rias condi\u00e7\u00f5es, por isso a necessidade de achatar (UNNEST) a matriz \"condition-&gt;code\".<\/li>\n<li>Pode haver v\u00e1rios \"clinical.status\" para a \"condi\u00e7\u00e3o\", mas a consulta s\u00f3 precisa retornar as condi\u00e7\u00f5es que n\u00e3o foram resolvidas<\/li>\n<\/ol>\n<h5><strong>Lista de todos os pacientes que estiveram no hospital de Beverley na semana iniciada em 2011-08-18<\/strong><\/h5>\n<pre class=\"lang:default decode:true\">SELECT ARRAY v FOR v IN p.name WHEN v.`use`='official' END fullname ,\r\n       p.telecom phonecontact,\r\n       p.address, \r\n       p.communication,\r\n       p.identifier\r\nFROM fhir_admin m\r\n INNER JOIN fhir_admin p ON split(m.subject.reference,':')[2] = p.id AND p.resourceType='Patient' \r\nWHERE m.resourceType='Encounter'\r\nAND DATE_FORMAT_STR(m.period.`start`, '1111-11-11') BETWEEN '2011-08-18' AND '2011-08-25'\r\nAND m.serviceProvider.display = 'BEVERLY HOSPITAL CORPORATION' \r\n<\/pre>\n<ol>\n<li>A consulta examina o objeto \"encounter\" para descobrir todos os tratamentos do \"paciente\" nesse hospital espec\u00edfico.<\/li>\n<li>O operador ARRAY \u00e9 usado para obter o nome oficial do \"paciente\".<\/li>\n<\/ol>\n<h5><strong>Lista de pacientes com detalhes de seus pedidos de indeniza\u00e7\u00e3o de seguro - servi\u00e7os e custos<\/strong><\/h5>\n<pre class=\"lang:default decode:true\">SELECT  c.patient.reference, cis.display,SUM( c.total.`value`)\r\nFROM fhir_admin c\r\n INNER JOIN fhir_admin p ON split(c.patient.reference,':')[2] = p.id AND p.resourceType='Patient' \r\n UNNEST c.item as ci\r\n UNNEST ci.productOrService.coding as cis\r\nWHERE c.resourceType='Claim'\r\nGROUP by cis.display,c.patient.reference\r\n<\/pre>\n<ol>\n<li>O objeto \"claim\" \u00e9 JOINED ao objeto \"patient\" para acessar os detalhes do paciente.<\/li>\n<li>O objeto \"claim\" tem uma matriz aninhada para \"claim-&gt;item\".<\/li>\n<li>O \"claim-&gt;item\" est\u00e1 associado a um \"productOrService\" com uma codifica\u00e7\u00e3o de matriz que cont\u00e9m a descri\u00e7\u00e3o do tratamento.<\/li>\n<li>O custo est\u00e1 no n\u00edvel da reivindica\u00e7\u00e3o.<\/li>\n<\/ol>\n<h5><strong>Classificar a contagem de procedimentos por hospital<\/strong><\/h5>\n<pre class=\"lang:default decode:true\">SELECT e.serviceProvider.display hospital,\r\n       p.code.text treatment,\r\n       RANK() OVER ( PARTITION BY e.serviceProvider.display ORDER BY COUNT(p.code.text) DESC ) serviceRank\r\nFROM fhir_admin p\r\n  INNER JOIN fhir_admin e USE HASH(PROBE) ON split(p.encounter.reference,':')[2] = e.id and e.resourceType='Encounter'\r\nWHERE p.resourceType='Procedure'\r\nGROUP by e.serviceProvider.display,p.code.text<\/pre>\n<ol>\n<li>O objeto \"procedure\" \u00e9 JUNTADO ao objeto \"encounter\" para acessar o hospital onde o procedimento foi administrado.<\/li>\n<li>A fun\u00e7\u00e3o N1QL Window RANK \u00e9 usada para atribuir um valor pela contagem do procedimento.<\/li>\n<li>A dica Hash Join \u00e9 usada para melhorar o desempenho do documento JOIN.<\/li>\n<\/ol>\n<h3>Resumo<\/h3>\n<p>O Couchbase \u00e9 adequado para a implementa\u00e7\u00e3o da FHIR devido \u00e0 abordagem que usa para armazenar os dados no formato JSON. Sua avan\u00e7ada linguagem de consulta N1QL permite que os desenvolvedores com experi\u00eancia em SQL naveguem no modelo de dados FHIR para realizar todas as opera\u00e7\u00f5es CRUD que os usu\u00e1rios esperam ver em um banco de dados.<\/p>\n<p>Com sua capacidade de realizar JOIN de documentos para o processamento avan\u00e7ado de objetos de matriz incorporados, a linguagem de consulta N1QL relega todas as necessidades de processamento para o Couchbase Query and Indexing Service, reduzindo assim a carga dos aplicativos FHIR que precisam realizar todas as associa\u00e7\u00f5es de objetos.<\/p>\n<p>Como acontece com qualquer aplicativo novo, sempre haver\u00e1 a necessidade de realizar exames diretos dos dados subjacentes, seja pelos administradores do aplicativo ou pelos analistas de dados que podem precisar realizar pesquisas al\u00e9m dos recursos b\u00e1sicos de pesquisa do FHIR.<\/p>\n<p>No pr\u00f3ximo blog, examinarei o que \u00e9 necess\u00e1rio para usar o REST em uma abordagem de API FHIR que possa se comunicar com o servidor Couchbase para fornecer os recursos b\u00e1sicos de <a href=\"https:\/\/www.hl7.org\/fhir\/search.html\">Requisitos de pesquisa FHIR.<\/a><\/p>\n<h3>Recursos<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.hl7.org\/fhir\/index.html\">Recurso r\u00e1pido de interoperabilidade na \u00e1rea de sa\u00fade<\/a><\/li>\n<li><a href=\"https:\/\/doi.org\/10.1093\/jamia\/ocx079\">SyntheticMass<\/a>: \"Jason Walonoski, Mark Kramer, Joseph Nichols, Andre Quina, Chris Moesel, Dylan Hall, Carlton Duffett, Kudakwashe Dube, Thomas Gallagher, Scott McLachlan, Synthea: Uma abordagem, um m\u00e9todo e um mecanismo de software para gerar pacientes sint\u00e9ticos e o registro eletr\u00f4nico de sa\u00fade sint\u00e9tico,\u00a0<em>Jornal da Associa\u00e7\u00e3o Americana de Inform\u00e1tica M\u00e9dica<\/em>, Volume 25, Edi\u00e7\u00e3o 3, Mar\u00e7o de 2018, P\u00e1ginas 230-238, https:\/\/doi.org\/10.1093\/jamia\/ocx079\u2033<\/li>\n<li><a href=\"https:\/\/query-tutorial.couchbase.com\/tutorial\/#1\">Tutorial N1QL<\/a><\/li>\n<li><a href=\"https:\/\/www.hl7.org\/fhir\/searchparameter-registry.html\">Par\u00e2metros de pesquisa FHIR<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Couchbase is a JSON database that has now become an alternative to the traditional RDBMS. It has achieved this, not only by providing the industry-leading Key-Value store and the same query and ACID translation capabilities that organizations have come to [&hellip;]<\/p>","protected":false},"author":26326,"featured_media":11046,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1819,2165,1812],"tags":[1447,4959,1261,1725],"ppma_author":[8919],"class_list":["post-8475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-modeling","category-full-text-search","category-n1ql-query","tag-data-modeling","tag-fhir","tag-json","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>FHIR Data Model + Relational Schema with Couchbase N1QL<\/title>\n<meta name=\"description\" content=\"This post focuses on the FHIR specification as defined by HL7 FHIR. Learn how the Couchbase database can be used to implement FHIR compliant applications.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/fhir-data-model-with-couchbase-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FHIR Data Model with Couchbase N1QL\" \/>\n<meta property=\"og:description\" content=\"This post focuses on the FHIR specification as defined by HL7 FHIR. Learn how the Couchbase database can be used to implement FHIR compliant applications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/fhir-data-model-with-couchbase-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-26T04:40:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:42:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"871\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Binh Le\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Binh Le\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/\"},\"author\":{\"name\":\"Binh Le\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\"},\"headline\":\"FHIR Data Model with Couchbase N1QL\",\"datePublished\":\"2020-04-26T04:40:43+00:00\",\"dateModified\":\"2025-06-14T06:42:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/\"},\"wordCount\":1476,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png\",\"keywords\":[\"Data Modeling\",\"FHIR\",\"JSON\",\"NoSQL Database\"],\"articleSection\":[\"Data Modeling\",\"Full-Text Search\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/\",\"name\":\"FHIR Data Model + Relational Schema with Couchbase N1QL\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png\",\"datePublished\":\"2020-04-26T04:40:43+00:00\",\"dateModified\":\"2025-06-14T06:42:42+00:00\",\"description\":\"This post focuses on the FHIR specification as defined by HL7 FHIR. Learn how the Couchbase database can be used to implement FHIR compliant applications.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png\",\"width\":1200,\"height\":871,\"caption\":\"Fast Healthcare Interoperability Resources (FHIR) data model and API discussion\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FHIR Data Model with Couchbase N1QL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\",\"name\":\"Binh Le\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"caption\":\"Binh Le\"},\"description\":\"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/binh-le-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"FHIR Data Model + Relational Schema with Couchbase N1QL","description":"Esta postagem se concentra na especifica\u00e7\u00e3o FHIR, conforme definida pela HL7 FHIR. Saiba como o banco de dados Couchbase pode ser usado para implementar aplicativos compat\u00edveis com FHIR.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/fhir-data-model-with-couchbase-n1ql\/","og_locale":"pt_BR","og_type":"article","og_title":"FHIR Data Model with Couchbase N1QL","og_description":"This post focuses on the FHIR specification as defined by HL7 FHIR. Learn how the Couchbase database can be used to implement FHIR compliant applications.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/fhir-data-model-with-couchbase-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-04-26T04:40:43+00:00","article_modified_time":"2025-06-14T06:42:42+00:00","og_image":[{"width":1200,"height":871,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png","type":"image\/png"}],"author":"Binh Le","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Binh Le","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/"},"author":{"name":"Binh Le","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63"},"headline":"FHIR Data Model with Couchbase N1QL","datePublished":"2020-04-26T04:40:43+00:00","dateModified":"2025-06-14T06:42:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/"},"wordCount":1476,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png","keywords":["Data Modeling","FHIR","JSON","NoSQL Database"],"articleSection":["Data Modeling","Full-Text Search","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/","name":"FHIR Data Model + Relational Schema with Couchbase N1QL","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png","datePublished":"2020-04-26T04:40:43+00:00","dateModified":"2025-06-14T06:42:42+00:00","description":"Esta postagem se concentra na especifica\u00e7\u00e3o FHIR, conforme definida pela HL7 FHIR. Saiba como o banco de dados Couchbase pode ser usado para implementar aplicativos compat\u00edveis com FHIR.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/Screen-Shot-2020-04-07-at-4.30.12-PM-1.png","width":1200,"height":871,"caption":"Fast Healthcare Interoperability Resources (FHIR) data model and API discussion"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/fhir-data-model-with-couchbase-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"FHIR Data Model with Couchbase N1QL"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63","name":"Binh Le","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7","url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","caption":"Binh Le"},"description":"Binh Le \u00e9 gerente de produto principal do servi\u00e7o Couchbase Query. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Cloud Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/binh-le-2\/"}]}},"authors":[{"term_id":8919,"user_id":26326,"is_guest":0,"slug":"binh-le-2","display_name":"Binh Le","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","author_category":"","last_name":"Le","first_name":"Binh","job_title":"","user_url":"","description":"Binh Le \u00e9 gerente de produto principal do servi\u00e7o de consulta do Couchbase. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Clould Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=8475"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8475\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/11046"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=8475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=8475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=8475"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=8475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}