Help Center
piper
487 topics across 1 area — summaries, walkthroughs, and the data model behind them.
Featured concepts
ConceptAnalyteAn Analyte represents a specific chemical substance — benzene, arsenic, PFAS, nitrate — that is measured in groundwater samples and compared against regulatory thresholds.ConceptAnalyte AliasAn AnalyteAlias links an alternate name — as used by a specific lab or reporting system — to the canonical Analyte record, enabling reliable import matching.ConceptAnalyte GroupAnalyteGroup categorizes each analyte into a chemical family, making it easier to filter results, select analytical methods, and build focused threshold sets for a given contaminant class.ConceptAnalytical MethodAn AnalyticalMethod defines the standardized laboratory procedure used to detect and quantify analytes in water samples — for example EPA Method 8260B for volatile organics by GC/MS.ConceptAnalytical ResultAn AnalyticalResult records the laboratory's measured concentration of one analyte in one sample. It carries both the raw reported values (resultValue, resultText, reportedUnit) and normalized equivalents (normalizedValue, normalizedUnit) for cross-result comparison. Quality flags include isNonDetect, qualifier, detectionLimit, and reportingLimit. Each result is linked to its SamplingEvent, Analyte, analytical method, and ImportBatch.ConceptAudit ActionAuditAction classifies what happened to a record — whether it was created, updated, deleted, approved, rejected, submitted, or exported.
All topics
General
- Accepted By User ID`acceptedByUserId` on a ClientInvitation records the system-assigned user ID of the account that accepted the portal invitation.Element
- Access Granted By`grantedBy` on a TenantSiteAccess records the user who created this access grant, providing an accountability trail for site access decisions.Element
- Air Temperature (°C)`airTempC` on a FieldVisit records the ambient air temperature at the site during the visit, in degrees Celsius.Element
- Alias Name`AnalyteAlias.alias` holds the exact alternate name string — as spelled in a specific lab's report — that should resolve to the canonical Analyte.Element
- Alias Source`AnalyteAlias.source` records which laboratory or data system produces reports using this alternate analyte name.Element
- AnalyteAn Analyte represents a specific chemical substance — benzene, arsenic, PFAS, nitrate — that is measured in groundwater samples and compared against regulatory thresholds.Concept
- Analyte Abbreviation`Analyte.abbreviation` is a short label for the chemical — for example "TCE" for trichloroethylene or "As" for arsenic.Element
- Analyte AliasAn AnalyteAlias links an alternate name — as used by a specific lab or reporting system — to the canonical Analyte record, enabling reliable import matching.Concept
- Analyte Alias Analyte`AnalyteAlias.analyteId` links the alias to its canonical Analyte record, so any result imported under the alias name is attributed to the correct chemical.Element
- Analyte Alias Tenant`AnalyteAlias.tenantId` scopes the alias to a specific tenant, so each organization maintains its own lab-name mapping table independently.Element
- Analyte Created By`Analyte.createdBy` records the identifier of the user who added this analyte to the system.Element
- Analyte Default Unit`Analyte.defaultUnit` is the standard concentration unit for this chemical — typically "ug/L" for trace organics or "mg/L" for metals and nutrients.Element
- Analyte Formula`Analyte.formula` stores the molecular formula of the chemical substance — for example "C6H6" for benzene or "CHCl3" for chloroform.Element
- Analyte GroupAnalyteGroup categorizes each analyte into a chemical family, making it easier to filter results, select analytical methods, and build focused threshold sets for a given contaminant class.Concept
- Analyte Is Regulated`Analyte.isRegulated` is true when the analyte has one or more regulatory thresholds assigned, making it subject to exceedance detection during result import.Element
- Analyte Name`Analyte.name` is the primary display name for the chemical — for example "Benzene", "Trichloroethylene", or "Perfluorooctanoic Acid".Element
- Analyte Tenant`Analyte.tenantId` identifies which tenant owns this analyte definition, enforcing data isolation across organizations.Element
- Analyte Updated By`Analyte.updatedBy` records the identifier of the user who last edited this analyte's name, unit, group, or other attributes.Element
- Analytical MethodAn AnalyticalMethod defines the standardized laboratory procedure used to detect and quantify analytes in water samples — for example EPA Method 8260B for volatile organics by GC/MS.Concept
- Analytical Method Created By`AnalyticalMethod.createdBy` records which user created the analytical method definition in the system.Element
- Analytical Method Name`AnalyticalMethod.name` is the human-readable title for the method — for example "Volatile Organic Compounds by GC/MS" or "Metals by ICP-MS".Element
- Analytical Method Tenant`AnalyticalMethod.tenantId` scopes the method record to a specific tenant, allowing each organization to maintain its own method library.Element
- Analytical Method Updated By`AnalyticalMethod.updatedBy` records the last user to edit the analytical method's name, agency, description, or other attributes.Element
- Analytical ResultAn AnalyticalResult records the laboratory's measured concentration of one analyte in one sample. It carries both the raw reported values (resultValue, resultText, reportedUnit) and normalized equivalents (normalizedValue, normalizedUnit) for cross-result comparison. Quality flags include isNonDetect, qualifier, detectionLimit, and reportingLimit. Each result is linked to its SamplingEvent, Analyte, analytical method, and ImportBatch.Concept
- Analytical Result Analysis DateThe `analysisDate` on an AnalyticalResult records when the laboratory instrument actually measured the prepared sample.Element
- Analytical Result AnalyteThe `analyteId` on an AnalyticalResult identifies which chemical compound or constituent was measured.Element
- Analytical Result Created ByThe `createdBy` on an AnalyticalResult records which user was responsible for committing the result into Piper's database.Element
- Analytical Result Detection LimitThe `detectionLimit` on an AnalyticalResult is the minimum concentration the analytical method can distinguish from background noise.Element
- Analytical Result Dilution FactorThe `dilutionFactor` on an AnalyticalResult records how much the sample was diluted by the laboratory before the instrument analysis was performed.Element
- Analytical Result Import BatchThe `importBatchId` on an AnalyticalResult links the measurement back to the ImportBatch that was committed to create it.Element
- Analytical Result Is Non-DetectThe `isNonDetect` flag on an AnalyticalResult indicates that the laboratory did not detect the analyte at or above the analytical detection limit for the sample.Element
- Analytical Result Lab Batch IDThe `labBatchId` on an AnalyticalResult identifies the instrument analysis batch within which the laboratory processed this sample alongside its QC samples.Element
- Analytical Result Lab Sample IDThe `labSampleId` on an AnalyticalResult is the laboratory's own sample tracking number for the physical sample that produced this measurement.Element
- Analytical Result MethodThe `methodId` on an AnalyticalResult identifies the analytical method the laboratory used to quantify the analyte concentration.Element
- Analytical Result Normalized UnitThe `normalizedUnit` on an AnalyticalResult specifies the unit in which normalizedValue is expressed.Element
- Analytical Result Normalized ValueThe `normalizedValue` on an AnalyticalResult is the concentration expressed in a standard unit after unit conversion from the lab's original reportedUnit.Element
- Analytical Result Prep DateThe `prepDate` on an AnalyticalResult records when the laboratory performed sample preparation steps before running the analysis.Element
- Analytical Result QualifierThe `qualifier` on an AnalyticalResult stores the lab data qualifier code that the laboratory assigned to indicate special handling or uncertainty.Element
- Analytical Result Reported UnitThe `reportedUnit` on an AnalyticalResult preserves the original unit of measure from the laboratory's data file.Element
- Analytical Result Reporting LimitThe `reportingLimit` on an AnalyticalResult is the lowest concentration the laboratory will report as a quantified numerical value rather than a non-detect.Element
- Analytical Result Sampling EventThe `samplingEventId` on an AnalyticalResult links the measurement back to the specific field sampling visit where the sample was collected.Element
- Analytical Result TenantThe `tenantId` on an AnalyticalResult scopes the measurement record to a single organization.Element
- Analytical Result TextThe `resultText` on an AnalyticalResult preserves the original text string for the result value as it appeared in the laboratory's data file before parsing.Element
- Analytical Result ValueThe `resultValue` on an AnalyticalResult is the numeric concentration the laboratory measured and reported, expressed in the lab's original reporting unit.Element
- Approved At`ReportVersion.approvedAt` records the exact timestamp when this version was approved, establishing the official approval event in the report's audit trail.Element
- Approved By`ReportVersion.approvedBy` records who signed off on this rendered version, converting it from a draft to an approved document ready for regulatory submittal.Element
- Audit ActionAuditAction classifies what happened to a record — whether it was created, updated, deleted, approved, rejected, submitted, or exported.Concept
- Audit Entity TypeAuditEntityType identifies which model was affected by an audited action — for example, an AnalyticalResult that was approved or a ReportPackage that was submitted.Concept
- Audit LogAn AuditLog entry captures a single data change event: the `userId` who acted, the `action` performed, the `entityType` and `entityId` affected, the `before` and `after` state snapshots, and an optional `reason`.Concept
- Audit Log After State`after` on an AuditLog is a JSON object capturing the full state of the record immediately after the change was applied.Element
- Audit Log Before State`before` on an AuditLog is a JSON object capturing the full state of the record immediately before the change was applied.Element
- Audit Log Entity ID`entityId` on an AuditLog is the primary key of the specific record that was created, updated, or deleted.Element
- Audit Log Reason`reason` on an AuditLog is an optional free-text explanation the user provided when making the change.Element
- Audit Log Tenant ID`tenantId` on an AuditLog scopes the change record to the tenant organization that owns the affected data.Element
- Audit Log User`userId` on an AuditLog identifies which user performed the action that generated this audit record.Element
- Borehole Depth`boreholeDepth` on a MonitoringWell records the depth of the drilled borehole before the well casing was installed, which is often deeper than totalDepth.Element
- Borehole Diameter`boreholeDiameter` on a WellConstruction records the diameter of the drilled hole in which the well casing, filter pack, and annular seal are installed.Element
- Casing Bottom Depth`WellConstruction.casingBottomDepth` marks the depth at which the solid casing terminates, which should align closely with the screenTopDepth.Element
- Casing Diameter`WellConstruction.casingDiameter` is the inner diameter of the well casing, a fundamental parameter for calculating well volume and selecting sampling equipment.Element
- Casing MaterialCasingMaterial identifies what the well casing is made of, which affects chemical compatibility, longevity, and suitability for specific analyte groups.Concept
- Casing Top Depth`WellConstruction.casingTopDepth` records the depth at which the solid (non-screened) casing section starts, usually at or just below the surface completion.Element
- CAS Number`Analyte.casNumber` is the Chemical Abstracts Service registry number — the universal identifier for a chemical compound across labs, databases, and regulatory lists.Element
- Chain of CustodyA ChainOfCustody record documents the full custody trail of samples collected at a site — who collected them, how they were shipped, and the condition in which the lab received them.Concept
- Chain-of-Custody RecordA CoCRecord is the per-sample-location line item within a ChainOfCustody, recording which well was sampled, how it was purged and collected, and what matrix was targeted. Each CoCRecord can have multiple SampleBottle records describing the containers dispatched.Concept
- Chain-of-Custody Site ID`ChainOfCustody.siteId` links the CoC to the monitoring site where samples were collected.Element
- Chain of Custody StatusCoCStatus tracks where a chain-of-custody document stands in its lifecycle, from Draft through InField collection, Shipped to the lab, Received, and finally Closed.Concept
- Chain-of-Custody Tenant ID`ChainOfCustody.tenantId` identifies which tenant organization owns this CoC document, ensuring data is isolated between organizations.Element
- Chart AnnotationA ChartAnnotation places a visible event marker on a site's concentration trend charts at a specific annotationDate. It stores a label, description, color, and category so compliance staff can visually flag events such as remedial actions, site inspections, regulatory orders, or equipment changes that may explain observed concentration trends.Concept
- Chart Annotation CategoryThe `category` on a ChartAnnotation groups the event into a classification that can be used for filtering and visual differentiation on charts.Element
- Chart Annotation ColorThe `color` on a ChartAnnotation controls the visual color of the event marker rendered on the concentration trend chart.Element
- Chart Annotation Created ByThe `createdBy` on a ChartAnnotation records which user added the event marker to the site's trend charts.Element
- Chart Annotation DateThe `annotationDate` on a ChartAnnotation sets the position of the event marker on the time axis of the site's concentration trend charts.Element
- Chart Annotation DescriptionThe `description` on a ChartAnnotation provides a fuller explanation of the event that is shown when a user interacts with the annotation marker on the chart.Element
- Chart Annotation LabelThe `label` on a ChartAnnotation is the concise text that appears directly on the trend chart at the annotationDate marker.Element
- Chart Annotation SiteThe `siteId` on a ChartAnnotation links the event marker to a specific monitoring site.Element
- Chart Annotation TenantThe `tenantId` on a ChartAnnotation scopes the event marker to a single organization so annotations are never shared between tenants.Element
- Chart Annotation Updated ByThe `updatedBy` on a ChartAnnotation records which user most recently modified the annotation's label, description, color, category, or annotationDate.Element
- Client InvitationA ClientInvitation is an invitation sent to an external user (identified by `email`) to access a specific site via the client portal, with a defined `role` and an `expiresAt` deadline.Concept
- Client Invitation Tenant ID`tenantId` on a ClientInvitation identifies the organization that issued the portal invitation.Element
- CoC Collection Date`ChainOfCustody.collectionDate` records when field sampling occurred — the anchor date used to calculate holding-time compliance for all samples in the shipment.Element
- CoC Created By`ChainOfCustody.createdBy` records the Piper user who initially created the digital CoC record, providing an audit trail for data entry accountability.Element
- CoC Notes`ChainOfCustody.notes` is a free-text field for the sampling team to record any observations or circumstances that should accompany the CoC record.Element
- CoC Number`ChainOfCustody.cocNumber` is the alphanumeric document number assigned to the CoC form, matching the number on the physical paperwork sent with the cooler to the lab.Element
- CoC Project Name`ChainOfCustody.projectName` captures the project or program name as it appears on the CoC paperwork, linking the shipment to a named remediation or monitoring project.Element
- CoC Record — CoC ID`CoCRecord.cocId` is the foreign key that links this per-well sample record to its parent ChainOfCustody shipment document.Element
- CoC Record — Collected At`CoCRecord.collectedAt` records the precise timestamp when the sample was drawn from the well, providing a more granular collection time than the parent CoC's collectionDate.Element
- CoC Record Notes`CoCRecord.notes` captures well-level observations that should accompany this sample's custody record, separate from the overall CoC notes.Element
- CoC Record — Sample ID`CoCRecord.sampleId` stores the field sample identifier written on the bottle labels and CoC form for this well's sample, used to match physical samples to lab results.Element
- CoC Record — Sampling Event ID`CoCRecord.samplingEventId` links this CoC line item to the broader sampling event that organized the field effort.Element
- CoC Record Tenant ID`CoCRecord.tenantId` scopes this record to the owning organization, ensuring that per-well CoC data is isolated between tenants.Element
- CoC Record — Well ID`CoCRecord.wellId` identifies which monitoring well was sampled for this line item on the chain-of-custody form.Element
- CoC Updated By`ChainOfCustody.updatedBy` records who last edited the CoC record, supporting data integrity auditing when records are revised after initial entry.Element
- Collection Method`CoCRecord.collectionMethod` records the specific technique — such as low-flow or bailer — used to draw groundwater from the well for this sample.Element
- Collector Name`CoCRecord.collectorName` identifies who physically collected the sample from the well, which may differ from the overall samplerName on the parent ChainOfCustody when a crew splits across wells.Element
- Conductivity`conductivity` on a FieldMeasurement records the specific electrical conductance of the groundwater at this well, in units specified by `conductivityUnit`.Element
- Conductivity Unit`conductivityUnit` on a FieldMeasurement specifies the unit in which `conductivity` was measured (e.g., uS/cm or mS/cm).Element
- Container Count`SampleBottle.containerCount` records how many containers of the specified containerType were filled for this analyte group during sample collection.Element
- Container Type`SampleBottle.containerType` describes the physical container used to collect and transport this sample, which must match the analytical method's requirements.Element
- Conversion Factor`UnitConversion.factor` is the Float multiplier used to convert a concentration from fromUnit to toUnit — for example 0.001 to convert ug/L to mg/L.Element
- Conversion Matrix`UnitConversion.matrix` scopes the conversion rule to a specific environmental medium — for example "groundwater", "soil", or "air" — because unit relationships can differ by matrix.Element
- Cooler Temperature (°C)`ChainOfCustody.coolerTempC` records the cooler temperature verified by the lab when they opened the shipment, confirming proper cold-chain maintenance during transport.Element
- Cumulative Gallons`cumulativeGallons` on a PurgeInterval records the running total of water removed from the well at the moment this stabilization check was taken.Element
- Custom ReportA CustomReport allows users to design a flexible, ad hoc report layout for a site using a blocks-based editor. Unlike the structured ReportPackage used for regulatory submittals, a CustomReport is for generating internal summaries, client presentations, or one-off data exports with customized page size and orientation.Concept
- Custom Report Created By`CustomReport.createdBy` records who built the custom report layout, supporting accountability and template ownership within the team.Element
- Custom Report Description`CustomReport.description` is an optional summary of what the custom report covers, helping team members understand the layout's purpose without opening it.Element
- Custom Report Site ID`CustomReport.siteId` links the custom report to a specific monitoring site, scoping all data blocks in the layout to that site's monitoring network.Element
- Custom Report Tenant ID`CustomReport.tenantId` scopes the report layout and its generated PDFs to the owning organization.Element
- Custom Report Title`CustomReport.title` is the display name for the custom report layout and appears as the report heading in the generated PDF.Element
- Custom Report Updated By`CustomReport.updatedBy` records who last changed the custom report layout — useful for tracking iterative improvements and troubleshooting unexpected PDF changes.Element
- Depth to Water (ft)`depthToWaterFt` on a FieldMeasurement is the primary field water-level measurement, recorded in feet from the top of the well casing to the water surface.Element
- Dissolved Oxygen`dissolvedOxygen` on a FieldMeasurement records the dissolved oxygen (DO) concentration in the groundwater, in the unit specified by `doUnit`.Element
- Dissolved Oxygen Unit`doUnit` on a FieldMeasurement specifies the unit in which `dissolvedOxygen` was measured (e.g., mg/L or % saturation).Element
- Drilling Method`drillingMethod` on a WellConstruction records the drilling technique — such as hollow-stem auger or rotary — used when the well was installed.Element
- ExceedanceAn Exceedance is created automatically when an AnalyticalResult's concentration breaches a ThresholdValue. It captures the resultConcentration and resultUnit alongside the thresholdConcentration and thresholdUnit from the ThresholdValue, and computes an exceedanceRatio to show how far above (or below) the limit the result was. It also records the siteId, wellId, analyteId, sampleDate, and the timestamp when it was detectedAt.Concept
- Exceedance AnalyteThe `analyteId` on an Exceedance identifies which chemical compound was detected above the regulatory threshold.Element
- Exceedance Detected AtThe `detectedAt` on an Exceedance records the timestamp when Piper generated the exceedance record after evaluating an AnalyticalResult against a ThresholdValue.Element
- Exceedance Is Non-DetectThe `isNonDetect` flag on an Exceedance indicates that the underlying AnalyticalResult was a non-detect whose detectionLimit was itself above the regulatory thresholdConcentration.Element
- Exceedance RatioThe `exceedanceRatio` on an Exceedance is the numeric factor by which the resultConcentration exceeded the thresholdConcentration.Element
- Exceedance ResultThe `resultId` on an Exceedance links the compliance violation back to the specific AnalyticalResult whose concentration exceeded the threshold.Element
- Exceedance Result ConcentrationThe `resultConcentration` on an Exceedance is the normalized analyte concentration from the AnalyticalResult that triggered the violation.Element
- Exceedance Result UnitThe `resultUnit` on an Exceedance specifies the unit in which the resultConcentration is expressed.Element
- Exceedance Sample DateThe `sampleDate` on an Exceedance records when the groundwater sample was collected that produced the concentration violation.Element
- Exceedance SiteThe `siteId` on an Exceedance identifies the remediation or monitoring site where the concentration violation occurred.Element
- Exceedance TenantThe `tenantId` on an Exceedance scopes the compliance violation record to a single organization.Element
- Exceedance Threshold ConcentrationThe `thresholdConcentration` on an Exceedance is a snapshot of the ThresholdValue's numeric limit at the moment exceedance detection ran.Element
- Exceedance Threshold SetThe `thresholdSetId` on an Exceedance identifies which ThresholdSet the violated limit belongs to.Element
- Exceedance Threshold UnitThe `thresholdUnit` on an Exceedance captures the unit of the regulatory limit at the time of detection.Element
- Exceedance Threshold ValueThe `thresholdValueId` on an Exceedance identifies the exact ThresholdValue record whose concentration limit was breached.Element
- Exceedance TypeExceedanceType distinguishes between a result that definitively exceeded a regulatory threshold and one where the method detection limit itself is already above the threshold.Concept
- Exceedance WellThe `wellId` on an Exceedance identifies which monitoring well produced the result that violated the regulatory standard.Element
- Field MeasurementA FieldMeasurement captures all per-well field readings from a single monitoring event: water level (`depthToWaterFt`, `waterLevelElevationFt`), water quality parameters (`ph`, `conductivity`, `temperatureC`, `dissolvedOxygen`, `orp`, `turbidity`), and GPS coordinates.Concept
- Field Measurement Created By`createdBy` on a FieldMeasurement identifies the system user who entered this per-well reading into piper.Element
- Field Measurement Notes`notes` on a FieldMeasurement captures well-specific observations the technician noted while taking this reading.Element
- Field Measurement Tenant ID`tenantId` on a FieldMeasurement scopes this per-well field reading to the owning tenant.Element
- Field Measurement Visit`visitId` on a FieldMeasurement is the foreign key connecting this per-well reading to the parent FieldVisit event.Element
- Field Measurement Well`wellId` on a FieldMeasurement identifies which monitoring well the field parameters and water level were collected from.Element
- Field VisitA FieldVisit is the event record for a technician's trip to a monitoring site — capturing visitDate, technician name, weather, and air temperature. Each FieldVisit owns a set of FieldMeasurement records, one per well visited.Concept
- Field Visit Created By`createdBy` on a FieldVisit records the system user who entered this field visit into piper.Element
- Field Visit Notes`notes` on a FieldVisit is a free-text field for any overall site-level observations the technician made during the visit.Element
- Field Visit Site ID`FieldVisit.siteId` links the visit to the specific monitoring site, scoping the visit's measurements to that site's well network.Element
- Field Visit Tenant ID`FieldVisit.tenantId` scopes the visit record and all its FieldMeasurements to the owning organization.Element
- Field Visit Updated By`updatedBy` on a FieldVisit records who last edited the visit header information.Element
- Figure Analyte IDs (JSON)`ReportFigure.analyteIdsJson` specifies which chemical analytes are included in this chart, filtering the data to only the compounds of interest.Element
- Figure Included`ReportFigure.included` is a boolean that controls whether the figure is generated and inserted into the next ReportVersion PDF, without deleting the figure definition.Element
- Figure Manifest (JSON)`ReportVersion.figureManifestJson` stores the list of figures included in the rendered PDF, their assigned figure numbers, titles, and the pages they appear on.Element
- Figure Source Parameters (JSON)`ReportFigure.sourceParamsJson` stores chart-specific configuration as a JSON object — such as axis ranges, date filters, normalization options, or display preferences — used by the rendering engine when generating the figure.Element
- Figure Well IDs (JSON)`ReportFigure.wellIdsJson` specifies which monitoring wells are included in this chart or map, scoping the data query to only the selected wells.Element
- Filter Pack Bottom Depth`WellConstruction.filterPackBottom` marks the deepest extent of the granular filter pack material around the well screen.Element
- Filter Pack Top Depth`WellConstruction.filterPackTop` marks the shallowest depth at which the granular filter pack material starts around the well screen.Element
- Filter Pack Type`WellConstruction.filterPackType` records the type of granular material (usually coarse sand or gravel) placed around the screen to allow water to enter while excluding fine sediment.Element
- GPS Accuracy (m)`gpsAccuracyM` on a FieldMeasurement records the estimated horizontal error of the GPS fix, in meters.Element
- GPS Distance to Well (m)`gpsDistanceM` on a FieldMeasurement is the computed distance between where the technician stood when recording and the well's registered coordinates.Element
- GPS Flagged`gpsFlagged` on a FieldMeasurement is set to true when `gpsDistanceM` exceeds the acceptable proximity threshold, signaling a potential location error.Element
- GPS Latitude`gpsLatitude` on a FieldMeasurement records the GPS latitude coordinate at the time the field reading was taken.Element
- GPS Longitude`gpsLongitude` on a FieldMeasurement records the GPS longitude coordinate at the time the field reading was taken.Element
- Ground Surface Elevation`groundSurfaceElevation` on a MonitoringWell records the surveyed elevation of the ground at the well, in feet or meters above a datum such as NAVD88.Element
- Holding Days`HoldingTimeViolation.holdingDays` is the calculated count of days from collectionDate to analysisDate — the actual holding time for the sample.Element
- Holding-Time ViolationA HoldingTimeViolation record is created automatically when Piper detects that the time between sample collection and laboratory analysis exceeded the method's maximum holding limit. The violation quantifies how many days over the limit the analysis occurred.Concept
- Holding-Time Violation — Analysis Date`HoldingTimeViolation.analysisDate` is when the laboratory actually ran the analysis, marking the end of the custody period and the point where the holding-time violation is determined.Element
- Holding-Time Violation — Analyte ID`HoldingTimeViolation.analyteId` identifies which chemical analyte's result was analyzed past its method's maximum holding time.Element
- Holding-Time Violation — CoC ID`HoldingTimeViolation.cocId` links the holding-time violation back to the chain-of-custody shipment that contained the affected sample.Element
- Holding-Time Violation — Collection Date`HoldingTimeViolation.collectionDate` records when the sample was collected, establishing the beginning of the holding-time window for this violation.Element
- Holding-Time Violation — Method ID`HoldingTimeViolation.methodId` identifies the analytical method that specifies the holding-time limit that was violated.Element
- Holding-Time Violation — Result ID`HoldingTimeViolation.resultId` links the violation to the specific AnalyticalResult that was analyzed past its method's holding-time limit.Element
- Holding-Time Violation — Sampling Event ID`HoldingTimeViolation.samplingEventId` links the violation to the sampling event during which the affected sample was collected.Element
- Holding-Time Violation — Site ID`HoldingTimeViolation.siteId` identifies which site's monitoring data is affected by this holding-time violation.Element
- Holding-Time Violation Tenant ID`HoldingTimeViolation.tenantId` scopes the violation record to the owning organization, keeping each tenant's compliance issues private.Element
- Holding-Time Violation — Well ID`HoldingTimeViolation.wellId` identifies which monitoring well's sample is affected by this holding-time violation, enabling well-level data quality review.Element
- Import BatchAn ImportBatch represents one lab report file uploaded to Piper. It tracks the file's origin (fileName, fileType, fileSize, labName, labReportId), how it was parsed (extractionMethod, extractionConfidence, profileId, columnMapping), row-level statistics (totalRows, validRows, warningRows, errorRows), and lifecycle timestamps (uploadedAt, parsedAt, committedAt).Concept
- Import Batch Column MappingThe `columnMapping` on an ImportBatch is a JSON field that can hold a per-batch column mapping override, supplementing or replacing the profile's mapping for this specific file.Element
- Import Batch Committed AtThe `committedAt` on an ImportBatch records when a compliance user approved the batch and its rows were written as AnalyticalResults.Element
- Import Batch Created ByThe `createdBy` on an ImportBatch records the user identifier of the person who initiated the upload.Element
- Import Batch Error RowsThe `errorRows` on an ImportBatch counts rows where validation found critical problems that block those rows from being committed as AnalyticalResults.Element
- Import Batch Extraction ConfidenceThe `extractionConfidence` on an ImportBatch is a numeric score representing how accurately Piper believes it read the data from the uploaded file.Element
- Import Batch Extraction MethodThe `extractionMethod` on an ImportBatch describes the technique used to read data from the uploaded lab file.Element
- Import Batch File NameThe `fileName` on an ImportBatch preserves the original filename of the lab data file as it was uploaded.Element
- Import Batch File PathThe `filePath` on an ImportBatch is the internal storage reference used by Piper to retrieve the original uploaded file.Element
- Import Batch File SizeThe `fileSize` on an ImportBatch records the byte size of the uploaded lab data file at the time of upload.Element
- Import Batch File TypeThe `fileType` on an ImportBatch records the format of the uploaded lab data file so Piper knows which parser to apply.Element
- Import Batch Lab NameThe `labName` on an ImportBatch records which analytical laboratory submitted the data in this file.Element
- Import Batch Lab Report IDThe `labReportId` on an ImportBatch stores the reference number the laboratory assigned to the report in their own system.Element
- Import Batch OCR Scan IDThe `ocrScanId` on an ImportBatch links back to the OCR scan job when the file was extracted using optical character recognition.Element
- Import Batch Parsed AtThe `parsedAt` on an ImportBatch records when the file-parsing step finished and parsedData became available for validation.Element
- Import Batch Parsed DataThe `parsedData` on an ImportBatch holds the structured JSON output of the file parsing step, used internally during validation before rows become AnalyticalResults.Element
- Import Batch Profile IDThe `profileId` on an ImportBatch references the ImportMappingProfile whose columnMapping and options were applied when parsing the file.Element
- Import Batch SiteThe `siteId` on an ImportBatch links the uploaded lab file to a specific remediation or monitoring site.Element
- Import Batch TenantThe `tenantId` on an ImportBatch scopes the batch and all its resulting analytical data to a single organization.Element
- Import Batch Total RowsThe `totalRows` on an ImportBatch is a count of all data rows Piper found in the file after parsing the headers.Element
- Import Batch Uploaded AtThe `uploadedAt` on an ImportBatch records the timestamp when the file was received and stored.Element
- Import Batch Valid RowsThe `validRows` on an ImportBatch counts the data rows that parsed cleanly and raised no ImportValidationIssues.Element
- Import Batch Warning RowsThe `warningRows` on an ImportBatch counts rows where Piper parsed the data but flagged at least one ImportValidationIssue at warning severity.Element
- Import Mapping ProfileAn ImportMappingProfile stores the column mapping and parsing options needed to read a specific lab's CSV or spreadsheet format. Once created, it can be reused across every future import from that lab.Concept
- Import Mapping Profile Column MappingThe `columnMapping` on an ImportMappingProfile is a JSON document that specifies which column in the lab's file corresponds to each Piper field.Element
- Import Mapping Profile Created ByThe `createdBy` on an ImportMappingProfile records the identifier of the user who first saved the profile.Element
- Import Mapping Profile Header FingerprintThe `headerFingerprint` on an ImportMappingProfile is a computed signature of the column headers in the lab report format the profile covers.Element
- Import Mapping Profile Lab NameThe `labName` on an ImportMappingProfile identifies which analytical laboratory's report format the profile describes.Element
- Import Mapping Profile NameThe `name` on an ImportMappingProfile is the display label staff see when selecting a profile during an import.Element
- Import Mapping Profile OptionsThe `options` on an ImportMappingProfile is a JSON bag of additional parsing configuration beyond the column mapping itself.Element
- Import Mapping Profile TenantThe `tenantId` on an ImportMappingProfile scopes the profile to a single organization so that mapping configurations are never shared across tenants.Element
- Import Mapping Profile Updated ByThe `updatedBy` on an ImportMappingProfile records which user last saved changes to the profile's columnMapping or options.Element
- Import Mapping Profile Usage CountThe `usageCount` on an ImportMappingProfile is an integer that increments each time an ImportBatch is processed using this profile.Element
- Import StatusImportStatus tracks where an import batch is in its lifecycle, so staff know whether lab results are still being processed, need human review, or are fully committed to the database.Concept
- Import Validation IssueAn ImportValidationIssue is a record of a specific problem Piper found on a row within an ImportBatch during parsing and validation. It captures the rowIndex, field, original value, severity, issueType, a human-readable message, and an optional suggestion or overrideValue to resolve the issue before committing the batch.Concept
- Import Validation Issue BatchThe `importBatchId` on an ImportValidationIssue links the issue to the specific ImportBatch whose file produced the problematic row.Element
- Import Validation Issue FieldThe `field` on an ImportValidationIssue identifies which data field in the row triggered the validation problem.Element
- Import Validation Issue MessageThe `message` on an ImportValidationIssue explains in human-readable terms why the row's value failed validation.Element
- Import Validation Issue Override ValueThe `overrideValue` on an ImportValidationIssue is the replacement value a compliance reviewer explicitly provides to fix the invalid data in the row.Element
- Import Validation Issue Resolved AtThe `resolvedAt` on an ImportValidationIssue records the timestamp when a reviewer marked the issue resolved.Element
- Import Validation Issue Resolved ByThe `resolvedBy` on an ImportValidationIssue records the identifier of the user who reviewed and closed out the validation problem.Element
- Import Validation Issue Row IndexThe `rowIndex` on an ImportValidationIssue indicates which row in the uploaded lab file contains the problem.Element
- Import Validation Issue SuggestionThe `suggestion` on an ImportValidationIssue is Piper's recommended fix for the problem found in the row's data.Element
- Import Validation Issue ValueThe `value` on an ImportValidationIssue preserves the original cell content from the lab file that Piper could not process or validate.Element
- Interval Conductivity`conductivity` on a PurgeInterval records the specific electrical conductance of the groundwater at the moment of this check during the purge.Element
- Interval Dissolved Oxygen`dissolvedOxygen` on a PurgeInterval records the dissolved oxygen concentration at each stabilization check during the well purge.Element
- Interval ORP`orp` on a PurgeInterval records the oxidation-reduction potential at the moment of this stabilization check.Element
- Interval pH`ph` on a PurgeInterval records the pH reading at the moment of this stabilization check during the well purge.Element
- Interval Recorded At`recordedAt` on a PurgeInterval timestamps each individual stabilization check during the purge progression.Element
- Interval Turbidity`turbidity` on a PurgeInterval records the cloudiness of the groundwater at this stabilization check during the purge.Element
- Interval Water Temperature (°C)`temperatureC` on a PurgeInterval records the in-situ groundwater temperature at the moment of this stabilization check.Element
- Invitation Accepted At`acceptedAt` on a ClientInvitation records when the external user clicked through and activated their portal access.Element
- Invitation Created By`createdBy` on a ClientInvitation records which staff member issued the portal access invitation to the external user.Element
- Invitation Email`email` on a ClientInvitation is the address the invitation is delivered to, and the identity used when the recipient accepts.Element
- Invitation Expires At`expiresAt` on a ClientInvitation sets the deadline by which the recipient must accept the invitation.Element
- Invitation Site`siteId` on a ClientInvitation scopes the portal invitation to a specific monitoring site.Element
- Invitation StatusAn invitation moves through statuses as it is sent, acted on, or cancelled. The status determines whether a recipient can still accept access to a site.Concept
- Issue ResolutionIssueResolution records the outcome of a flagged data issue — whether it was fixed automatically, fixed by a user, accepted as-is, or rejected.Concept
- Issue SeverityIssueSeverity classifies how critical a flagged import issue is, guiding reviewers on whether they must resolve it before committing data.Concept
- Issue TypeIssueType categorizes the exact nature of a problem found in an imported lab report, from missing well identifiers to unrecognized analyte names to holding time violations.Concept
- Lab Contact`ChainOfCustody.labContact` stores the name or contact details of the specific laboratory representative assigned to handle this CoC shipment.Element
- Lab Name`ChainOfCustody.labName` records which laboratory performed the chemical analysis on the samples in this shipment.Element
- Lab Sample IDs (JSON)`ChainOfCustody.labSampleIdsJson` stores the laboratory's internal sample ID numbers as a JSON array, providing the cross-reference needed to match lab results to field samples.Element
- Last Generated At`CustomReport.lastGeneratedAt` records when the PDF stored in lastPdfBytes was produced, helping you know whether the download reflects current data.Element
- Last PDF (Bytes)`CustomReport.lastPdfBytes` stores the raw binary data of the most recent PDF render, available for immediate download without re-generating.Element
- Limit Days`HoldingTimeViolation.limitDays` records the method's maximum allowable holding time in days, against which the actual holdingDays is compared to determine if a violation occurred.Element
- Measured At`measuredAt` on a FieldMeasurement timestamps the exact moment the field technician took the water level and parameter readings at this well.Element
- Method Agency`AnalyticalMethod.agency` identifies the regulatory body or standards organization that issued the method — for example "EPA", "ASTM", or "APHA".Element
- Method Description`AnalyticalMethod.description` is an optional narrative explaining the analytical procedure's scope, detection principles, or applicable analyte groups.Element
- Method ID`AnalyticalMethod.methodId` is the official alphanumeric designation of the laboratory procedure — the string printed on lab reports and referenced in regulatory submissions.Element
- Monitoring WellA MonitoringWell represents a physical well installed at a site. It is the central hub for groundwater sampling, field measurements, and chain-of-custody records.Concept
- Monitoring Well Site`siteId` on a MonitoringWell links the well to its parent contaminated site, grouping all wells at that location for sampling and reporting.Element
- Monitoring Well Tenant`tenantId` on a MonitoringWell identifies which tenant organization owns this well record, enforcing data isolation between organizations sharing the platform.Element
- ORP (Oxidation-Reduction Potential)`orp` on a FieldMeasurement records the oxidation-reduction potential of the groundwater in millivolts, indicating the redox environment of the aquifer.Element
- Over By Days`HoldingTimeViolation.overByDays` is the margin of the holding-time violation — holdingDays minus limitDays — showing how far past the deadline the analysis occurred.Element
- Page Orientation`CustomReport.orientation` sets whether pages are rendered in portrait (tall) or landscape (wide) format, affecting how content is laid out across the page.Element
- Page Size`CustomReport.pageSize` specifies the paper dimensions used when rendering the PDF, ensuring the output matches the intended printing or display format.Element
- PDF Bytes`ReportVersion.pdfBytes` stores the raw binary data of the generated PDF file, enabling download and archival of the rendered compliance report.Element
- PDF Page Count`ReportVersion.pdfPageCount` records how many pages the generated PDF contains, providing a quick size indicator without opening the file.Element
- pH`ph` on a FieldMeasurement is the field-measured pH of the groundwater at this well, recorded during purging or sampling.Element
- Prepared By`ReportPackage.preparedBy` records the name of the consulting firm, agency, or individual who authored the report.Element
- Prepared For`ReportPackage.preparedFor` records the name of the client, property owner, or regulatory agency that is the intended recipient of this compliance report.Element
- Preservative`SampleBottle.preservative` records the chemical preservative added to the container — such as hydrochloric acid or sodium thiosulfate — that stabilizes the sample until laboratory analysis.Element
- Pump Rate (GPM)`pumpRateGpm` on a PurgeLog records the flow rate at which the pump extracted water from the well during the purge.Element
- Purge Ended At`endedAt` on a PurgeLog records when the purge pump was turned off, marking the end of the purge event.Element
- Purge IntervalA PurgeInterval stores a single stabilization check during a purge: the `recordedAt` timestamp, `cumulativeGallons` pumped to that point, and field parameters (pH, conductivity, temperatureC, dissolvedOxygen, ORP, turbidity).Concept
- Purge Interval Log`purgeLogId` on a PurgeInterval is the foreign key connecting this individual parameter check to the parent PurgeLog.Element
- Purge Interval Notes`notes` on a PurgeInterval captures any observations the technician noted at this specific stabilization check during the purge.Element
- Purge Interval Tenant ID`tenantId` on a PurgeInterval scopes this individual purge stabilization check to the owning tenant.Element
- Purge LogA PurgeLog documents the well purge event associated with a FieldMeasurement, capturing `pumpRateGpm`, start and end times, `totalVolumeGallons`, `wellVolumeGallons`, `volumesPurged`, and whether stabilization was achieved.Concept
- Purge Log Measurement`measurementId` on a PurgeLog is the foreign key connecting the purge event to the FieldMeasurement it preceded.Element
- Purge Log Tenant ID`tenantId` on a PurgeLog scopes this purge event record to the owning tenant organization.Element
- Purge Method`CoCRecord.purgeMethod` documents how stagnant water was removed from the well casing before the representative groundwater sample was drawn.Element
- Purge Started At`startedAt` on a PurgeLog records when the purge pump was turned on at the monitoring well.Element
- Receipt Condition`ChainOfCustody.receiptCondition` captures the lab's assessment of the cooler's condition when it arrived — whether seals were intact, bottles were unbroken, and temperature was acceptable.Element
- Receipt Notes`ChainOfCustody.receiptNotes` stores any additional remarks the lab recorded when accepting the cooler — deviations, observations, or special handling notes.Element
- Received At`ChainOfCustody.receivedAt` records when the laboratory officially accepted the sample cooler, establishing the end of the transit phase in the custody chain.Element
- Received By`ChainOfCustody.receivedBy` records the name of the lab employee who signed for and accepted the cooler, completing the formal custody transfer.Element
- Regulatory End Date`SiteRegulatory.endDate` records when the site's formal regulatory program ended or is expected to end.Element
- Regulatory Notes`SiteRegulatory.notes` holds unstructured text about the site's regulatory history or obligations that do not fit into structured fields.Element
- Regulatory ProgramThe regulatory program identifies which legal framework applies to a site's investigation and remediation obligations.Concept
- Regulatory Start Date`SiteRegulatory.startDate` records when the site came under the jurisdiction of the regulatory program.Element
- Regulatory ThresholdA RegulatoryThreshold defines a concentration limit for a specific analyte at a specific site. It records the thresholdValue, thresholdUnit, regulatory source, effectiveDate, comparison direction, and whether it is currently active. When an AnalyticalResult exceeds (or falls below, depending on direction) the threshold, an Exceedance is generated.Concept
- Regulatory Threshold AnalyteThe `analyteId` on a RegulatoryThreshold links the concentration limit to a specific chemical constituent.Element
- Regulatory Threshold Created ByThe `createdBy` on a RegulatoryThreshold records which user entered the concentration limit into Piper.Element
- Regulatory Threshold Effective DateThe `effectiveDate` on a RegulatoryThreshold records when the regulatory limit came into effect and should begin being applied to AnalyticalResults.Element
- Regulatory Threshold Is ActiveThe `isActive` flag on a RegulatoryThreshold determines whether the limit is included in exceedance checks against new AnalyticalResults.Element
- Regulatory Threshold NameThe `name` on a RegulatoryThreshold is a human-readable label identifying the limit in the compliance interface.Element
- Regulatory Threshold SiteThe `siteId` on a RegulatoryThreshold restricts the limit to a specific monitoring site.Element
- Regulatory Threshold SourceThe `source` on a RegulatoryThreshold records the regulatory document, permit section, or authority that established the concentration limit.Element
- Regulatory Threshold TenantThe `tenantId` on a RegulatoryThreshold scopes the limit to a single organization, ensuring threshold configurations are not shared across tenants.Element
- Regulatory Threshold UnitThe `thresholdUnit` on a RegulatoryThreshold specifies what unit the thresholdValue is expressed in.Element
- Regulatory Threshold ValueThe `thresholdValue` on a RegulatoryThreshold is the numeric concentration limit that analytical results are compared against.Element
- Report Blocks (JSON)`CustomReport.blocksJson` stores the report's layout as an ordered JSON array of content block definitions — each specifying a block type (text, chart, table, etc.) and its configuration.Element
- Report FigureA ReportFigure specifies a data visualization — such as a time-series concentration chart or a water-level contour map — that Piper generates from the monitoring data and inserts into the rendered PDF. Each figure references the wells and analytes it covers, and carries ordering and caption metadata.Concept
- Report Figure Caption`ReportFigure.caption` provides explanatory text below the chart or map, giving readers context about the data source, date range, or interpretation.Element
- Report Figure KindReportFigureKind specifies what kind of chart or map a report figure represents — a trend over time, a Piper diagram, a contour map, or a custom graphic.Concept
- Report Figure Order`ReportFigure.order` determines the position of this chart or map in the report's figure sequence, controlling both its numbering and placement in the PDF.Element
- Report Figure — Package ID`ReportFigure.packageId` links this figure definition to its parent ReportPackage, determining which report it will be rendered into.Element
- Report Figure Tenant ID`ReportFigure.tenantId` scopes the figure definition to the owning organization, ensuring that chart configurations and data selections are isolated between tenants.Element
- Report Figure Title`ReportFigure.title` is the descriptive name for the chart or map displayed as the figure heading in the PDF and listed in the report's figure inventory.Element
- Reporting Period End`ReportPackage.reportingPeriodEnd` defines the close of the data window — collection dates after this date fall outside the scope of this report.Element
- Reporting Period Start`ReportPackage.reportingPeriodStart` defines the start of the data window — all sampling events and analytical results with collection dates on or after this date are eligible for inclusion in the report.Element
- Report Number`ReportPackage.reportNumber` is the alphanumeric identifier assigned to this report — typically following a site or program numbering convention — used for regulatory tracking and internal reference.Element
- Report PackageA ReportPackage is the top-level container for a regulatory submittal — it records the reportingPeriodStart and reportingPeriodEnd, links the sampling events included, and owns the sections, figures, and versions that together form the delivered document.Concept
- Report Package Created By`ReportPackage.createdBy` identifies which team member initiated the report package in Piper, supporting accountability and audit trails.Element
- Report Package Notes`ReportPackage.notes` is a free-text field for internal team notes about the report — production status, open review items, or drafting reminders — that do not appear in the final submitted document.Element
- Report Package Site ID`ReportPackage.siteId` links the report to the specific monitoring site whose data is being reported to the regulatory agency.Element
- Report Package Tenant ID`ReportPackage.tenantId` scopes the report to the owning organization, ensuring regulatory submittals are isolated between tenants.Element
- Report Package Title`ReportPackage.title` is the formal report title displayed on the cover page and in document metadata when the PDF is rendered.Element
- Report Package Updated By`ReportPackage.updatedBy` tracks who last edited the report package, providing an audit trail for the report production process.Element
- Report SectionA ReportSection stores the narrative content for one part of a regulatory report — such as the Introduction, Site Background, or Results Discussion — as a Markdown body. Sections have an order field that determines their sequence in the rendered document.Concept
- Report Section KindReportSectionKind identifies what role each section plays in a report — for example, Narrative for interpretive text, Results for data tables, or Appendix for supporting attachments.Concept
- Report Section Order`ReportSection.order` is an integer that determines the position of this section relative to other sections in the same ReportPackage when the document is rendered.Element
- Report Section — Package ID`ReportSection.packageId` links the section to its parent ReportPackage, determining which report the section will appear in when rendered.Element
- Report Section Tenant ID`ReportSection.tenantId` scopes the section to the owning organization, ensuring that narrative report content is isolated between tenants.Element
- Report Section Title`ReportSection.title` is the section heading displayed in the table of contents and at the top of the section in the rendered PDF.Element
- Report TypeReportType classifies what a report is for — routine quarterly or annual monitoring, initial site characterization, remedial system progress, a closure request, or another purpose.Concept
- Report VersionA ReportVersion captures the output of rendering a ReportPackage to PDF — storing the binary PDF content, a table of contents, figure and table manifests, and the approval metadata when the version is cleared for submittal.Concept
- Report Version Created By`ReportVersion.createdBy` records who initiated the PDF render for this version, establishing accountability for each generation of the compliance report.Element
- Report Version Notes`ReportVersion.notes` captures internal notes specific to this render — such as what changed from the previous version or the review status — separate from the report's narrative content.Element
- Report Version — Package ID`ReportVersion.packageId` links this rendered PDF snapshot to its parent ReportPackage, allowing you to view all versions generated from a given report.Element
- Report Version StatusReportVersionStatus tracks whether a report version is still being drafted, is circulating for internal review, or has been finalized and locked for agency submission.Concept
- Report Version Tenant ID`ReportVersion.tenantId` scopes the rendered PDF and its manifests to the owning organization, protecting sensitive regulatory document content.Element
- Sample BottleA SampleBottle represents one type of sample container within a CoCRecord, describing what it holds, how it is preserved, and how many were filled. Multiple SampleBottle records per CoCRecord accommodate the different container requirements for different analyte groups.Concept
- Sample Bottle Notes`SampleBottle.notes` captures container-specific observations that do not fit the structured fields, such as fill issues or deviations from the sampling plan.Element
- Sample Bottle — Record ID`SampleBottle.recordId` links this bottle entry to its parent CoCRecord, identifying which well sample the container was collected for.Element
- Sample Bottle Tenant ID`SampleBottle.tenantId` scopes the bottle record to the owning organization, maintaining data isolation for the containers documented on a CoC.Element
- Sample Matrix`CoCRecord.matrix` identifies the environmental medium collected, which governs which analytical methods and regulatory thresholds apply to the results.Element
- Sampler Company`ChainOfCustody.samplerCompany` identifies the firm responsible for the sampling event documented on this CoC.Element
- Sampler Name`ChainOfCustody.samplerName` records the individual responsible for collecting the groundwater samples documented on this CoC.Element
- Sample TypeSampleType identifies whether a sample is an environmental compliance sample or a quality-control sample used to assess laboratory and field performance.Concept
- Sample Volume`SampleBottle.volume` records the amount of sample water or material collected into this container type, used to confirm sufficient volume for the requested analyses.Element
- Sampling EventA SamplingEvent records a single instance of groundwater sample collection at a specific well on a specific date. It links a site and well to the lab report that analyzed the collected sample, and serves as the parent record for all AnalyticalResults from that visit.Concept
- Sampling Event Created ByThe `createdBy` on a SamplingEvent records which user entered or imported the event into Piper.Element
- Sampling Event IDs (JSON)`ReportPackage.samplingEventIdsJson` stores the list of sampling event identifiers whose analytical results, field measurements, and CoC data are included in this report.Element
- Sampling Event Lab NameThe `labName` on a SamplingEvent identifies which analytical laboratory performed the chemical analysis on the collected samples.Element
- Sampling Event Lab Report IDThe `labReportId` on a SamplingEvent stores the reference number the laboratory assigned to the analytical report for this sampling event.Element
- Sampling Event MatrixThe `matrix` on a SamplingEvent describes the physical medium from which the sample was collected.Element
- Sampling Event NotesThe `notes` on a SamplingEvent is a free-text field for recording field observations, anomalies, or context about the sampling visit.Element
- Sampling Event Sample DateThe `sampleDate` on a SamplingEvent records when the groundwater sample was collected in the field.Element
- Sampling Event Sample IDThe `sampleId` on a SamplingEvent is the unique identifier for the physical sample as labeled in the field or by the laboratory.Element
- Sampling Event SiteThe `siteId` on a SamplingEvent identifies which remediation or monitoring site the samples were collected from.Element
- Sampling Event TenantThe `tenantId` on a SamplingEvent scopes the event and its associated analytical results to a single organization.Element
- Sampling Event WellThe `wellId` on a SamplingEvent links the sampling visit to the specific monitoring well that was sampled.Element
- Screen Bottom Depth`WellConstruction.screenBottomDepth` is the depth at which the perforated screen section of the well terminates, defining the lower boundary of the sampled zone.Element
- Screen Diameter`WellConstruction.screenDiameter` records the inner diameter of the well screen, which determines pump selection and purge volume calculations.Element
- Screen Length`WellConstruction.screenLength` is the total length of the screened interval, equal to the difference between screenBottomDepth and screenTopDepth when both are recorded.Element
- Screen Material`WellConstruction.screenMaterial` records what the perforated screen section is constructed from, which affects chemical compatibility with site contaminants.Element
- Screen Top Depth`WellConstruction.screenTopDepth` is the depth at which the perforated screen section of a monitoring well starts, measured from the ground surface.Element
- Seal Bottom Depth`WellConstruction.sealBottom` marks the deepest point of the annular seal, which should sit just above the filterPackTop to keep the seal and filter pack from mixing.Element
- Seal Top Depth`WellConstruction.sealTop` marks the shallowest depth of the annular seal material, which should extend close to the surface to fully isolate the well from surface infiltration.Element
- Seal Type`WellConstruction.sealType` identifies the material placed in the borehole annulus above the filter pack to prevent surface water from migrating down to the screened interval.Element
- Section Body (Markdown)`ReportSection.bodyMarkdown` holds the full text of the section authored in Markdown syntax, which Piper renders to formatted prose in the PDF.Element
- Section Included`ReportSection.included` is a boolean that controls whether this section appears in the rendered ReportVersion — false excludes it from the PDF without deleting the content.Element
- Sections Snapshot (JSON)`ReportVersion.sectionsSnapshotJson` captures the full content of all ReportSection records at the moment the PDF was generated, preserving the exact narrative that was rendered into this version.Element
- SessionA Session represents an active login by a User within a specific Tenant context. Sessions expire automatically based on the expiresAt timestamp.Concept
- Session Expiry`expiresAt` on a Session is the datetime after which the session token is rejected and the user is redirected to login.Element
- Session Tenant`tenantId` on a Session identifies the organization context under which the user authenticated, scoping all data access to that tenant's sites and wells.Element
- Session User`userId` on a Session identifies which User is logged in, linking the session token to that user's profile, roles, and site access grants.Element
- Shipped At`ChainOfCustody.shippedAt` records the exact timestamp when the cooler containing samples was dispatched to the laboratory.Element
- Shipped Via`ChainOfCustody.shippedVia` records the carrier name or delivery method (e.g., FedEx, courier, hand-delivery) used to get samples to the laboratory.Element
- SiteA Site represents a single contaminated or monitored property — a former industrial facility, underground storage tank location, or landfill — where groundwater compliance work is performed. Every well, sample, threshold assignment, field visit, and regulatory report in piper belongs to a Site.Concept
- Site AccessSiteAccess links a User to a Site with an assigned role (Admin, Editor, or Viewer), controlling what that person can see and do within the site's data.Concept
- Site Access Site`siteId` on a TenantSiteAccess identifies the specific monitoring site the tenant is being granted access to.Element
- Site Access Site`SiteAccess.siteId` identifies which Site the user is being granted access to.Element
- Site Access Tenant`SiteAccess.tenantId` scopes the access grant to a specific tenant, ensuring that user-to-site assignments are never shared across organizations.Element
- Site Access Tenant ID`tenantId` on a TenantSiteAccess identifies which tenant organization is being granted access to the referenced monitoring site.Element
- Site Access User`SiteAccess.userId` identifies which user is being granted access to the site.Element
- Site Active Flag`Site.isActive` is a Boolean flag that marks a site as active or inactive within piper.Element
- Site Address`Site.address` stores the street-level address of the monitored property and appears in report cover pages and agency submissions.Element
- Site Boundary GeoJSON`Site.boundaryGeoJson` stores a GeoJSON geometry string that draws the site perimeter on maps and constrains spatial well-placement validation.Element
- Site City`Site.city` stores the municipality name and is combined with address, state, and zipCode to build the complete location string in report headers.Element
- Site Client ID`Site.clientId` links a Site to a client record — typically the responsible party or property owner for whom compliance work is being performed.Element
- Site Code`Site.siteCode` is the compact alphanumeric code that appears on regulatory submissions, lab COC forms, and generated sample identifiers.Element
- Site ContactSiteContact records the name, role, company, and contact details for a key person associated with a site. One site can have multiple contacts, with one marked isPrimary.Concept
- Site Contact Company`SiteContact.company` records the name of the organization the contact person represents.Element
- Site Contact Email`SiteContact.email` stores the email address used to reach this site contact.Element
- Site Contact Is PrimaryThe `isPrimary` flag on a SiteContact marks one person as the default point of contact for a site.Element
- Site Contact Name`SiteContact.name` stores the full name of the person represented by this SiteContact record.Element
- Site Contact PhoneThe `phone` on a SiteContact stores the direct phone number for that contact.Element
- Site Contact Role`SiteContact.role` describes what role the contact person plays with respect to the site.Element
- Site Contact Site`SiteContact.siteId` links the contact record to a specific Site.Element
- Site Contact Tenant`SiteContact.tenantId` ensures the contact record belongs to a specific organization and is not visible to other tenants.Element
- Site County`Site.county` records the county jurisdiction for the site, which many state environmental agencies require on monitoring reports and permit applications.Element
- Site Created By`Site.createdBy` stores the identifier of the user who first created the site in piper.Element
- Site Facility ID`Site.facilityId` stores the external identifier assigned by the lead regulatory agency, enabling cross-reference between piper and agency tracking systems.Element
- Site Latitude`Site.latitude` is the decimal-degree latitude coordinate for the site's reference point, used to place the Site on maps and in GIS exports.Element
- Site Longitude`Site.longitude` is the decimal-degree longitude coordinate for the site's reference point, used alongside latitude to locate the Site on maps.Element
- Site Name`Site.name` is the plain-language label that appears in the site selector, report headers, and all site-level views.Element
- Site Notes`Site.notes` holds unstructured text describing anything relevant to the site that does not fit into other fields.Element
- Site Permit ID`Site.permitId` stores the identifier of the regulatory permit associated with this site in an external permitting system.Element
- Site PhaseThe site phase indicates where a site stands in the environmental cleanup process, from early Assessment through active Remediation, long-term Monitoring, and final Closure.Concept
- Site Regulatory Lead AgencyThe `leadAgency` field on SiteRegulatory records which government body — state or federal — has primary regulatory authority over the site.Element
- Site Regulatory ProgramThe `program` field on SiteRegulatory stores the human-readable name of the regulatory program under which the site is managed.Element
- Site Regulatory Program IDThe `programId` on SiteRegulatory stores the official case or program number assigned by the lead regulatory agency.Element
- Site Regulatory RecordA SiteRegulatory record ties a site to a specific oversight program — recording the program name, the government agency leading oversight, current status, and the date range the program is active.Concept
- Site Regulatory Site IDThe `siteId` on SiteRegulatory associates the regulatory record with a specific site in piper.Element
- Site Regulatory StatusThe `status` field on SiteRegulatory captures the current phase or standing of the regulatory program in plain text.Element
- Site Regulatory Tenant IDThe `tenantId` on SiteRegulatory scopes the record to a single tenant, ensuring that regulatory data is never visible across organization boundaries.Element
- Site RoleSiteRole determines what actions a user can take on a site — from read-only Viewer access to full Admin control.Concept
- Site State`Site.state` records the state abbreviation or full name for the site address, which also informs which state regulatory thresholds and programs apply.Element
- Site Tenant ID`Site.tenantId` links every site record to its owning organization, ensuring that queries and API responses never leak data across tenants.Element
- Site Updated By`Site.updatedBy` records which user most recently saved changes to the site.Element
- Site ZIP Code`Site.zipCode` stores the postal code for the site location, completing the mailing address used in report cover pages and agency correspondence.Element
- Source Unit`UnitConversion.fromUnit` is the unit label of the incoming concentration value — the unit string as found in a lab report or imported data file.Element
- Stabilization Notes`stabilizationNotes` on a PurgeLog captures the technician's explanation of stabilization outcomes, particularly when `stabilized` is false or conditions were unusual.Element
- Stabilized`stabilized` on a PurgeLog is a boolean that records whether the field parameters (pH, conductivity, dissolved oxygen, ORP, turbidity) met stability criteria by the end of the purge.Element
- Surface CompletionSurfaceCompletion describes the above-ground or at-grade installation style of a monitoring well, which determines how it is protected and accessed during field visits.Concept
- Table Manifest (JSON)`ReportVersion.tableManifestJson` stores the list of tables included in the rendered PDF — equivalent to the "List of Tables" in a formal regulatory report.Element
- Table of Contents (JSON)`ReportVersion.tableOfContentsJson` stores the rendered table of contents as a structured JSON object, mapping section titles to their page numbers in the PDF.Element
- Target Formation`targetFormation` on a WellConstruction identifies the geologic unit the well screen intersects, providing context for interpreting water levels and contaminant distribution.Element
- Target Unit`UnitConversion.toUnit` is the target unit label — the unit that the converted value will be expressed in after applying the conversion factor.Element
- Technician`FieldVisit.technician` records who performed the site visit and collected the field measurements documented in this record.Element
- TenantA Tenant is the top-level organizational boundary in piper. Every site, monitoring well, and data record belongs to a tenant, enforcing strict data isolation between organizations.Concept
- Tenant Name`Tenant.name` is the human-readable name for the organization, displayed in headers, reports, and access management screens.Element
- Tenant Site AccessA TenantSiteAccess record grants a tenant organization access to a specific monitoring site, specifying the `accessLevel` and recording who (`grantedBy`) authorized the access.Concept
- Tenant Site Access LevelWhen one tenant organization is granted access to a site owned by another, the access level determines the scope of that access.Concept
- Tenant Slug`Tenant.slug` is a short, URL-safe identifier derived from the tenant's name. It appears in API paths and is used wherever a compact, stable organization identifier is needed.Element
- Tenant Suite ID`Tenant.suiteId` is the Suite-assigned identifier for this organization, used to synchronize tenant identity across all Stratum products.Element
- Threshold DirectionThresholdDirection specifies how a threshold value is applied when comparing against an analytical result — either as a ceiling that must not be exceeded or a floor that must be met.Concept
- Threshold SetA ThresholdSet is a curated collection of ThresholdValues from a shared regulatory source — such as a state drinking water standard or an EPA cleanup level table. It carries a name, scope, jurisdiction, citation, effectiveDate, and optional expiresDate. Assigning a ThresholdSet to a site (via ThresholdSetAssignment) activates all of its ThresholdValues for exceedance detection at that site.Concept
- Threshold Set AssignmentA ThresholdSetAssignment is the join record that connects a ThresholdSet to a monitoring site. When a ThresholdSetAssignment is active (isActive true), every ThresholdValue in the assigned set is evaluated against new AnalyticalResults at the assigned site. The assignment records when it was made (assignedAt) and who made it (assignedBy).Concept
- Threshold Set Assignment Assigned ByThe `assignedBy` on a ThresholdSetAssignment records the user identifier of the compliance manager who activated the regulatory standard for the site.Element
- Threshold Set Assignment DateThe `assignedAt` on a ThresholdSetAssignment records the timestamp when the ThresholdSet was linked to the site.Element
- Threshold Set Assignment Is ActiveThe `isActive` flag on a ThresholdSetAssignment controls whether the linked ThresholdSet is currently applied to the site's exceedance detection.Element
- Threshold Set Assignment SetThe `thresholdSetId` on a ThresholdSetAssignment identifies which ThresholdSet is being activated for the linked site.Element
- Threshold Set Assignment SiteThe `siteId` on a ThresholdSetAssignment identifies the specific monitoring site where the assigned ThresholdSet will be applied for exceedance detection.Element
- Threshold Set Assignment TenantThe `tenantId` on a ThresholdSetAssignment scopes the site-to-threshold-set link to a single organization.Element
- Threshold Set CitationThe `citation` on a ThresholdSet records the specific regulatory document, table, or code section from which the ThresholdValues in the set were derived.Element
- Threshold Set Created ByThe `createdBy` on a ThresholdSet records who originally built the collection of regulatory limits.Element
- Threshold Set DescriptionThe `description` on a ThresholdSet provides additional context about the purpose, scope, and applicability of the standards it contains.Element
- Threshold Set Effective DateThe `effectiveDate` on a ThresholdSet marks when the regulatory standards it contains came into force.Element
- Threshold Set Expires DateThe `expiresDate` on a ThresholdSet marks the date after which the standards in the set should no longer be applied to new AnalyticalResults.Element
- Threshold Set ID`ReportPackage.thresholdSetId` references the set of regulatory limits against which results are evaluated when generating tables and exceedance summaries within the report.Element
- Threshold Set Is ActiveThe `isActive` flag on a ThresholdSet controls whether it can be assigned to sites and applied in exceedance detection.Element
- Threshold Set Is Built-InThe `isBuiltIn` flag on a ThresholdSet distinguishes sets shipped with Piper from sets created by individual tenants.Element
- Threshold Set JurisdictionThe `jurisdiction` on a ThresholdSet identifies the regulatory body or geographic authority responsible for the concentration limits it contains.Element
- Threshold Set NameThe `name` on a ThresholdSet is the human-readable label used throughout Piper's compliance interface.Element
- Threshold Set ScopeThresholdSetScope identifies where a threshold set's values originate — a national regulation, a state program, or a negotiated site-specific standard.Concept
- Threshold Set Sort OrderThe `sortOrder` on a ThresholdSet determines where the set appears in ordered lists within the compliance interface.Element
- Threshold Set TenantThe `tenantId` on a ThresholdSet scopes the set to a single organization or marks it as a platform-provided built-in.Element
- Threshold Set Updated ByThe `updatedBy` on a ThresholdSet records which user most recently edited the set's metadata or configuration.Element
- Threshold ValueA ThresholdValue is one row in a ThresholdSet — it defines the regulatory concentration limit for a specific analyte within that set. It stores thresholdValue (the numeric limit), thresholdUnit, direction (above or below), source, and optional notes. When an AnalyticalResult's normalizedValue breaches the limit in the specified direction, an Exceedance is generated referencing both the ThresholdSet and this specific ThresholdValue.Concept
- Threshold Value AnalyteThe `analyteId` on a ThresholdValue specifies which chemical constituent the concentration limit governs.Element
- Threshold Value LimitThe `thresholdValue` on a ThresholdValue is the numeric concentration limit that AnalyticalResults are compared against during exceedance detection.Element
- Threshold Value NotesThe `notes` on a ThresholdValue allows administrators to record qualifications, conditions, or caveats that affect how this analyte's limit should be interpreted.Element
- Threshold Value SetThe `thresholdSetId` on a ThresholdValue links the analyte-level limit to its parent ThresholdSet.Element
- Threshold Value SourceThe `source` on a ThresholdValue records the analyte-specific regulatory citation when the limit comes from a distinct sub-table or subsection.Element
- Threshold Value TenantThe `tenantId` on a ThresholdValue scopes the individual analyte limit to a single organization.Element
- Threshold Value UnitThe `thresholdUnit` on a ThresholdValue specifies the unit in which the concentration limit is expressed.Element
- Top of Casing Elevation`tocElevation` on a MonitoringWell stores the elevation of the top of the well casing (TOC), which is the fixed reference point from which depth-to-water is measured in the field.Element
- Total Volume Purged (Gallons)`totalVolumeGallons` on a PurgeLog records the cumulative volume of water pumped out of the well during the entire purge event.Element
- Tracking Number`ChainOfCustody.trackingNumber` stores the shipping carrier's tracking number, enabling real-time monitoring of cooler delivery status.Element
- Turbidity`turbidity` on a FieldMeasurement records the cloudiness or haziness of the groundwater at this well, typically in NTU (nephelometric turbidity units).Element
- Unit ConversionA UnitConversion defines the multiplication factor needed to convert a concentration value from one unit (fromUnit) to another (toUnit) within a given environmental matrix such as groundwater or soil.Concept
- UserA User represents a person who can log in to piper. Users are provisioned via Stratum Suite SSO and then linked to tenants and specific sites through separate access records.Concept
- User Email`User.email` is the unique email address identifying this person within piper, sourced from their Stratum Suite account.Element
- User Name`User.name` is the full name of the person as provided by Stratum Suite, displayed wherever piper shows who performed an action.Element
- User Suite ID`User.suiteId` is the Suite-assigned identifier for this individual, used to match incoming auth tokens to the correct local User record.Element
- User–Tenant MembershipA UserTenant record links one User to one Tenant and carries the organizational role that governs the user's default permissions within that tenant.Concept
- UserTenant Role`UserTenant.role` is the role string assigned to a user within a tenant organization, used alongside site-level roles to determine what actions the user may take.Element
- UserTenant Tenant ID`UserTenant.tenantId` points to the Tenant that the user is a member of, forming the other side of the organization membership join.Element
- UserTenant User ID`UserTenant.userId` points to the User who belongs to the tenant, forming one side of the organization membership join.Element
- Version Number`ReportVersion.versionNumber` is an integer that increments each time a ReportPackage is rendered, creating a numbered revision history for the compliance report.Element
- Visit Date`FieldVisit.visitDate` records when the site visit occurred, anchoring all FieldMeasurements taken during that trip to a specific date in the monitoring history.Element
- Volumes Purged`volumesPurged` on a PurgeLog is the ratio of water removed to the well's standing volume, expressing how thoroughly the well was purged.Element
- Water Level Elevation (ft)`waterLevelElevationFt` on a FieldMeasurement is the calculated water surface elevation in feet above mean sea level, derived from `depthToWaterFt` and the well's surveyed datum.Element
- Water Temperature (°C)`temperatureC` on a FieldMeasurement records the in-situ groundwater temperature in degrees Celsius.Element
- Weather ConditionWeatherCondition captures the field conditions at the time of a site visit, which can affect sample quality, water levels, and regulatory defensibility.Concept
- Well Abandon Date`MonitoringWell.abandonDate` records the date on which a well was officially abandoned in accordance with regulatory requirements.Element
- Well ConstructionWellConstruction records the detailed physical specifications of how a monitoring well was built — from the screen interval that contacts the aquifer to the surface completion protecting the wellhead.Concept
- Well Construction Tenant`WellConstruction.tenantId` identifies which tenant organization owns this construction record, enforcing data isolation between organizations sharing the platform.Element
- Well Construction Well Reference`WellConstruction.wellId` links the construction specifications back to the MonitoringWell they describe, forming a one-to-one relationship.Element
- Well Created By`MonitoringWell.createdBy` stores the identifier of the user who originally created the well record in piper.Element
- Well External Asset ID`MonitoringWell.externalAssetId` stores the ID of this well in an outside asset tracking or equipment management platform.Element
- Well GroupA WellGroup is a named collection of wells at a site, used to organize wells by their hydrogeologic role or spatial zone.Concept
- Well Group Color`WellGroup.color` stores a display color for the group, applied to well markers, trend lines, and table rows.Element
- Well Group Description`WellGroup.description` provides additional context about why this group exists and what it represents hydrogeologically.Element
- Well Group MemberWellGroupMember links a MonitoringWell to a WellGroup, enabling the same well to appear in multiple groups across the site.Concept
- Well Group Member Group`groupId` on a WellGroupMember identifies which WellGroup the well has been assigned to, linking the membership to its group.Element
- Well Group Member Tenant`tenantId` on a WellGroupMember scopes the membership record to a specific organization, ensuring cross-tenant data isolation at every layer.Element
- Well Group Member Well`wellId` on a WellGroupMember identifies which MonitoringWell belongs to the group, forming the assignment link between a well and a WellGroup.Element
- Well Group Name`WellGroup.name` is the human-readable label used to identify the group throughout the application.Element
- Well Group Parent`parentGroupId` on a WellGroup points to the containing WellGroup, allowing groups to be organized in a tree structure — for example, nesting "Source Zone" and "Perimeter" under a "Phase 2 Network" parent.Element
- Well Group Site`WellGroup.siteId` ties the well group to a specific contaminated site, so groups and their member wells are scoped correctly in reports and maps.Element
- Well Group Sort Order`sortOrder` on a WellGroup controls the order in which groups appear in the sidebar and report sections, allowing teams to arrange groups logically.Element
- Well Group Tenant`WellGroup.tenantId` scopes the well group to a specific tenant, ensuring groups and their member wells are never visible across organization boundaries.Element
- Well ID`wellId` is the field-assigned label for a MonitoringWell — the ID that appears on sample bottles, chain-of-custody forms, and regulatory reports.Element
- Well Installation Date`installDate` on a MonitoringWell records when the well was constructed and placed into service, establishing the start of its monitoring record.Element
- Well Latitude`latitude` on a MonitoringWell stores the decimal-degrees north coordinate of the well head, used for site maps and spatial reports.Element
- Well Longitude`longitude` on a MonitoringWell stores the decimal-degrees east/west coordinate of the well head, paired with latitude to place the well on site maps.Element
- Well Notes`MonitoringWell.notes` holds unstructured text observations about the well that do not fit into other structured fields.Element
- Well StatusWellStatus tracks whether a monitoring well is currently in service and available for sampling, or has been taken out of service in some way.Concept
- Well Stickup Height`stickupHeight` on a WellConstruction records how far the top of casing extends above the ground or vault surface, a critical measurement for accurate water level calculations.Element
- Well Total Depth`totalDepth` on a MonitoringWell records how deep the finished well extends below ground surface, measured in feet or meters.Element
- Well TypeWellType classifies what role a well plays at the site, distinguishing passive observation wells from active remediation infrastructure and background reference points.Concept
- Well Updated By`MonitoringWell.updatedBy` records which user most recently saved changes to the well record.Element
- Well Volume (Gallons)`wellVolumeGallons` on a PurgeLog records the volume of water standing in the well casing before the purge began.Element
