{
  "_id": "6ab966b299f7aa8c6aa3a7b2",
  "Package": "trialdiff",
  "Title": "Clinical Trial Data-Cut Change Detection and Impact Assessment",
  "Version": "0.2.0",
  "Authors@R": "person(\"Hirujan\", \"Rangaraj\", email = \"hirujanrangaraj@gmail.com\",\nrole = c(\"aut\", \"cre\"))",
  "Description": "A transparent, rule-based framework for detecting changes\nbetween successive data cuts of clinical trial datasets,\nclassifying those changes into clinically meaningful\ncategories, tracing user-defined data lineage, and assessing\nwhich downstream analyses and outputs may be affected. The\npackage is designed to complement existing low-level data frame\ncomparison tools by adding clinical-trial-specific\nclassification, lineage and impact-assessment layers on top of\ndeterministic comparison. The rule-based classification is\nsimilar in spirit to the data validation infrastructure of van\nder Loo and de Jonge (2021) <doi:10.18637/jss.v097.i10>.",
  "License": "MIT + file LICENSE",
  "URL": "https://github.com/Hirujan-R/trialdiff,\nhttps://Hirujan-R.github.io/trialdiff/",
  "BugReports": "https://github.com/Hirujan-R/trialdiff/issues",
  "Config/testthat/edition": "3",
  "Config/Needs/website": "pkgdown",
  "Encoding": "UTF-8",
  "Language": "en-GB",
  "LazyData": "true",
  "VignetteBuilder": "knitr",
  "Config/roxygen2/version": "8.1.0",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-09-27 18:51:10 UTC",
    "User": "root"
  },
  "Author": "Hirujan Rangaraj [aut, cre]",
  "Maintainer": "Hirujan Rangaraj <hirujanrangaraj@gmail.com>",
  "Repository": "https://cran.r-universe.dev",
  "Date/Publication": "2026-09-27 16:30:02 UTC",
  "RemoteUrl": "https://github.com/cran/trialdiff",
  "RemoteRef": "HEAD",
  "RemoteSha": "10f18ecf31d80e3e087e8de61b5901a8f0787084",
  "_user": "cran",
  "_type": "src",
  "_file": "trialdiff_0.2.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/71a3f8f43eb464ed213befa0b5c3fa54c9c04e5233fad75219775d4316951cff",
  "_filesize": 264726,
  "_sha256": "71a3f8f43eb464ed213befa0b5c3fa54c9c04e5233fad75219775d4316951cff",
  "_expires": "2027-01-05T18:55:44.000Z",
  "_created": "2026-09-27T18:51:10.000Z",
  "_published": "2026-09-27T18:55:46.846Z",
  "_jobs": [
    {
      "job": 108684342784,
      "time": 209,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "10939601745"
    },
    {
      "job": 108684342743,
      "time": 229,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "10939675801"
    },
    {
      "job": 108683478209,
      "time": 262,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "10939680484"
    },
    {
      "job": 108684342752,
      "time": 168,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "10938919288"
    },
    {
      "job": 108684342759,
      "time": 97,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "10939386327"
    },
    {
      "job": 108684342779,
      "time": 107,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "10939605806"
    }
  ],
  "_host": "GitHub-Actions",
  "_buildurl": "https://github.com/r-universe/cran/actions/runs/36341861580",
  "_status": "success",
  "_upstream": "https://github.com/cran/trialdiff",
  "_commit": {
    "id": "10f18ecf31d80e3e087e8de61b5901a8f0787084",
    "author": "Hirujan Rangaraj <hirujanrangaraj@gmail.com>",
    "committer": "cran-robot <csardi.gabor+cran@gmail.com>",
    "message": "version 0.2.0\n",
    "time": 1790526602
  },
  "_maintainer": {
    "name": "Hirujan Rangaraj",
    "email": "hirujanrangaraj@gmail.com",
    "login": "hirujan-r",
    "description": "",
    "uuid": 70657769
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1",
      "role": "Depends"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "dplyr",
      "role": "Imports"
    },
    {
      "package": "htmltools",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "tibble",
      "role": "Imports"
    },
    {
      "package": "admiral",
      "role": "Suggests"
    },
    {
      "package": "cards",
      "role": "Suggests"
    },
    {
      "package": "covr",
      "role": "Suggests"
    },
    {
      "package": "diffdf",
      "role": "Suggests"
    },
    {
      "package": "haven",
      "role": "Suggests"
    },
    {
      "package": "igraph",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "lintr",
      "role": "Suggests"
    },
    {
      "package": "metacore",
      "role": "Suggests"
    },
    {
      "package": "pharmaverseadam",
      "role": "Suggests"
    },
    {
      "package": "pharmaversesdtm",
      "role": "Suggests"
    },
    {
      "package": "pkgdown",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "rtables",
      "role": "Suggests"
    },
    {
      "package": "styler",
      "role": "Suggests"
    },
    {
      "package": "tern",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "waldo",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    }
  ],
  "_owner": "cran",
  "_selfowned": false,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-39",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "0.2.0",
      "date": "2026-09-27"
    }
  ],
  "_stars": 0,
  "_contributors": [
    {
      "user": "hirujan-r",
      "count": 1,
      "uuid": 70657769
    }
  ],
  "_userbio": {
    "uuid": 6899542,
    "type": "organization",
    "name": "cran",
    "followers": 630,
    "description": "Unofficial read-only mirror of all CRAN R packages"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/trialdiff"
  },
  "_devurl": "https://github.com/hirujan-r/trialdiff",
  "_pkgdown": "https://Hirujan-R.github.io/trialdiff/",
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/trialdiff.html",
    "LICENSE"
  ],
  "_cranurl": false,
  "_releases": [
    {
      "version": "0.2.0",
      "date": "2026-09-27"
    }
  ],
  "_exports": [
    "add_edges",
    "add_outputs",
    "as_igraph",
    "as_json",
    "as_register",
    "assess_impact",
    "classify_changes",
    "compare_cut",
    "define_lineage",
    "impact_policy",
    "lineage_edge",
    "lineage_from_metadata",
    "lineage_provenance",
    "lineage_review",
    "output_registry",
    "remove_edges",
    "report_diff",
    "td_categories",
    "td_default_rules",
    "td_output",
    "td_rule",
    "trace_dependencies"
  ],
  "_datasets": [
    {
      "name": "adlb_cut1",
      "title": "Synthetic ADLB data cuts",
      "object": "adlb_cut1",
      "class": [
        "data.frame"
      ],
      "fields": [
        "USUBJID",
        "PARAMCD",
        "PARAM",
        "AVISIT",
        "TRT01P",
        "AVAL",
        "BASE",
        "CHG",
        "ABLFL"
      ],
      "rows": 360,
      "table": true,
      "tojson": true
    },
    {
      "name": "adlb_cut2",
      "title": "Synthetic ADLB data cuts",
      "object": "adlb_cut2",
      "class": [
        "data.frame"
      ],
      "fields": [
        "USUBJID",
        "PARAMCD",
        "PARAM",
        "AVISIT",
        "TRT01P",
        "AVAL",
        "BASE",
        "CHG",
        "ABLFL"
      ],
      "rows": 384,
      "table": true,
      "tojson": true
    },
    {
      "name": "adsl_adlb_lineage",
      "title": "Example ADSL/ADLB lineage",
      "object": "adsl_adlb_lineage",
      "class": [
        "td_lineage"
      ],
      "fields": [],
      "table": false,
      "tojson": false
    },
    {
      "name": "adsl_cut1",
      "title": "Synthetic ADSL data cuts",
      "object": "adsl_cut1",
      "class": [
        "data.frame"
      ],
      "fields": [
        "STUDYID",
        "USUBJID",
        "SUBJID",
        "SITEID",
        "AGE",
        "SEX",
        "RACE",
        "TRT01P",
        "SAFFL",
        "ITTFL",
        "TRT01A"
      ],
      "rows": 30,
      "table": true,
      "tojson": true
    },
    {
      "name": "adsl_cut2",
      "title": "Synthetic ADSL data cuts",
      "object": "adsl_cut2",
      "class": [
        "data.frame"
      ],
      "fields": [
        "STUDYID",
        "USUBJID",
        "SUBJID",
        "SITEID",
        "AGE",
        "SEX",
        "RACE",
        "TRT01P",
        "SAFFL",
        "ITTFL",
        "TRT01A",
        "REGION"
      ],
      "rows": 31,
      "table": true,
      "tojson": true
    }
  ],
  "_help": [
    {
      "page": "add_edges",
      "title": "Add edges to a lineage graph",
      "topics": [
        "add_edges"
      ]
    },
    {
      "page": "add_outputs",
      "title": "Add an analysis/output registry to a lineage graph",
      "topics": [
        "add_outputs"
      ]
    },
    {
      "page": "adlb_cut1",
      "title": "Synthetic ADLB data cuts",
      "topics": [
        "adlb_cut1",
        "adlb_cut2"
      ]
    },
    {
      "page": "adsl_adlb_lineage",
      "title": "Example ADSL/ADLB lineage",
      "topics": [
        "adsl_adlb_lineage"
      ]
    },
    {
      "page": "adsl_cut1",
      "title": "Synthetic ADSL data cuts",
      "topics": [
        "adsl_cut1",
        "adsl_cut2"
      ]
    },
    {
      "page": "as_igraph",
      "title": "Convert lineage to an igraph object",
      "topics": [
        "as_igraph"
      ]
    },
    {
      "page": "as_json",
      "title": "Machine-readable report data",
      "topics": [
        "as_json"
      ]
    },
    {
      "page": "as_register",
      "title": "Tidy register of every detected change",
      "topics": [
        "as_register"
      ]
    },
    {
      "page": "assess_impact",
      "title": "Assess downstream impact of classified changes",
      "topics": [
        "assess_impact"
      ]
    },
    {
      "page": "classify_changes",
      "title": "Classify detected changes",
      "topics": [
        "classify_changes"
      ]
    },
    {
      "page": "compare_cut",
      "title": "Compare two data cuts of a clinical dataset",
      "topics": [
        "compare_cut"
      ]
    },
    {
      "page": "define_lineage",
      "title": "Define a data lineage graph",
      "topics": [
        "define_lineage"
      ]
    },
    {
      "page": "impact_policy",
      "title": "Impact-assessment policy",
      "topics": [
        "impact_policy"
      ]
    },
    {
      "page": "lineage_edge",
      "title": "Define a lineage edge",
      "topics": [
        "lineage_edge"
      ]
    },
    {
      "page": "lineage_from_metadata",
      "title": "Derive lineage from study metadata",
      "topics": [
        "lineage_from_metadata"
      ]
    },
    {
      "page": "lineage_provenance",
      "title": "Provenance of metadata-driven lineage edges",
      "topics": [
        "lineage_provenance"
      ]
    },
    {
      "page": "lineage_review",
      "title": "References needing review after metadata-driven lineage",
      "topics": [
        "lineage_review"
      ]
    },
    {
      "page": "output_registry",
      "title": "Build an analysis/output registry",
      "topics": [
        "output_registry"
      ]
    },
    {
      "page": "remove_edges",
      "title": "Remove edges from a lineage graph",
      "topics": [
        "remove_edges"
      ]
    },
    {
      "page": "report_diff",
      "title": "Produce a change-review report",
      "topics": [
        "report_diff"
      ]
    },
    {
      "page": "td_categories",
      "title": "Category label lookup",
      "topics": [
        "td_categories"
      ]
    },
    {
      "page": "td_default_rules",
      "title": "Default rule set",
      "topics": [
        "td_default_rules"
      ]
    },
    {
      "page": "td_output",
      "title": "Declare an analysis or output and its inputs",
      "topics": [
        "td_output"
      ]
    },
    {
      "page": "td_rule",
      "title": "Change classification rules",
      "topics": [
        "td_rule"
      ]
    },
    {
      "page": "trace_dependencies",
      "title": "Trace downstream dependencies",
      "topics": [
        "trace_dependencies"
      ]
    }
  ],
  "_pkglogo": "https://github.com/cran/trialdiff/raw/HEAD/man/figures/logo.png",
  "_readme": "https://github.com/cran/trialdiff/raw/HEAD/README.md",
  "_rundeps": [
    "base64enc",
    "cli",
    "digest",
    "dplyr",
    "fastmap",
    "generics",
    "glue",
    "htmltools",
    "jsonlite",
    "lifecycle",
    "magrittr",
    "pillar",
    "pkgconfig",
    "R6",
    "rlang",
    "tibble",
    "tidyselect",
    "utf8",
    "vctrs",
    "withr"
  ],
  "_vignettes": [
    {
      "source": "case-study.Rmd",
      "filename": "case-study.html",
      "title": "Case study: data-cut review on public ADaM data",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The two data cuts",
        "Lineage from metadata plus a registry",
        "Compare and classify",
        "Assess downstream impact",
        "Review report",
        "What this demonstrates",
        "Limitations"
      ],
      "created": "2026-09-27 16:30:02",
      "modified": "2026-09-27 16:30:02",
      "commits": 1
    },
    {
      "source": "trialdiff.Rmd",
      "filename": "trialdiff.html",
      "title": "Getting started with trialdiff",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Why trialdiff?",
        "The example data",
        "1. Compare two data cuts",
        "2. Classify the changes",
        "3. Define lineage",
        "4. Assess impact",
        "5. Report",
        "Next steps"
      ],
      "created": "2026-09-27 16:30:02",
      "modified": "2026-09-27 16:30:02",
      "commits": 1
    },
    {
      "source": "lineage-and-impact.Rmd",
      "filename": "lineage-and-impact.html",
      "title": "Lineage and impact assessment",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The lineage model",
        "Tracing",
        "Impact assessment",
        "Why \"definitely\" versus \"potentially\"?",
        "Lineage gaps",
        "Generating lineage from metadata"
      ],
      "created": "2026-09-27 16:30:02",
      "modified": "2026-09-27 16:30:02",
      "commits": 1
    },
    {
      "source": "change-classification.Rmd",
      "filename": "change-classification.html",
      "title": "The change-classification system",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Design principles",
        "The built-in categories",
        "The change register",
        "Applying the default rules",
        "Writing a custom rule",
        "Prioritisation"
      ],
      "created": "2026-09-27 16:30:02",
      "modified": "2026-09-27 16:30:02",
      "commits": 1
    },
    {
      "source": "ecosystem.Rmd",
      "filename": "ecosystem.html",
      "title": "trialdiff and the existing ecosystem",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Complement, not duplicate",
        "Integration points",
        "Is this novel?"
      ],
      "created": "2026-09-27 16:30:02",
      "modified": "2026-09-27 16:30:02",
      "commits": 1
    }
  ],
  "_score": 3.3979400086720375,
  "_indexed": true,
  "_nocasepkg": "trialdiff",
  "_universes": [
    "cran",
    "hirujan-r"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-09-27T18:54:37.000Z",
      "distro": "resolute",
      "commit": "10f18ecf31d80e3e087e8de61b5901a8f0787084",
      "fileid": "https://r2.ropensci.org/66a5297c1c4b0819856b93e738cd701d67b60d657cee6230d86609b801d6ef3c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/36341861580"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.2.0",
      "date": "2026-09-27T18:54:50.000Z",
      "distro": "resolute",
      "commit": "10f18ecf31d80e3e087e8de61b5901a8f0787084",
      "fileid": "https://r2.ropensci.org/1f5673aaa9b287f78dbb9d7ebce57294b71a75b00f0bab40376415d1f352904a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/36341861580"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.2.0",
      "date": "2026-09-27T18:54:19.000Z",
      "commit": "10f18ecf31d80e3e087e8de61b5901a8f0787084",
      "fileid": "https://r2.ropensci.org/439e4d9519a162b1c8145ebe8a1acc919be1af2f05828535e5d67ba95e3dc09d",
      "status": "success",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/36341861580"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-09-27T18:52:29.000Z",
      "commit": "10f18ecf31d80e3e087e8de61b5901a8f0787084",
      "fileid": "https://r2.ropensci.org/a26a83525ef106c825b1c7c4b7b8d0e3549c7b87f14a490c656c4b73cc69b0b3",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/36341861580"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.2.0",
      "date": "2026-09-27T18:52:40.000Z",
      "commit": "10f18ecf31d80e3e087e8de61b5901a8f0787084",
      "fileid": "https://r2.ropensci.org/4b5c12e3ec99dc231c304cf42598ca6fbe5fb7a5fc1c97e673fb7adacc5495bf",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/36341861580"
    }
  ]
}