From ce0ec3e36820b7859416fe6cf65c78296cfc0847 Mon Sep 17 00:00:00 2001 From: Hicham Date: Tue, 25 Mar 2025 17:17:07 +0100 Subject: [PATCH 1/4] docs: enrich repo files --- CONTRIBUTING.md | 30 ++++++++++ README.md | 129 ++++++++++++++++++++++++++++++------------- public/logo_C360.png | Bin 0 -> 30153 bytes 3 files changed, 120 insertions(+), 39 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 public/logo_C360.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..6efe9205b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,30 @@ +## Contributing to Cohort360 + +As an open source project, **Cohort360** welcomes contributions of many forms: + * Creating an issue for bug report + * Readme improvements + * New feature you would like **Cohort360** to have + +To help make your contribution to this project successful, we do have a few guidelines in place. + +Each PR, no matter how small, should have a GitHub **issue** associated with it. + +Here's a quick checklist for a **good PR**: + +1. A GitHub Issue with a good description associated with the PR +2. One feature/change per PR +3. We use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/#summary) for more readability. This helps generate a well + organized changelog file +4. One commit per PR. If necessary, squash commits before pushing you branch +5. Rebased your branch on main (`git rebase`, not `git pull`) +6. Add a good descriptive commit message, with link to issue. + For example: + > feat(cohort): add amazing feature #issue-number +7. No changes to code not directly related to your PR/issue +8. Add tests to cover new code +9. Run tests locally before pushing changes + + +Once you have submitted your PR please monitor it for comments/feedback. + +We appreciate your help to make **Cohort360** an even better open source project! \ No newline at end of file diff --git a/README.md b/README.md index a71cf72e4..185d8fd1f 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,119 @@ -
- Cohort360 logo -

A web application to find patients, build cohorts and visualize data.

-
+
+ Cohort360 logo +

Lookup patients, build cohorts and visualize data.

