{"id":42649218,"url":"https://github.com/eurekaclinical/protempa","last_synced_at":"2026-01-29T07:19:01.705Z","repository":{"id":2127211,"uuid":"45768085","full_name":"eurekaclinical/protempa","owner":"eurekaclinical","description":"A framework for specifying and identifying temporal sequences in retrospective data for patient selection","archived":false,"fork":false,"pushed_at":"2023-09-12T13:53:47.000Z","size":34080,"stargazers_count":2,"open_issues_count":20,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-14T04:55:27.381Z","etag":null,"topics":["framework"],"latest_commit_sha":null,"homepage":"http://eurekaclinical.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eurekaclinical.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-11-08T05:18:53.000Z","updated_at":"2022-06-13T08:51:00.000Z","dependencies_parsed_at":"2022-08-24T07:21:01.333Z","dependency_job_id":"a341bc85-e5a6-4526-9341-69d8b25aefe4","html_url":"https://github.com/eurekaclinical/protempa","commit_stats":null,"previous_names":[],"tags_count":93,"template":false,"template_full_name":null,"purl":"pkg:github/eurekaclinical/protempa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eurekaclinical%2Fprotempa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eurekaclinical%2Fprotempa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eurekaclinical%2Fprotempa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eurekaclinical%2Fprotempa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eurekaclinical","download_url":"https://codeload.github.com/eurekaclinical/protempa/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eurekaclinical%2Fprotempa/sbom","scorecard":{"id":385080,"data":{"date":"2025-08-11","repo":{"name":"github.com/eurekaclinical/protempa","commit":"1152ac6d714d6b452d47e555b0a661fe67cbb1b6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/15 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":"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":"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":"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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"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-18T16:24:09.332Z","repository_id":2127211,"created_at":"2025-08-18T16:24:09.332Z","updated_at":"2025-08-18T16:24:09.332Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28869121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T06:56:44.678Z","status":"ssl_error","status_checked_at":"2026-01-29T06:56:35.794Z","response_time":59,"last_error":"SSL_read: 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":["framework"],"created_at":"2026-01-29T07:19:00.710Z","updated_at":"2026-01-29T07:19:01.690Z","avatar_url":"https://github.com/eurekaclinical.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Protempa\n[Department of Biomedical Informatics](http://bmi.emory.edu), [Emory University](http://www.emory.edu), Atlanta, GA\n\n## What does it do?\nProtempa identifies temporal sequences in clinical data. It supports retrieving patient populations containing sequences of interest from clinical datasets and databases in support of clinical research, outcomes studies and quality improvement. It provides for portability across data sources, and the creation of libraries of temporal sequence definitions and time series data processing algorithms.\n\n### Protempa architecture\nProtempa is a software framework with a modular architecture. It has four modules, shown in the diagram below, that provide for 1)  defining time series data processing algorithms such as for finding states and trends (the *Algorithm Source*), 2) specifying frequency, sequence and overlap temporal patterns of interest (the *Knowledge Source*), 3) a connection to an existing data store (the *Data Source*), and 4) a data processing environment for managing the sequence-finding routines (the *Abstraction Finder*). The first three modules have back ends that implement environment- or application-specific features. Additinally, the framework provides a fifth module, not shown, the *Destination*, which processes the data and temporal sequences that are retrieved and identified.  Destinations can be plugged into Protempa that process its output in various ways.\n\n![Protempa architecture](https://github.com/eurekaclinical/dev-wiki/blob/master/images/Protempa%20architecture.png)\n\n### Methods\nProtempa implements an extension of the [knowledge based temporal abstraction method](https://pdfs.semanticscholar.org/034c/09d382143cc392071ff2d47d2e95438d0bb4.pdf), which is a data summarization method in which an ontology is used to describe interpretations of the data of interest, with an emphasis on interpretations of time intervals containing frequency, sequence and overlap temporal patterns in the data. For portability across data sets, the descriptions use standard terminologies to describe the source data. The temporal abstraction process translates the ontology's descriptions into business rules that translate source data into a standard data model, compute the temporal patterns described in the ontology, and output the standardized data plus intervals representing the temporal patterns that were found. The diagram below depicts a collection of clinical observations and events, and time intervals representing a summary of its contents.\n\n![Temporal abstraction example](https://github.com/eurekaclinical/dev-wiki/blob/master/images/BP%20figure.png)\n\nIn the clinical domain, temporal abstraction can be used for automated chart abstraction for large volumes of patient records (tens of millions), assuming that the the temporal patterns of interest can be described ahead of time in an ontology or as rules.\n\n### For more information\nSee our [publication about Protempa](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1975802/) for more information.\n\nLatest release: [![Latest release](https://maven-badges.herokuapp.com/maven-central/org.eurekaclinical/protempa/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.eurekaclinical/protempa)\n\n## Version 5.1\n* Support reading data from an Oracle 12c database.\n\n## Version 5.0\n* Removed all TermSource and related code.\n* Update datastore version.\n* Remove cache store code.\n* Remove non-streaming relational data source backend support.\n* Remove staging relational data source backend support.\n* Remove CLI code.\n* Remove Java Bean property support.\n* Propositions are now inserted into the Drools working memory using the\ninsertLogical method rather than plain insert so that the rules engine will\ndynamically retract propositions correctly.\n* New query option to save data abstractions as they are computed in a key-\nvalue store by key. Sending changed data through Protempa will update the\nabstractions based upon the updated data.\n* New query modes: REPROCESS_CREATE, REPROCESS_DELETE, REPROCESS_UPDATE, and\nREPROCESS_RETRIEVE. These are basic CRUD operations for modifying the key-value \nstore and retrieving data and abstractions from it.\n* Don't return Unknown when formatting a null start or finish. Return null\ninstead.\n\n## Version 4.3.2\n* Actually write nominal column headers for tabular writers.\n\n## Version 4.3.1\n* Write = not EQUAL_TO for the operator for lab values that do not start with\nan inequality.\n* Actually write number and inequality column headers for tabular writers.\n\n## Version 4.3\n* Fix output of inequality number values in tabular writers.\n* Support output of just numbers, just nominals, and just the inequality part of\ninequality number values.\n\n## Version 4.2.1\n* Honor start and finish formatters that are specified for tabular writers.\n\n## Version 4.2\n* Allow writing the LocalUniqueId numericalId field to tabular files.\n\n## Version 4.1\n* Allow writing the LocalUniqueId id to tabular files.\n* Allow always putting quotes around each value in a tabular file.\n\n## Version 4.0.1\n* Avoid NullPointerExceptions when writing nulls to a delimited file.\n\n## Version 4.0\n* Support OJDBC driver version 12.\n* Update datastore dependency to version 2.\n* Update javautil dependency to version 4.\n* Clean up the NOTICE file generation.\n* Remove the old site directory.\n* Parallelize initialization and data processing.\n* Optimization.\n* More...\n\n## Build requirements\n* [Oracle Java JDK 8](http://www.oracle.com/technetwork/java/javase/overview/index.html)\n* [Maven 3.2.5 or greater](https://maven.apache.org)\n\n## Runtime requirements\n* [Oracle Java JRE 8](http://www.oracle.com/technetwork/java/javase/overview/index.html)\n\n## Building it\nThe project uses the maven build tool. Typically, you build it by invoking `mvn clean install` at the command line. For simple file changes, not additions or deletions, you can usually use `mvn install`. See https://github.com/eurekaclinical/dev-wiki/wiki/Building-Eureka!-Clinical-projects for more details.\n\n## Maven dependency\nProtempa consists of a number of modules:\n\n### Protempa Framework\nCore framework, is always required.\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eurekaclinical\u003c/groupId\u003e\n    \u003cartifactId\u003eprotempa-framework\u003c/artifactId\u003e\n    \u003cversion\u003eversion\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Protempa ServiceLoader Backend Configurations Provider\nProvides registering a configuration mechanism for data source, knowledge source, and algorithm source backends using the `java.util.ServiceLoader` mechanism.\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eurekaclinical\u003c/groupId\u003e\n    \u003cartifactId\u003eprotempa-bcp-serviceloader\u003c/artifactId\u003e\n    \u003cversion\u003eversion\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Protempa ServiceLoader Backend Provider\nProvides registering data source, knowledge source, and algorithm source backends within Protempa using the `java.util.ServiceLoader` mechanism.\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eurekaclinical\u003c/groupId\u003e\n    \u003cartifactId\u003eprotempa-bp-serviceloader\u003c/artifactId\u003e\n    \u003cversion\u003eversion\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Protempa Relational Database Data Source Backend\nProvides base classes and interfaces for creating data source backends that load data into Protempa from a relational database. Depends on the Protempa ServiceLoader Backend Provider.\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eurekaclinical\u003c/groupId\u003e\n    \u003cartifactId\u003eprotempa-dsb-relationaldb\u003c/artifactId\u003e\n    \u003cversion\u003eversion\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Protempa File Data Source Backend\nProvides base classes and interfaces for creating data source backends that load data into Protempa from files. Depends on the Protempa ServiceLoader Backend Provider.\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eurekaclinical\u003c/groupId\u003e\n    \u003cartifactId\u003eprotempa-dsb-file\u003c/artifactId\u003e\n    \u003cversion\u003eversion\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Protempa Ini4j INI Backend Configurations\nProvides configuring data source, algorithm source and knowledge source backends in INI files. Depends on the Protempa ServiceLoader Backend Configurations Provider. \n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eurekaclinical\u003c/groupId\u003e\n    \u003cartifactId\u003eprotempa-bconfigs-ini4j-ini\u003c/artifactId\u003e\n    \u003cversion\u003eversion\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nProtempa includes a test suite module, Protempa Test Suite, that is invoked automatically when Protempa builds. Several other deprecated modules are provided in the source code and are not described here.\n\n## Example\n\nTo run Protempa, write code like the following:\n\n```\nimport org.protempa.SourceFactory;\nimport org.protempa.backend.Configurations;\nimport org.protempa.bconfigs.ini4j.INIConfigurations;\nimport org.protempa.Protempa;\nimport org.protempa.dest.Destination;\nimport org.protempa.dest.map.MapDestination;\nimport org.protempa.query.DefaultQueryBuilder;\nimport org.protempa.query.Query;\n\n// An implementation of org.protempa.backend.Configurations provides the backends to use.\nConfigurations backends = new INIConfigurations(new File(\"src/test/resources\"));\nSourceFactory sourceFactory = new SourceFactory(backends.load(\"protempa-config.ini\"));\n\n// Use try-with-resources to ensure resources are cleaned up.\ntry (Protempa protempa = Protempa.newInstance(sourceFactory)) {\n    DefaultQueryBuilder q = new DefaultQueryBuilder();\n    q.setName(\"My test query\");\n    q.setPropositionIds(new String[]{\"ICD9:Diagnoses\", \"ICD9:Procedures\", \"LAB:LabTest\", \"Encounter\", \"MED:medications\", \"VitalSign\",     \n        \"PatientDetails\"}); // an array of the concept ids of the data to retrieve and/or temporal patterns to compute\n    Query query = protempa.buildQuery(q);\n\n    // An implementation of org.protempa.dest.Destination processes output from the temporal abstraction process.\n    Destination dest = new MapDestination(); \n    protempa.execute(query, dest);\n}\n```\n\nThe `protempa-config.ini` file is an INI configuration file that specifies a data source backend, a knowledge source backend, and an algorithm source backend, for example:\n```\n# An implementation of org.protempa.backend.dsb.DataSourceBackend provides the data.\n# Implementations of this interface are plugged into Protempa using the java.util.ServiceLoader mechanism.\n[edu.emory.cci.aiw.cvrg.eureka.etl.dsb.EurekaDataSourceBackend]\ndataSourceBackendId=Spreadsheet # any setters in the implementation that have the @BackendProperty annotation.\ndatabaseName = spreadsheet\nsampleUrl = ../docs/sample.xlsx\n\n# An implementation of org.protempa.backend.dsb.KnowledgeSourceBackend provides the temporal sequence definitions.\n# Implementations of this interface are plugged into Protempa using the java.util.ServiceLoader mechanism.\n[edu.emory.cci.aiw.i2b2etl.ksb.I2b2KnowledgeSourceBackend]\ndatabaseAPI = DATASOURCE # any setters in the implementation that have the @BackendProperty annotation.\ndatabaseId = java:/comp/env/jdbc/I2b2KS\ntargetTable = EUREKAPHENOTYPEONTOLOGY\n\n# An implementation of org.protempa.backend.asb.AlgorithmSourceBackend provides time series processing algorithms.\n# Implementations of this interface are plugged into Protempa using the java.util.ServiceLoader mechanism.\n# In general, use the built-in JavaAlgorithmBackend.\n[org.protempa.backend.asb.java.JavaAlgorithmBackend]\n```\n## Developer documentation\n* `protempa-framework`: [Javadoc for latest development release](http://javadoc.io/doc/org.eurekaclinical/protempa-framework) [![Javadocs](http://javadoc.io/badge/org.eurekaclinical/protempa-framework.svg)](http://javadoc.io/doc/org.eurekaclinical/protempa-framework)\n* `protempa-bcp-serviceloader`: [Javadoc for latest development release](http://javadoc.io/doc/org.eurekaclinical/protempa-bcp-serviceloader) [![Javadocs](http://javadoc.io/badge/org.eurekaclinical/protempa-bcp-serviceloader.svg)](http://javadoc.io/doc/org.eurekaclinical/protempa-bcp-serviceloader)\n* `protempa-bp-serviceloader`: [Javadoc for latest development release](http://javadoc.io/doc/org.eurekaclinical/protempa-bp-serviceloader) [![Javadocs](http://javadoc.io/badge/org.eurekaclinical/protempa-bp-serviceloader.svg)](http://javadoc.io/doc/org.eurekaclinical/protempa-bp-serviceloader)\n* `protempa-dsb-relationaldb`: [Javadoc for latest development release](http://javadoc.io/doc/org.eurekaclinical/protempa-dsb-relationaldb) [![Javadocs](http://javadoc.io/badge/org.eurekaclinical/protempa-dsb-relationaldb.svg)](http://javadoc.io/doc/org.eurekaclinical/protempa-dsb-relationaldb)\n* `protempa-dsb-file`: [Javadoc for latest development release](http://javadoc.io/doc/org.eurekaclinical/protempa-dsb-file) [![Javadocs](http://javadoc.io/badge/org.eurekaclinical/protempa-dsb-file.svg)](http://javadoc.io/doc/org.eurekaclinical/protempa-dsb-file)\n* `protempa-bconfigs-ini4j-ini`: [Javadoc for latest development release](http://javadoc.io/doc/org.eurekaclinical/protempa-bconfigs-ini4j-ini) [![Javadocs](http://javadoc.io/badge/org.eurekaclinical/protempa-bconfigs-ini4j-ini.svg)](http://javadoc.io/doc/org.eurekaclinical/protempa-bconfigs-ini4j-ini)\n\n## Getting help\nFeel free to contact us at help@eurekaclinical.org.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feurekaclinical%2Fprotempa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feurekaclinical%2Fprotempa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feurekaclinical%2Fprotempa/lists"}