Skip to content

feat: Migrate pcr (qPCR) parsers to REC 2026/03 schema#1181

Open
nathan-stender wants to merge 3 commits into
mainfrom
migrate-pcr-rec-2026-03
Open

feat: Migrate pcr (qPCR) parsers to REC 2026/03 schema#1181
nathan-stender wants to merge 3 commits into
mainfrom
migrate-pcr-rec-2026-03

Conversation

@nathan-stender

Copy link
Copy Markdown
Collaborator

Summary

Migrates all 3 qPCR parsers from REC 2024/09 to REC 2026/03:

  • appbio_quantstudio
  • appbio_quantstudio_designandanalysis
  • cfxmaestro

Changes

New files

  • 2026/03 schema mapper: src/allotropy/allotrope/schema_mappers/adm/pcr/rec/_2026/_03/qpcr.py
  • Downloaded schemas: schemas/adm/pcr/REC/2026/03/ + core/qudt dependencies
  • Generated models: models/adm/pcr/rec/_2026/_03/ + core dependencies

Import path updates (11 parser source files)

All parser files updated from rec._2024._09 to rec._2026._03.

Mapper changes from 2024/09

  • experimental_data_identifier: Remains on MeasurementAggregateDocument (required by schema) AND now also set on each MeasurementDocumentItem
  • group_identifier promoted: Moved from SampleDocument custom info to native ProcessedDataDocumentItem.group_identifier field
  • DeviceSystemDocument: Now imported from the qpcr model directly (was incorrectly imported from hierarchy), removing the # type: ignore comment

Generated model fix

  • Added experimental_data_identifier: TStringValue to MeasurementAggregateDocument in the generated model — the 2026/03 schema requires this field at the MAD level but the code generator missed it because the property is inherited via $ref rather than defined inline in the schema's properties block.

JSON test data audit (40 files)

Change Scope Description
Manifest URL All 40 files REC/2024/09REC/2026/03
ASM converter version All 40 files Various → 0.1.118
Key ordering All 40 files JSON keys reordered to follow 2026/03 schema-defined order
group_identifier move All 40 files "group identifier" moved from sample document > custom information document to processed data document as a native field
experimental_data_identifier All 40 files Now appears at both MAD and measurement document level

No changes to measurement values, cycle thresholds, targets, sample identifiers, data cube arrays, or any other scientific data.

Test plan

  • hatch run test:test tests/parsers/{all 3 parsers}/ — 56 passed
  • hatch run lint — clean
  • hatch run lint:typing — clean
  • Pre-push hook (770 tests) — all pass

🤖 Generated with Claude Code

Migrate all 3 qPCR parsers from REC 2024/09 to REC 2026/03. Includes
downloading the schema, generating model code, creating the 2026/03
schema mapper, and updating all parser imports.

Parsers migrated:
- appbio_quantstudio
- appbio_quantstudio_designandanalysis
- cfxmaestro

Structural changes in the migration:
- experimental_data_identifier remains required on MeasurementAggregateDocument
  AND is also now available on MeasurementDocumentItem (set at both levels)
- group_identifier promoted from SampleDocument custom info to native field
  on ProcessedDataDocumentItem
- DeviceSystemDocument now imported from qpcr model (not hierarchy), removing
  the type: ignore comment
- Added experimental_data_identifier to generated MeasurementAggregateDocument
  model (schema requires it but code generator missed it since the property
  is inherited via $ref rather than defined inline)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@nathan-stender
nathan-stender requested review from a team and slopez-b as code owners April 16, 2026 23:36
nathan-stender and others added 2 commits April 16, 2026 19:57
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Restores the compact single-line format for numeric arrays in data cube
structures that was lost during JSON key reordering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants