A cryopreservation result is the end of a long chain. A formulation is prepared from specific reagent lots and cooled along a controlled profile. The sample is stored, warmed, and then counted or stained, often days later. A viability percentage reported at the end of that chain is only as trustworthy as every record before it. A wrong lot number, an unsynchronized clock, or a count that does not add up can make a good protocol look bad, or the reverse.
WIA-CRYO-010 Phase 1 addresses this by making each link in the chain a typed JSON-LD record: experiment, cryoprotectant formulation, viability assessment, and long-term outcome study. Each record can carry its own quality and provenance blocks. This chapter shows how those blocks, together with schema validation and a few arithmetic checks, implement the ALCOA+ attributes. It also shows how they support the risk-based thinking of ICH E6 R3 where research data feed clinical work.
ALCOA+ is the data-integrity vocabulary used by regulators and auditors. The original five attributes are Attributable, Legible, Contemporaneous, Original and Accurate. The "plus" adds Complete, Consistent, Enduring and Available. The specification does not use these names, but its fields line up with them closely.
| Attribute | Practical meaning in the lab | Where the standard supports it |
|---|---|---|
| Attributable | Who produced or changed the value | provenance.creator, modifiedBy; assay operator; investigator orcid |
| Legible | Readable and unambiguous | Controlled vocabularies; mandatory units; JSON-LD context |
| Contemporaneous | Recorded when observed | assessmentTime; quality.timeliness |
| Original | First capture or a certified copy | rawDataLinks; uncompressed TIFF; HDF5 logs |
| Accurate | Correct and verified | quality.accuracy; standardError; assay quality flag |
| Complete | Nothing missing | quality.completeness (0–1) |
| Consistent | No internal contradictions | quality.consistency; shared enumerations |
| Enduring | Survives for the retention period | PDF/A, semantic versioning, changeLog |
| Available | Retrievable for review | Persistent @id URNs, DOIs, ORCID and ROR identifiers |
Attribution works at two levels. At the study level, the experiment record names a principalInvestigator with an ORCID and an institution with a ROR identifier. These are stable identifiers that survive a change of employer or a renamed department. At the measurement level, each assay entry has an operator and an equipment string. This matters because a single post-thaw count can be read by different people on different hemocytometers or flow cytometers, and systematic differences between them are a common source of unexplained variance.
Contemporaneity depends on clocks. Every timestamp must be ISO-8601, and Annex E of the specification notes that deadlines depend on synchronized time sources; NTPv4 against stratum-2 servers is described as sufficient for most uses. A freezer controller, a plate reader and a laboratory notebook that disagree by several minutes can make a warming step appear to follow the assay it preceded. quality.timeliness records when the data were collected, as distinct from created, which records when the record was written. A large gap between the two is a signal to review.
The experiment record's results.rawDataLinks field holds an array of URIs, so a summary figure can always be traced to the files behind it. The standard's choice of file formats follows from what must be preserved:
v is unreadable in five years.JSON-LD remains the primary format for everything structured. XML is an alternative serialization only where JSON cannot be used.
ICH E6 R3 is the revised Good Clinical Practice guideline. Its emphasis on proportionate, risk-based quality management, on data governance and on fit-for-purpose computerized systems applies to the data pipeline as well as the trial site. Most cryopreservation research is laboratory work rather than a clinical trial. The guideline becomes relevant when results inform clinical use of gametes, embryos, cells or tissues, or when a study is registered as a human outcome study.
The schemas contain the hooks for that situation. The experiment record has an irbApproval field and a fundingSource field. The long-term outcome study carries a registration block with registry, identifier and registration date. Its design block records randomization and blinding. A risk-based approach asks which values are critical to quality. In this domain these are typically the primary endpoint, the CPA concentrations, the thermal history, and the assay timing relative to thaw. Those fields deserve the strictest validation and review, while descriptive keywords need far less.
Phase 1 says every record should include quality metadata. The block below follows the specification's field names; the values are illustrative.
{
"quality": {
"completeness": 0.96,
"consistency": true,
"accuracy": "counts verified by second operator",
"timeliness": "2025-01-14T09:32:00Z",
"validation": {
"validated": true,
"validator": "QA-reviewer-02",
"validationDate": "2025-01-15T10:00:00Z",
"method": "schema + arithmetic checks"
}
},
"provenance": {
"creator": "operator-17",
"created": "2025-01-14T09:40:00Z",
"modified": "2025-01-15T08:05:00Z",
"modifiedBy": "operator-17",
"changeLog": []
}
}
completeness is the share of required fields that are populated, expressed from 0 to 1. consistency is a boolean set only after consistency checks have run. A blank changeLog next to a modified time later than created is itself a finding: something changed without being recorded.
The standard requires every JSON-LD document to validate against the published JSON Schema. It lists the ajv command line, the Python jsonschema library, and the JavaScript ajv library as tools. A batch gate in a pipeline can be as small as:
ajv validate -s schema.json -d data.json
Structural validation catches missing required strings such as title and the investigator's name, enumeration values outside the allowed set, and numbers delivered as strings. It cannot catch a well-formed record that is scientifically impossible. That is the job of the content checks in the following sections.
Custom fields are permitted, but only with an organization prefix such as myorg:customField. This keeps local additions visibly separate from the standard's own terms, so a validator can tell an extension from a typo.
Controlled vocabularies are what make records from different laboratories comparable, and the specification requires standardized enumeration values. Implementers should read the vocabulary section of Phase 1 carefully, because the schema listings and the controlled-vocabulary section do not always use identical tokens. For example, the experiment schema shows COOLING_RATE where the vocabulary section lists COOLING_RATE_OPTIMIZATION. Likewise, the viability schema shows ATP and ANNEXIN_V where the vocabulary lists ATP_ASSAY and ANNEXIN_V_PI. The vocabulary section also includes the lifecycle states SUSPENDED and FAILED, which the inline lifecycle enumeration omits.
The practical rule is to treat the published JSON Schema as the arbiter and to pin the schema version used for each validation run. A mapping table in the local pipeline, from legacy spellings to the current token, is better than silently accepting both. Otherwise one lab's "ATP" and another's "ATP_ASSAY" will split into two groups when results are pooled.
The standard requires every numeric value to carry a unit, with QUDT as the recommended vocabulary. Concentrations may be %v/v, %w/v, M, mM, μM or mg/mL. Temperature is °C or K. A permeating CPA recorded as a bare number cannot be interpreted, because 10 %v/v and 10 mM of the same agent differ enormously in effect.
Formulation records add traceability fields for each component: casNumber, manufacturer, catalogNumber, lotNumber and, for permeating agents, purity. Useful content checks include:
finalOsmolality is given in mOsm/kg and is plausible for the stated composition, within the tolerance the lab has set.VALIDATED lists validationStudies; one marked DEPRECATED is not referenced by new experiments.The viability assessment schema stores totalCells, viableCells, deadCells and viabilityPercent side by side. This redundancy makes cheap and powerful checks possible. The three counts must reconcile, and the percentage must follow from them. The sketch below assumes the document is already parsed.
def check_assay(r, tol=0.5):
issues = []
if r["viableCells"] + r["deadCells"] != r["totalCells"]:
issues.append("counts do not sum to total")
if r["totalCells"] > 0:
calc = 100.0 * r["viableCells"] / r["totalCells"]
if abs(calc - r["viabilityPercent"]) > tol:
issues.append("percent does not match counts")
if not (0 <= r["viabilityPercent"] <= 100):
issues.append("percent out of range")
return issues
The tolerance is a local choice that covers rounding. A record that fails any check should have its quality flag on the assay set to FAIL or UNCERTAIN rather than being deleted. The three-value flag (PASS, FAIL, UNCERTAIN) exists so that doubtful measurements stay visible and are excluded deliberately, not quietly.
The same sample can give different viability values depending on what the assay measures, so the method field is part of the result's meaning. The vocabulary covers these methods:
| Token | What it reports |
|---|---|
TRYPAN_BLUE | Membrane exclusion of dye by intact cells |
PROPIDIUM_IODIDE, 7AAD | Nuclear stain entering cells with compromised membranes |
CALCEIN_AM | Intracellular enzyme activity in living cells |
MTT, ALAMAR_BLUE, ATP_ASSAY | Metabolic activity as a proxy for viability |
ANNEXIN_V_PI | Separates early apoptotic from necrotic cells |
LDH_RELEASE | Enzyme leakage from damaged membranes |
TUNEL | DNA fragmentation |
FLOW_CYTOMETRY | Population-level readout, usually with one of the stains above |
A membrane-integrity test immediately after thaw can overestimate survival of cells that are already committed to apoptosis. Comparing results across studies is only meaningful when the assay, protocol description and timing are all recorded.
The timePostThaw object (a value and a unit such as hours or days) is one of the most important fields in the viability record. Cryoinjured cells can look intact shortly after warming and then die over the following hours or days. A viability figure without its time point is therefore incomplete in the ALCOA+ sense, even when every other field is filled in.
The recovery block separates two ideas that are often conflated. recoveryPercent expresses how many cells were found after thaw relative to cellsPreFreeze. viabilityPercent expresses how many of the cells counted were alive. effectiveViability combines them. A protocol that keeps 90 % of surviving cells viable but loses most of the cells during handling is not a good protocol, and only the combined view shows it. A consistency rule should confirm that cellsPostThaw and cellsPreFreeze use the same unit and that the recovery percentage follows from them.
Long-term studies add risks that single experiments lack: attrition, changing protocols across centers, and selective reporting. The LongTermOutcomeStudy schema captures the controls an auditor looks for. Registration details (registry, identifier, date) allow the reported primary endpoint to be compared with what was declared in advance. The design block records study type, enrollment target, number of centers, randomization and blinding. The assessmentSchedule lists planned time points and samples per time point.
Useful checks compare planned and actual figures. successfulSamples must not exceed totalSamples. The stated successRate must follow from them. The confidenceInterval must have a lower bound below the upper bound and must contain the point estimate. Subgroup analyses in bySubgroup should be traceable to the pre-registered plan, so that a favorable subgroup is not simply the one that happened to work.
The failures that quality control catches in cryopreservation data are rarely dramatic. They are small, recurring mismatches:
experimentId matches no experiment, or whose sampleId cannot be linked to a thermal log.modified updated but no changeLog entry.FAIL that vanish from the summary. The primary endpoint should state how many samples were excluded and why.Most of these are detectable automatically by comparing records with each other. The skill lies in deciding which findings block a release and which only require a note.
Automated checks produce a report, and a person decides what it means. A workable sequence is: schema validation, vocabulary and unit checks, arithmetic and cross-record checks, then human review of everything flagged UNCERTAIN or FAIL. The reviewer's identity and date go into quality.validation. The specification also defines a conformance tier model, and implementations claiming the higher tiers must pass its published test vectors and keep evidence, so the reports from this pipeline double as audit material.
Data quality in this standard is built from specific, checkable parts. Identifiers and operators make records attributable. Timestamps and synchronized clocks make them contemporaneous. Raw-data links and archival formats preserve the original. The quality block reports completeness and consistency, while provenance and changeLog keep the history. Arithmetic checks on cell counts, plausibility checks on formulations, and careful recording of assay method and post-thaw timing guard against the errors that most often distort cryopreservation results. A risk-based reading of ICH E6 R3 tells reviewers to concentrate effort on the fields that drive the primary endpoint.
Validated records are the input for everything that follows. Phase 2 of the standard, which defines algorithms, works on these records, so its calculations inherit whatever quality the data already has. The next chapter therefore moves from asking whether a record can be trusted to asking what can be computed from it.