Lab Report (EDD) format
The Lab Report format is Erde's electronic data deliverable (EDD) shape for laboratory results — the structured, multi-sheet workbook a laboratory or LIMS exports so an entire report (the report header, its samples, analyses, and results) loads in one import. This page is the field-level contract: every sheet, every column, which are required, and how the sheets link to one another.
It documents the import upload columns, not the stored records. For the fields, types, and constraints of the records this import creates — the Lab Report, Lab Analysis, and Lab Result — see the Lab data reference.
Erde ships two lab import formats:
- Lab Report (this page) — a multi-sheet EDD for laboratory/LIMS exports. Every sample, analysis, and result carries the lab's sample code, which is how the lab ties the sheets together.
- Lab Results (Single Sheet) — a single flat sheet for hand-entered or
historical/unstructured data. It is more permissive: it can attach results to
an existing project sample by field sample code
alone (no lab sample code), and it carries two column groups the Lab Report EDD
omits —
FieldSampleCode/SampleDateon its analysis and result rows (the anchor for those code-only rows) and the inlineVal_*validation columns for already-validated historical data. The validated qualifier rides inVal_Qualifier, from which disposition (rejected, estimated, and so on) is derived through the Qualifiers reference data — there are no separate rejected or estimated columns.
If your data is a lab deliverable, use this format. If you are hand-building one wide sheet to attach results to samples already in Erde, use Lab Results (Single Sheet). See Import formats for the full list.
File shape
| Aspect | Value |
|---|---|
| Sheets | LabReport, Sample, Analysis, and Result — all four are required. There is no Batch sheet: batch codes ride in the Analysis sheet's typed batch columns |
| Upload | One Excel workbook (.xlsx, .xls) with one named sheet per table, or one CSV (.csv, .txt) per sheet — name each CSV after its sheet (matching is case-insensitive) |
| Header row | The first row of every sheet is the column headers. Column order does not matter; column names do (use the names in the tables below) |
| Reports per file | A Lab Report upload describes one report — the LabReport sheet has exactly one row, and every child row belongs to it |
| Row limit | 100,000 rows total across all sheets in one import |
| Template | Use Download Template on the import create form to get a starter workbook with every sheet and column |
Extra columns Erde does not recognize are ignored with a warning; a missing required column (a header that must be present) fails the import up front.
How the sheets link together
The lab's codes are the glue. A laboratory's EDD already contains these — they are how the lab itself relates a result back to the sample it ran.
- Report → children. Sample, Analysis, and Result rows may carry a ReportCode column pointing at the LabReport row's ReportCode. In a single-report Lab Report upload you can leave it blank — every child is grouped under the one report automatically.
- Sample → Analysis → Result. The Lab Sample Code (
LabSampleCode) threads the three: a Sample row defines the lab sample, and the Analysis and Result rows for it repeat the sameLabSampleCode. - Result → Analysis. A Result is matched to its Analysis by a composite key:
LabSampleCode+AnalysisMethod+AnalysisDate+Fraction+RunType(+ColumnNumberwhen dual-column GC runs are present). These columns must agree between the Analysis row and its Result rows or the result is reported as orphaned. - Batches. An Analysis row carries its batch codes in three optional typed columns — LeachateBatchCode, PreparationBatchCode, and AnalysisBatchCode — the shape most LIMS export natively, since the prep and analytical batch are single-valued fields on the test record. The column a code appears in is its type declaration, and any code is legal: at commit, Erde creates one batch per distinct code-and-type on the report and assigns each analysis its typed batches. There is no Batch sheet — a workbook that includes one is rejected with a message telling you to move the codes into the typed columns and remove the sheet.
Every Sample, Analysis, and Result row must carry its
LabSampleCode — it is the lab's linking key and the carrier for
sample-level metadata (percent moisture, prepared-by, QC classification). A row
that leaves it blank is rejected at validation with a clear message. To attach
results to an existing project sample by field sample code instead, use the
Lab Results (Single Sheet) (flat) format.
Enumerated columns (Report Status, Sample Type, Fraction, Basis, and so on) accept either the code or the name of the value — see Codes and names. The tables below link each enumerated column to its value list in Enumerations and codes.
LabReport sheet (required, one row)
The report header. Exactly one row.
| Column | Required | Description |
|---|---|---|
ReportCode | Yes | The report identifier, max 50 characters. Unique within the Project. Children point at this with their own ReportCode column. |
Laboratory | No | The laboratory that ran the work (reference lookup). A report with no laboratory warns on save. |
ChainOfCustody | No | The Chain of Custody that delivered the samples (reference lookup, resolved within the report's Project). |
ReportStatus | No | One of the Lab Report status values. Defaults to Preliminary on import. |
ReportDate | No | When the lab issued the report. |
SampleReceiptDate | No | When the lab received the samples. Must be on or before the report date. |
ReportedBy | No | Free text, max 100 characters. |
ReportNotes | No | Free text, max 2000 characters. |
Sample sheet (required)
One row per lab sample — both field samples and lab QC samples (method blanks, LCS, matrix spikes, and so on).
| Column | Required | Description |
|---|---|---|
ReportCode | No | Link back to the LabReport ReportCode. |
LabSampleCode | Yes | The lab's sample identifier. The linking key for this sample's analyses and results. |
FieldSampleCode | Cond. | The field Sample code. Required for field samples (so the lab sample resolves to a project sample); omit for lab QC. |
SampleDate | Cond. | The field sampling date. Part of the project-sample match (FieldSampleCode + SampleDate) for field samples. |
Matrix | Cond. | The sample Matrix (reference lookup). Required for field samples; omit for lab QC. |
SampleType | Yes | A field Sample type or a Lab QC type classification — this value also decides whether the row is a field sample or lab QC. No default; it must be explicit. The sample origin (Field / Lab) is derived from it. |
ParentLabSampleCode | No | The parent lab sample code, for QC tied to a parent (for example a matrix-spike's source). |
IsBatchOnlyQc | No | true/false. Marks QC that belongs to a batch rather than a specific sample. |
PreparedBy | No | Free text. |
PercentMoisture | No | Percent moisture for the sample, wet (as-received) basis expected — so 0–100. Values above 100 warn but load as reported (dry-basis gravimetric water content can legitimately exceed 100% for peat / organic sediment / sludge). Stored as reported; never computed with. |
SampleNotes | No | Free text. |
Analysis sheet (required)
One row per analysis run. Every row must repeat its sample's LabSampleCode.
| Column | Required | Description |
|---|---|---|
ReportCode | No | Link back to the LabReport ReportCode. |
LabSampleCode | Yes | The sample this analysis ran against — must match a Sample sheet row. |
LabAnalysisCode | No | The lab's own identifier for this analysis run (its LIMS test/run id), preserved so you can cross-reference the exact run when you contact the lab. Reference only — it plays no part in matching results to analyses. Must be unique within the report; max 50 characters. |
AnalysisMethod | Yes | The analytical Method (reference lookup). |
LeachateMethod | No | Leaching procedure, when applicable (reference lookup). Part of the analysis identity: a total run and a TCLP run of the same method are distinct analyses. |
PreparationMethod | No | Sample preparation procedure, when applicable (reference lookup). |
RunType | No | Analysis run type. Defaults to IN (Initial). Part of the result-to-analysis match. |
Fraction | Yes | Fraction. Part of the result-to-analysis match. |
MatrixType | Yes | The Matrix type. |
LeachateDate | No | On or before the preparation and analysis dates. |
PreparationDate | No | On or before the analysis date. |
AnalysisDate | No | When the analysis ran. Part of the result-to-analysis match. |
DilutionFactor | No | Positive. Defaults to 1. A value below 1.0 warns (pre-concentration). Part of the analysis identity: same-day serial dilutions (a 10x and a 100x run) are distinct analyses. |
LeachateBatchCode | No | The leach batch. The lab's batch code, max 50 characters — any code is legal; commit creates the batch on the report when no Leach batch with that code exists yet. |
PreparationBatchCode | No | The preparation batch (digestion / extraction / other prep lot). Same use-or-create behavior; the procedure itself goes in PreparationMethod. |
AnalysisBatchCode | No | The analytical (instrument run / QC) batch. Same use-or-create behavior. The column a code appears in is its batch type — one batch per distinct code-and-type is created at commit. |
AnalyzedBy | No | Free text, max 100 characters. |
ColumnNumber | No | GC column (1C primary / 2C confirmation). Disambiguates dual-column GC runs. |
InstrumentIdentifier | No | Free text, max 100 characters. |
SubsampleAmount | No | Positive. Requires SubsampleUnit. |
SubsampleUnit | No | Unit for the subsample amount (reference lookup). Requires SubsampleAmount. |
FinalVolume | No | Positive. Requires FinalVolumeUnit. |
FinalVolumeUnit | No | Unit for the final volume (reference lookup). Requires FinalVolume. |
CountTime | No | Radiochemistry. Requires CountTimeUnit. |
CountTimeUnit | No | Time unit (SEC / MIN / HR). |
RadReferenceDate | No | Radiochemistry reference date. |
AnalysisNotes | No | Free text, max 500 characters. |
Result sheet (required)
One row per analyte outcome. The first several columns repeat the Analysis row's linking key so each result attaches to the right analysis.
| Column | Required | Description |
|---|---|---|
ReportCode | No | Link back to the LabReport ReportCode. |
LabSampleCode | Yes | The sample — must match the parent Analysis row. |
AnalysisMethod | Yes | Must match the parent Analysis row (part of the match key). |
AnalysisDate | Cond. | Must match the parent Analysis row where set (part of the match key). |
Fraction | Yes | Must match the parent Analysis row (part of the match key). |
RunType | No | Must match the parent Analysis row (part of the match key). Defaults to IN. |
ColumnNumber | Cond. | Must match the parent Analysis row when dual-column runs are present (part of the match key). |
LeachateMethod | Cond. | Picks the analysis when a leached and an unleached run otherwise share the match key. Blank matches the run with no leachate method (or the only matching run). |
DilutionFactor | Cond. | Picks the analysis when same-day serial dilutions share the match key. Blank inherits from the only matching run; when several runs match, the row must say which — the import rejects the ambiguity. |
CasNumber | No | The analyte's CAS number; one way to resolve the analyte. |
Analyte | Cond. | The Analyte (reference lookup — by name, alias, code, or CasNumber). The lab's literal value is captured automatically as the result's lab analyte name (max 200 characters), so there is no separate column. Required for all result types except TIC: for a TIC, put the tentatively-identified compound name here — it links to a catalog analyte when one matches, otherwise it is kept as the lab's label with no link. |
ResultType | Yes | Lab result type (Target / Surrogate / Internal Standard / TIC). |
DetectedResult | Yes | Detected result (Y / N). |
ReportableResult | Yes | Reportable result (Y / N). |
Basis | Yes | Basis (As Received / Dry Weight / Wet Weight / Lipid Weight). Every result row must carry a value — a defaulted basis on a dry-weight result is a reporting error, so blank cells are rejected. Wet, dry, and lipid-normalized rows for the same analyte attach to the one analysis as sibling results. For uniqueness, basis counts as dry vs lipid vs non-dry: As Received and Wet Weight describe the same uncorrected measurement, so two rows for one analyte differing only in that wording are rejected as duplicates. |
ResultValue | Cond. | The numeric result. Cannot be set together with ResultText. A detected (non-surrogate) result needs a value, text, or EMPC. |
ResultText | Cond. | A text result, max 200 characters. Cannot be set together with ResultValue. |
EmpcValue | No | Estimated Maximum Possible Concentration. Non-negative. |
Unit | Yes | The measurement unit (reference lookup). |
LabQualifier | No | The lab's qualifier flag, max 50 characters. |
MDL | No | Method Detection Limit. Non-negative. |
MRL | No | Method Reporting Limit. Non-negative; ≥ MDL. |
OtherDetectionLimit | No | Other detection limit. Non-negative; requires DetectionLimitType. |
DetectionLimitType | No | Classification for the other detection limit (reference lookup). Requires OtherDetectionLimit. |
RetentionTime | No | Non-negative. Also discriminates TIC results. |
SignificantFigures | No | Positive integer, max 20. |
QC_* | No | Quality-control columns: QC_OriginalConcentration, QC_SpikeAmount, QC_PercentRecovery, QC_RPD, QC_LCL, QC_UCL, QC_RPDControlLimit. See QC and radiochemistry. |
Rad_* | No | Radiochemistry columns: Rad_MDC, Rad_MDA, Rad_CriticalLevel, Rad_CountingError, Rad_TPU, Rad_UncertaintyBasis (Uncertainty basis, never defaulted), Rad_CSU, Rad_TracerRecovery, Rad_IsDecayCorrected. |
ResultNotes | No | Free text, max 500 characters. |
A Yes means each data row must carry a value. Required columns (headers that must exist on the sheet) are a separate, stricter check — a missing required header fails the import before any row is read. Cond. marks a value required under the stated condition. The detailed cross-field rules (date ordering, paired amount/unit, detected-vs-non-detect, QC sign constraints) are enforced at validation and catalogued in the Lab data reference.
After upload
Erde organizes the workbook into the report, sample, analysis, and result review tabs, validates every row, and flags anything that needs attention before you commit. The Analysis tab also shows a read-only summary under its grid of the batches commit will create — one line per distinct code and type, with how many analyses reference it. The summary is derived from the grid and recomputes as you edit rows; it is never editable and its lines are never staged as rows. Walk through the review flow in Import data, and see Troubleshoot and roll back imports for reading validation feedback and undoing a commit.