{"id":36624151,"url":"https://github.com/kyriosdata/adapter","last_synced_at":"2026-01-12T09:29:58.348Z","repository":{"id":57720883,"uuid":"72859570","full_name":"kyriosdata/adapter","owner":"kyriosdata","description":"Adaptador do MR (openEHR) para Seed","archived":false,"fork":false,"pushed_at":"2020-10-13T09:26:54.000Z","size":482,"stargazers_count":2,"open_issues_count":4,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-04T08:12:03.315Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kyriosdata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-11-04T15:20:58.000Z","updated_at":"2022-08-28T20:24:03.000Z","dependencies_parsed_at":"2022-08-25T15:51:11.253Z","dependency_job_id":null,"html_url":"https://github.com/kyriosdata/adapter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kyriosdata/adapter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fadapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fadapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fadapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fadapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kyriosdata","download_url":"https://codeload.github.com/kyriosdata/adapter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fadapter/sbom","scorecard":{"id":575681,"data":{"date":"2025-08-11","repo":{"name":"github.com/kyriosdata/adapter","commit":"b2cf6566d56de79b06df406eef05bd39c4bf22e3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-j288-q9x7-2f5v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T17:38:41.307Z","repository_id":57720883,"created_at":"2025-08-20T17:38:41.307Z","updated_at":"2025-08-20T17:38:41.307Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337723,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-12T09:29:58.289Z","updated_at":"2026-01-12T09:29:58.342Z","avatar_url":"https://github.com/kyriosdata.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# adapter\nAdaptador do Modelo de Referência (MR) do openEHR para Seed.\n\n[\u003cimg src=\"https://api.travis-ci.org/kyriosdata/adapter.svg?branch=master\"\u003e](https://travis-ci.org/kyriosdata/adapter)\n[![Sonarqube](https://sonarqube.com/api/badges/gate?key=com.github.kyriosdata.adapter%3Aoe-seed)](https://sonarqube.com/dashboard/index?id=com.github.kyriosdata.adapter%3Aoe-seed)\n[![Javadocs](http://javadoc.io/badge/com.github.kyriosdata.adapter/oe-seed.svg)](http://javadoc.io/doc/com.github.kyriosdata.adapter/oe-seed)\n\n[![](https://codescene.io/projects/1635/status.svg) Get more details at **codescene.io**.](https://codescene.io/projects/1635/jobs/latest-successful/results)\n\n\u003cbr /\u003e\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/\"\u003e\n\u003cimg alt=\"Creative Commons License\" style=\"border-width:0\"\n src=\"https://i.creativecommons.org/l/by/4.0/88x31.png\" /\u003e\u003c/a\u003e\n \u003cbr /\u003eThis work is licensed under a \u003ca rel=\"license\" \n href=\"http://creativecommons.org/licenses/by/4.0/\"\u003eCreative Commons \n Attribution 4.0 International License\u003c/a\u003e. \n \u003cbr /\u003eFábio Nogueira de Lucena - Fábrica de Software - \n Instituto de Informática (UFG).\n\n## Caso de uso\nO Modelo de Referência (MR) do openEHR é um conjunto de classes que \ndefine os blocos básicos para empacotamento de informações em saúde.\nQuando essas informações precisam ser transferidas ou mesmo persitidas,\nexistem várias possibilidades.  \n\n## Como usar (via maven)?\n\nAcrescente a dependência no arquivo pom.xml:\n\n\u003cpre\u003e\n\u0026lt;dependency\u0026gt;\n  \u0026lt;groupId\u0026gt;com.github.kyriosdata.adapter\u0026lt;/groupId\u0026gt;\n  \u0026lt;artifactId\u0026gt;oe-seed\u0026lt;/artifactId\u0026gt;\n  \u0026lt;version\u0026gt;1.0.0\u0026lt;/version\u0026gt;\n\u0026lt;/dependency\u0026gt;\n\u003c/pre\u003e\n\n### Documentação\n\n#### Tipos (dos campos)\nOs tipos contemplados seguem abaixo, identificados pelo correspondente tipo em Java.\n\n- Os tipos inteiros: BYTE (byte), SHORT (16 bits), INT (int) (32 bits), INT64 (long) (64 bits).\n- Os tipos em ponto flutuante: REAL (float) (32 bits), DOUBLE (double) (64 bits).\n- O tipo lógico: BOOLEAN (boolean).\n- O tipo que representa um caractere: CHAR (char).\n- O tipo sequência de caracteres: STRING (String).\n- O tipo vetor de bytes: VECTOR (byte[]).\n- O tipo intervalo: INTERVAL_INT, INTERVAL_INT64, INTERVAL_REAL, INTERVAL_DOUBLE. Cada um desses tipos é formado por quatro valores. Dois para os limites do intervalo, _lower_ e _upper_, e outros dois lógicos, _lowerIncluded_ e _upperIncluded_. Os tipos dos limites do intervalo são definidos pelo tipo do intervalo, por exemplo, INTERVAL_INT faz uso de dois inteiros, enquanto INTERVAL_DOUBLE faz uso de dois valores do tipo ponto-flutuante de precisão dupla.\n- O tipo lista: LIST (List). Uma lista é uma coleção de itens, não necessariamente únicos, mas em uma ordem. \n- O tipo conjunto: SET (Set). É uma coleção de itens únicos, não podem existir repetições, não há ordem entre eles.\n- O tipo dicionário: HASH (Hash). É um dicionário ou mapa, ou seja, uma coleção de valores, cada um deles disponível e associado a uma dada chave.\n\n#### Tamanho de um registro\nUm registro é uma combinação de campos. O tamanho de um registro, portanto, depende da quantidade de bytes necessária para armazenar cada um dos campos do registro. Se um registro é formado exclusivamente por campos de tamanho fixo, então o registro possui tamanho fixo. \nCaso contrário, o tamanho do registro varia. Ou seja,\nno pode ser definido antecipadamente e, é único por registro. Por exemplo, o formato\nde registro definido por uma única STRING que deve registrar um logradouro pode ter o tamanho 30 em um exemplo e 50 em outro. Se inclui uma lista, pode ter 0 elementos em um caso e 20 em outro.  \n\n#### Representação (serialização) de um registro\nUm registro é formado por um _header_ seguido dos dados correspondentes aos \ntipos dos campos do registro, conforme ilustrado abaixo.\n\n```\n+-----------------+\n|      RECORD     |\n+-----------------+\n| Header | Fields |\n+-----------------+\n``` \n\n##### Representação dos dados de um registro\nAbaixo segue a ilustração de um registro, sem o detalhamento do _header_. Esse registro reúne um campo inteiro e duas sequências de caracteres. Ou seja, os campos são dos tipos INT, STRING e STRING. O valor do INT é 23 (faz uso de 4 bytes); a primeira STRING apenas\n4 bytes (\"nome\") e a segunda STRING ocupa outros 7 bytes (\"contato\"). A primeira linha contendo números abaixo indica os \ndeslocamentos do início de cada campo com base na posição inicial (0). Ou seja, o inteiro faz \nuso dos bytes de 0 a 3 (inclusive), o \"nome\" ocupa os quatro bytes seguintes de 4 a 7 (inclusive) e, \npor último, \"contato\" faz uso dos bytes de 8 a 14 (inclusive). O décimo quinto byte está além do registro. \nNesse arranjo observe que o tipo de tamanho fixo (INT) segue antes dos demais, ou seja, aquele de tamanho fixo segue antes daqueles de tamanho variável.\n\n```\n+------------------------------+\n| HEADER |       FIELDS        |\n+------------------------------+\n---------|0---|4-----|8--------|15\n+------------------------------+\n| HEADER | 23 | nome | contato |\n+------------------------------+\n```\n\n##### Representação do header de um registro\nO _header_ obrigatoriamente identifica, em seu primeiro byte, o tipo do registro. Observe que não é o formato propriamente dito, mas um identificador que permite localizar o formato empregado pelo registro. Dado que um único byte é empregado, tem-se um limite natural para os possíveis formatos (tipos) de registros. \n\nEm geral o tipo de um registro inclui campos de tamanho variável. Nesses caso, o _header_ deve \nconter várias informações:\n- *Tipo*, que identifica unicamente o formato do registro.\n- *Tamanho do registro*. Permite rapidamente \"saltar\" para o próximo registro. Observe que esse valor pode\nser \"recuperado\" a partir do percurso do conteúdo do registro. \n- *Apontadores*. Após campos de tamanho fixo, que não dependem de apontadores, segue o primeiro campo de tamanho variável que também não depende de apontador. Contudo, após o primeiro campo de tamanho variável, todos os demais dependem de \"saltar\" sobre o conteúdo dos dados para serem localizados ou de apontadores, que não dependem desse percurso. Imagine por exemplo uma STRING. Segundo o tipo de registro ilustrado anteriormente, para o acesso à segunda STRING estão disponíveis duas estratégias: (a) localiza-se o término da STRING anterior (sabe-se que a seguinte é iniciada no byte seguinte) e (b) um apontador no _header_ pode indicar diretamente o início da segunda STRING.\n\nAbaixo é ilustrada a composição do _header_, conforme comentada acima, onde o tipo de um byte precede o tamanho do registro, 4 bytes, que são seguidos, possivelmente, de apontadores, cada um deles de 4 bytes. Observe que abaixo o valor A identifica o total de apontadores.\n```\n+-----------------------------------+\n|             HEADER                |\n+-----------------------------------|\n|0-----|1--------|5-----------------| 4*A + 5\n+-----------------------------------+\n| Tipo | Tamanho |   Apontadores    |\n+-----------------------------------+\n```\n\n\nAbaixo segue ilustração do registro exemplo apresentado anteriormente, agora acrescida do _header_. Suponha que o tipo de valor 54\nidentifica unicamente o formato desse registro, ou seja, a sequência formada por um INT, uma STRING e outra STRING.\n\n```\n+-----------------------------------+\n|   HEADER    |      FIELDS         |\n+-----------------------------------+\n--------------|0---|4-----|8--------|15\n+-----------------------------------+\n| 54 | 15 | 8 | 23 | nome | contato |\n+-----------------------------------+\n```\n\nInterpretação de cada um dos valores acima:\n- Primeiro segue o tipo do registro, valor 54 (suposição estabelecida acima). \n- O tipo é seguido do tamanho do registro, 15 bytes de dados. Esse tamanho não é o\ntamanho total do registro, pois não inclui os bytes empregados pelo _header_, mas apenas aqueles que dizem respeito aos dados propriamente ditos (ou _payload_).\n- O último valor do _header_ é 8, a posição inicial do campo \"contato\". Observe que ao\nmanter os campos de tamanho fixo no início, em ordem bem definida, não é necessário\nindicar a posição deles, nem do primeiro de tamanho variável, nesse caso \"nome\". Ou seja,\npara um registro do tipo 54 é suficiente armazenar a posição de início do último campo,\nposição 8.\n\n\u003e Decisões\n\u003e * Campos de tamanho fixo precedem todos os campos de tamanho variável.\n\u003e * Valor de posição no header é relativa à posição inicial (0) dos dados, imediatamente após o _header_.\n\nO registro representado na ilustração acima fornece o comportamento geral. \nContudo, há situações especiais que demandam alteração na representação tanto\ndo _header_ quanto do dados. Contudo, isso é melhor compreendido após a introdução\nde outras questões: (a) blocos e (b) fragmentação de registros.  \n\n#### Blocos (elemento de divisão de um arquivo)\nUma base de dados é armazenada em um arquivo didivido em blocos de tamanho fixo. O tamanho padrão é 4KB. O acesso ao conteúdo da base de dados significa que esses blocos precisam ser transferidos para a memória RAM. No sentido inverso, atualizações precisam ser depositadas no bloco correspondente no arquivo em questão.\n\n#### Fragmentação de registro\nDado que apenas parte da informação de uma base de dados se encontra em RAM, ou seja, apenas alguns blocos, e que um bloco possui tamanho fixo, enquanto os registros não, é natural que a divisão em blocos \"fragmente\" um registro no sentido em que parte das informações podem estar no final de um bloco e as demais a partir do bloco seguinte. De fato, um registro pode estar \"espalhado\" por vários blocos. Em particular, um único campo pode estar espalhado por vários blocos. \n\n\u003e Decisão\n\u003e * Dados de um registro podem estar espalhados por vários blocos consecutivos (contíguos).\n\nAbaixo é ilustrado o cenário onde o registro está disposto em dois blocos, sem perda de generalidade, assuma que são os \nblocos 6 e 7. Nessa ilustração, a STRING \"contato\" é\ndividida em \"cont\" (bloco 6) e \"ato\" (bloco 7). \n\n```\n------------ Bloco 6 -----------||----------- Bloco 7 ------------\n--------------|0---|4-----|8----||----|15\n+-------------------------------------+\n| 54 | 15 | 8 | 23 | nome | cont||ato |\n+-------------------------------------+\n```\n\nA estratégia acima tem como ponto positivo maximizar o uso de cada byte de um bloco, onde cada byte é utilizado.\nPor outro lado, deve-se definir como tratar campos \"partidos\" pela divisão dos dados em blocos. Para o registro de exemplo,\napenas o tipo do registro (um único byte), necessariamente está em um único bloco. Para os demais valores, deve-se definir como identificar os \"fragmentos\" de um campo e montá-lo a partir de tais fragmentos. Noutras palavras, qualquer byte do 1 até o 24 pode ser a diviso de um bloco do seguinte.\n\n```\n+----|1 ----------------------------|24\n| 54 | 15 | 8 | 23 | nome | contato |\n+-----------------------------------+\n```\n\n\n#### Endereços\nUm apontador indica o início de um campo relativo ao início dos dados do registro em questão. \nOu seja, esse endereço não é o endereço do byte correspondente no arquivo onde é armazenado, também não coincide com o deslocamento referente ao bloco no qual se encontra. \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyriosdata%2Fadapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkyriosdata%2Fadapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyriosdata%2Fadapter/lists"}