-# Cohort360 +
[![Actions Status](https://github.com/aphp/Cohort360-FrontEnd/workflows/cohort360-main-pipeline/badge.svg)](https://github.com/aphp/Cohort360-FrontEnd/actions) [![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=aphp_Cohort360&metric=alert_status)](https://sonarcloud.io/dashboard?id=aphp_Cohort360) +
+ +Report a bug +Β· +What's new ? +
+--- + + +
+ Table of Contents +
    +
  1. + Overview + +
  2. +
  3. + Project Setup + +
  4. +
  5. Partners
  6. +
  7. Contributing
  8. +
  9. License
  10. +
  11. Contact
  12. +
+
+ +## Overview + +**Cohort360** is a project that aims to provide health professionals with a set of tools to explore patients data. + +### πŸ”‘ Features + * Look patients up using a set of criteria + * Run search queries on medical texts + * Group patients sharing some criteria by creating cohorts + * Get insights on cohorts at frst glance + * Visualize patient data + * Export patient data for extensive analysis + +
+ ⬆️ back to top +
-## Architecture +### πŸ› οΈ Built With -- [ ] Add Architecture schema +* React +* ... -Cohort360 consists of a React front-end and a Django back-end (REST API). -This repository hosts the front-end, while the back-end will be available soon. +## πŸš€ Project setup -Both the front-end and the back-end depend on a third, possibly custom, party: an endpoint to query medical data and to create cohorts. -This third endpoint can be a FHIR API for example. This is the case for the first creators of Cohort360. +### 1. πŸ’  Requirements -## Installation +To run Cohort360 locally, you'll need the following applications running: +πŸ“Œ [Cohort360-backend](https://github.com/aphp/Cohort360-Back-end/blob/enrich_repo_files/README.md) +πŸ“Œ A FHIR API to retrieve medical data -### Requirements: +### 2. πŸ“₯ Get the code -* A running back-end server -* A running third party endpoint (FHIR API for example) -* An authentication server -* Node.js (16 or higher) installed + ```sh + git clone https://github.com/aphp/Cohort360-FrontEnd.git + ``` -### Running the front-end +### 3. πŸ”§ Configuration -1. First copy the `.env.example` file to `.env` and edit this file to match your configuration. -2. Run `npm install` -3. Run `npm audit fix` -4. Run `npm run build` +> precise what configuration is needed: env vars, extra files to create to hold special configurations -This will generate files in the `build` directory that can be exposed via a web server like Nginx, or a node server. +### 4. ▢️ Run the app -An example configuration with Nginx can be found [here](.templates/nginx.conf) +Start development server -## CI +```shell +npm start +``` -A [gitlab-ci.yml](.templates/.gitlab-ci.yml) is available in the `.templates` folder, alongside -a [nginx configuration](.templates/nginx.conf) example (useful for deployment). +All set up πŸŽ‰ + +Check the application running on [http://localhost:3000](http://localhost:3000) + +
+ ⬆️ back to top +
-## Deployment +## 🏒 Partners -A docker image is available to build via the [Dockerfile](Dockerfile). You only need to update the location of your nginx conf. + * AP-HP Clinical Data Warehouse + * Arkhn : [arkhn.org](https://arkhn.org/) + * Akimed : [www.akimed.io](https://www.akimed.io/) -## Start Contributing -A contributing guide will be published soon. +## 🀝 Contributing -## Partners +See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed process about contributing to this repository. -* AP-HP Clinical Data Warehouse -* Arkhn : [arkhn.org](https://arkhn.org/) -* Akimed : [www.akimed.io](https://www.akimed.io/) +## πŸ“œ License -## Contributors +**Cohort360** is licensed under the Apache License - see the [LICENSE](LICENSE) file for details. -Coming soon... +## πŸ’¬ Contact -## License -Cohort360 is licensed under Apache License 2. +If you find this project useful, please consider starring the repository and report any encountered bugs or issues. +Write to us at: **open-source@cohort360.org** \ No newline at end of file diff --git a/public/logo_C360.png b/public/logo_C360.png new file mode 100644 index 0000000000000000000000000000000000000000..9678064249fead6ac77316e6a39783f04693706e GIT binary patch literal 30153 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 Date: Wed, 26 Mar 2025 17:26:59 +0100 Subject: [PATCH 2/4] docs: update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 185d8fd1f..107a8ed7a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
Cohort360 logo -

Lookup patients, build cohorts and visualize data.

+

Explore patient data πŸ”, build cohorts πŸ‘₯ and export data πŸ“₯πŸ“Š Works with FHIR πŸ”₯


@@ -116,4 +116,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed process about contributing t ## πŸ’¬ Contact If you find this project useful, please consider starring the repository and report any encountered bugs or issues. -Write to us at: **open-source@cohort360.org** \ No newline at end of file +Write to us at: **open-source@cohort360.org** From ab9535ab761fc90b26a3025406f36a17642568a7 Mon Sep 17 00:00:00 2001 From: Julien Dubiel Date: Wed, 26 Mar 2025 17:53:48 +0100 Subject: [PATCH 3/4] docs: update README.md --- README.md | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 107a8ed7a..9c74f91c3 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@
Overview @@ -35,7 +36,6 @@
  • Run the app
  • -
  • Partners
  • Contributing
  • License
  • Contact
  • @@ -44,19 +44,20 @@ ## Overview -**Cohort360** is a project that aims to provide health professionals with a set of tools to explore patients data. - ### πŸ”‘ Features - * Look patients up using a set of criteria - * Run search queries on medical texts - * Group patients sharing some criteria by creating cohorts - * Get insights on cohorts at frst glance - * Visualize patient data - * Export patient data for extensive analysis -
    - ⬆️ back to top -
    +* Explore, visualize, and search patient data +* Run advanced search queries on textual documents +* Create patient cohorts using a dedicated, user-friendly query builder +* Build queries with data criteria, complexity, and temporal constraints +* Get insights into cohorts at a glance +* Export cohort data for in-depth analysis + +### Based on FHIR + +Cohort360 accesses health data through a FHIR server. + +FHIR is the world’s most widely used standard for exposing health data via APIs. ### πŸ› οΈ Built With @@ -74,13 +75,13 @@ To run Cohort360 locally, you'll need the following applications running: ### 2. πŸ“₯ Get the code - ```sh - git clone https://github.com/aphp/Cohort360-FrontEnd.git - ``` +```sh +git clone https://github.com/aphp/Cohort360-FrontEnd.git +``` ### 3. πŸ”§ Configuration -> precise what configuration is needed: env vars, extra files to create to hold special configurations +> To do : specify what configuration is needed: env vars, extra files to create to hold special configurations ### 4. ▢️ Run the app @@ -98,12 +99,6 @@ Check the application running on [http://localhost:3000](http://localhost:3000) ⬆️ back to top
    -## 🏒 Partners - - * AP-HP Clinical Data Warehouse - * Arkhn : [arkhn.org](https://arkhn.org/) - * Akimed : [www.akimed.io](https://www.akimed.io/) - ## 🀝 Contributing From e2e9c6c7822398516680f043414b9f1c0544cc9b Mon Sep 17 00:00:00 2001 From: Julien Dubiel Date: Wed, 26 Mar 2025 18:03:16 +0100 Subject: [PATCH 4/4] docs: update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9c74f91c3..90c1eb2ba 100644 --- a/README.md +++ b/README.md @@ -53,11 +53,11 @@ * Get insights into cohorts at a glance * Export cohort data for in-depth analysis -### Based on FHIR +### πŸ”₯ Based on FHIR Cohort360 accesses health data through a FHIR server. -FHIR is the world’s most widely used standard for exposing health data via APIs. +[FHIR](https://www.hl7.org/fhir/) is the world’s most widely used standard for exposing health data via APIs. ### πŸ› οΈ Built With