From f06f9b50093918e8dfff96c91426dcc85fde85b1 Mon Sep 17 00:00:00 2001 From: Omar Garcia Calderon <63516033+OGarcia11@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:05:42 -0600 Subject: [PATCH 1/2] Add coreval project to COSA directory --- src/assets/projects/coreval/coreval.json | 49 ++++++++++++ src/assets/projects/coreval/coreval.yaml | 99 ++++++++++++++++++++++++ src/assets/projects/projects.json | 14 ++++ 3 files changed, 162 insertions(+) create mode 100644 src/assets/projects/coreval/coreval.json create mode 100644 src/assets/projects/coreval/coreval.yaml diff --git a/src/assets/projects/coreval/coreval.json b/src/assets/projects/coreval/coreval.json new file mode 100644 index 0000000..b8f079c --- /dev/null +++ b/src/assets/projects/coreval/coreval.json @@ -0,0 +1,49 @@ +{ + "projectInfo": { + "projectName": "coreval", + "projectOwner": "Hrach Gevorgyan (independent developer)", + "projectContact": [ + "Hrach Gevorgyan " + ], + "projectLandingPage": "https://hrach-gevorgyan.github.io/coreval/", + "projectRepository": "https://github.com/hrach-gevorgyan/coreval", + "programmingLanguage": [ + "R" + ], + "openSourceLicense": [ + "MIT" + ], + "cdiscStandards": [ + "SDTM", + "SEND", + "USDM", + "TIG", + "Dataset-JSON", + "Define-XML", + "CDISC CT" + ], + "projectMaturity": "Stable", + "agreeWithCdiscCodeOfEthics": true, + "user": [ + "Clinical Programmers", + "Statistical Programmers", + "Data Managers" + ], + "logoUrl": "https://raw.githubusercontent.com/hrach-gevorgyan/coreval/master/man/figures/logo.png" + }, + "detailedDescription": { + "problem": "Conformance problems in SDTM and SEND data are usually found late, when the\nfinished datasets are run through a separate validation tool shortly before\nsubmission. Fixing them then means going back through programs that were\nwritten weeks earlier. Programmers working in R have had no way to run\nCDISC's conformance rules from inside the session where they build the data.", + "solution": "coreval is an R package that runs the CDISC Open Rules on a data frame or on\na whole study folder, offline, with no API key. A programmer can check a\ndataset right after writing the code that builds it. Each finding names the\nrule, the record and the values involved, and results can be filtered and\nwritten to Excel together with the rules that could not be evaluated and the\nreason. The rules are shipped as data taken from a pinned commit of\ncdisc-open-rules, and that commit is recorded in every findings file.\n\nIt complements CDISC's rules engine rather than replacing it: coreval is a\nfirst check while programming, not a replacement for a validated tool.\nTo test its results, coreval was run on CDISC's pilot submission\n(22 datasets, 294,677 records) and every finding was compared rule by rule\nwith the reference engine. Rules are also run against the example data\nCDISC publishes for them, and coverage is documented:\nhttps://github.com/hrach-gevorgyan/coreval/blob/master/docs/REAL-STUDY.md\nhttps://github.com/hrach-gevorgyan/coreval/blob/master/docs/COVERAGE.md", + "openSourceConsiderations": "Conformance checking should be open to every programmer, including those\nat small companies and in academia. Publishing it as open source lets users\ninspect exactly how each rule is evaluated, report disagreements, and adopt\nit without licensing barriers. The CDISC material it uses is itself MIT\nlicensed, and its origin is documented in the package (inst/COPYRIGHTS).", + "maintenanceModel": "Issues are reported on GitHub\n(https://github.com/hrach-gevorgyan/coreval/issues). The package is\nreleased on CRAN with semantic versioning, and every change is recorded in\nNEWS.md. Each push is checked on Windows, macOS and Linux through GitHub\nActions, and the main branch is protected. When CDISC updates the Open\nRules, the pinned commit is updated, the conformance tests are re-run, and\nchanges in results are reviewed before release.", + "projectSize": "Medium (M). About 10,000 lines of R code evaluating 1,054 bundled rules\nthrough a general set of operators, with a test suite, a conformance test\nharness and a real-study comparison. Developed and maintained by one person.", + "contributors": "Contributions are welcome through GitHub issues and pull requests, under\nthe MIT licence and the project's code of conduct. No contributor licence\nagreement is required.", + "userDetails": "Working knowledge of SDTM or SEND and basic R. The getting-started guide\nand function reference are on the website:\nhttps://hrach-gevorgyan.github.io/coreval/", + "preRequisites": "R 4.1 or later on Windows, macOS or Linux. Installed from CRAN with\ninstall.packages(\"coreval\"). Required packages are data.table and haven;\na few optional packages add specific formats, such as Excel export.\nNo network access or API key is needed.", + "projectServiceOptions": "No paid services are offered. The MIT licence allows any company to\nprovide support, validation or integration services around the package.", + "sponsors": "Not sponsored.", + "goalsObjectives": "Keep the bundled rules in step with CDISC's published Open Rules releases.\nAdd ADaM once CDISC publishes CORE conformance rules for ADaM. Widen\ncoverage of areas the current test data exercises least, such as split\ndomains and define.xml driven rules. Make coreval part of the pharmaverse\nset of R packages (a request is under review).", + "communications": "Release notes in NEWS.md and GitHub releases, the package website, and\nannouncements on LinkedIn and R community channels (R Weekly, Posit\nCommunity). The package has been submitted for inclusion in pharmaverse.", + "additionalInformation": "coreval is an independent project and is not affiliated with or endorsed\nby CDISC. Happy to answer any questions by email." + } +} \ No newline at end of file diff --git a/src/assets/projects/coreval/coreval.yaml b/src/assets/projects/coreval/coreval.yaml new file mode 100644 index 0000000..767b0a0 --- /dev/null +++ b/src/assets/projects/coreval/coreval.yaml @@ -0,0 +1,99 @@ +--- +projectInfo: + projectName: coreval + projectOwner: Hrach Gevorgyan (independent developer) + projectContact: + - Hrach Gevorgyan + projectLandingPage: https://hrach-gevorgyan.github.io/coreval/ + projectRepository: https://github.com/hrach-gevorgyan/coreval + programmingLanguage: + - R + openSourceLicense: + - MIT + cdiscStandards: + - SDTM + - SEND + - USDM + - TIG + - Dataset-JSON + - Define-XML + - CDISC CT + projectMaturity: Stable + agreeWithCdiscCodeOfEthics: true + user: + - Clinical Programmers + - Statistical Programmers + - Data Managers + logoUrl: https://raw.githubusercontent.com/hrach-gevorgyan/coreval/master/man/figures/logo.png +detailedDescription: + problem: |- + Conformance problems in SDTM and SEND data are usually found late, when the + finished datasets are run through a separate validation tool shortly before + submission. Fixing them then means going back through programs that were + written weeks earlier. Programmers working in R have had no way to run + CDISC's conformance rules from inside the session where they build the data. + solution: |- + coreval is an R package that runs the CDISC Open Rules on a data frame or on + a whole study folder, offline, with no API key. A programmer can check a + dataset right after writing the code that builds it. Each finding names the + rule, the record and the values involved, and results can be filtered and + written to Excel together with the rules that could not be evaluated and the + reason. The rules are shipped as data taken from a pinned commit of + cdisc-open-rules, and that commit is recorded in every findings file. + + It complements CDISC's rules engine rather than replacing it: coreval is a + first check while programming, not a replacement for a validated tool. + To test its results, coreval was run on CDISC's pilot submission + (22 datasets, 294,677 records) and every finding was compared rule by rule + with the reference engine. Rules are also run against the example data + CDISC publishes for them, and coverage is documented: + https://github.com/hrach-gevorgyan/coreval/blob/master/docs/REAL-STUDY.md + https://github.com/hrach-gevorgyan/coreval/blob/master/docs/COVERAGE.md + openSourceConsiderations: |- + Conformance checking should be open to every programmer, including those + at small companies and in academia. Publishing it as open source lets users + inspect exactly how each rule is evaluated, report disagreements, and adopt + it without licensing barriers. The CDISC material it uses is itself MIT + licensed, and its origin is documented in the package (inst/COPYRIGHTS). + maintenanceModel: |- + Issues are reported on GitHub + (https://github.com/hrach-gevorgyan/coreval/issues). The package is + released on CRAN with semantic versioning, and every change is recorded in + NEWS.md. Each push is checked on Windows, macOS and Linux through GitHub + Actions, and the main branch is protected. When CDISC updates the Open + Rules, the pinned commit is updated, the conformance tests are re-run, and + changes in results are reviewed before release. + projectSize: |- + Medium (M). About 10,000 lines of R code evaluating 1,054 bundled rules + through a general set of operators, with a test suite, a conformance test + harness and a real-study comparison. Developed and maintained by one person. + contributors: |- + Contributions are welcome through GitHub issues and pull requests, under + the MIT licence and the project's code of conduct. No contributor licence + agreement is required. + userDetails: |- + Working knowledge of SDTM or SEND and basic R. The getting-started guide + and function reference are on the website: + https://hrach-gevorgyan.github.io/coreval/ + preRequisites: |- + R 4.1 or later on Windows, macOS or Linux. Installed from CRAN with + install.packages("coreval"). Required packages are data.table and haven; + a few optional packages add specific formats, such as Excel export. + No network access or API key is needed. + projectServiceOptions: |- + No paid services are offered. The MIT licence allows any company to + provide support, validation or integration services around the package. + sponsors: Not sponsored. + goalsObjectives: |- + Keep the bundled rules in step with CDISC's published Open Rules releases. + Add ADaM once CDISC publishes CORE conformance rules for ADaM. Widen + coverage of areas the current test data exercises least, such as split + domains and define.xml driven rules. Make coreval part of the pharmaverse + set of R packages (a request is under review). + communications: |- + Release notes in NEWS.md and GitHub releases, the package website, and + announcements on LinkedIn and R community channels (R Weekly, Posit + Community). The package has been submitted for inclusion in pharmaverse. + additionalInformation: |- + coreval is an independent project and is not affiliated with or endorsed + by CDISC. Happy to answer any questions by email. diff --git a/src/assets/projects/projects.json b/src/assets/projects/projects.json index 20e1c66..9a188ef 100644 --- a/src/assets/projects/projects.json +++ b/src/assets/projects/projects.json @@ -341,5 +341,19 @@ "categories": [ "USDM" ] + }, + { + "id": "coreval", + "name": "coreval", + "description": "An R package that runs the CDISC Open Rules (CORE) conformance rules against SDTM, SEND and USDM data offline, so programmers can check datasets while building them.", + "categories": [ + "SDTM", + "SEND", + "USDM", + "TIG", + "Dataset-JSON", + "Define-XML", + "CDISC CT" + ] } ] \ No newline at end of file From d761eb529d0ef558b4fc8e6acefa9c3d0e4c489e Mon Sep 17 00:00:00 2001 From: Omar Garcia Calderon <63516033+OGarcia11@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:16:19 -0600 Subject: [PATCH 2/2] Add files via upload --- src/assets/projects/coreval/logo.png | Bin 0 -> 21446 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/projects/coreval/logo.png diff --git a/src/assets/projects/coreval/logo.png b/src/assets/projects/coreval/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e55939e1384427c3dd19823a40f222912553b90d GIT binary patch literal 21446 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 YLGDq$a5>Sx6S@^-RHZ8<-+uT%08$nlr~m)} literal 0 HcmV?d00001