Clinical reports — createdAt and updatedAt
Summary
The Public API ClinicalReport and ClinicalReportSummary types now
expose document timestamps, and clinicalReports accepts inclusive
DateRange filters on those fields — the same idea as
QueryOptions.createdAt / QueryOptions.updatedAt
on invoices and bookings.
Use this to pick the latest report of a given type on a pathway (for example
the most recent RFAT) or to sync only reports created or updated in a
timeframe, without paging the full historical set for a status such as
Approved.
completedAt is not a substitute. It is set when a clinician submits the
report (Complete / PendingApproval) and is overwritten on resubmit after
rejection. Governance status changes (for example Approved) do not update
it.
This change is additive. Existing filters and omitting the new fields behave as before. Draft reports are still never returned.
Fields
| Field | Meaning |
|---|---|
createdAt | When the report document was created |
updatedAt | When the report was last updated, including governance status changes |
completedAt | When the clinician last submitted the report. Overwritten on resubmit. Not set by later governance statuses such as Approved |
Filters
| Argument | Description |
|---|---|
filters.createdAt | Inclusive DateRange on the document createdAt |
filters.updatedAt | Inclusive DateRange on the document updatedAt |
These compose with existing patientId, clinicalPathwayId,
reportType, and status filters using AND semantics. DateRange
bounds are optional; supply start, end, or both. No time-zone adjustment
is applied to the supplied dates.
Date-only strings such as "2026-09-06" are interpreted as midnight UTC
(2026-09-06T00:00:00.000Z) for both start and end.
Example
query RecentApprovedRfats($pathwayId: ID!) {
clinicalReports(
pagination: { page: 1, pageSize: 30 }
filters: {
clinicalPathwayId: $pathwayId
reportType: RFATReport
status: Approved
updatedAt: { start: "2026-08-01", end: "2026-09-06" }
}
) {
data {
id
reportType
status
createdAt
updatedAt
completedAt
}
pageInfo {
page
pageSize
hasMore
}
}
}
Integration guidance
- Sort or pick the latest report of a type using
createdAtorupdatedAton each row. List results remain newest-created first. - Use
filters.updatedAtfor incremental sync after governance changes.completedAtwill not move when a report is approved. clinicalReport(id:)returns the same timestamp fields onClinicalReport, plus the PDF download URL.- Drafts are never returned.
filters.status: Draftis rejected (BAD_USER_INPUT).
See also
- Release notes: Clinical reports query filters
- API reference:
ClinicalReportQueryFilters - API reference:
ClinicalReport - API reference:
ClinicalReportSummary