Temporal reasoning in clinical text is harder than it looks, and it looks hard. A note written on March 14 might contain four distinct time references: the current visit date, symptoms the patient reports began three months ago, a lab result from a prior visit in November, and a family history going back to when the patient was a child. Each of these has a different relationship to the note date, and each matters differently depending on what you are trying to extract.
When we started building the temporal reasoning layer for CliniNote, the naive approach was obvious and wrong: extract all date strings, anchor them to the note date, build a timeline. That works for about 40 percent of the temporal expressions you encounter in clinical notes. The other 60 percent require something more like understanding what part of the narrative a given date belongs to, and how that part relates to the present.
The structure of clinical narrative time
A clinical encounter note typically moves through several temporal frames within the same document. The History of Present Illness section reports in what the linguistics literature calls "narrative past": the patient presents with symptoms that began at some prior point, with events arranged in chronological order relative to each other but anchored only loosely to the calendar. "Three weeks of worsening dyspnea, worse with exertion since last month" contains two relative temporal expressions that require anchoring to the note date to resolve.
The Assessment and Plan section typically uses the clinical present: findings are current as of the visit, diagnoses reflect the provider's judgment at the time of the note. The Past Medical History section uses an indefinite past, with events sometimes dated ("HTN diagnosed 2019") and sometimes not ("history of GERD"). The Review of Systems is a summary of a structured oral interview, with each system response reflecting the patient's self-report of current state.
These sections have different reliability and different temporal semantics. Treating the entire document as a flat sequence of text, without section identification, means applying the same temporal reasoning logic to sentence types that require different handling. It produces both false-positive and false-negative errors in event dating.
Relative expressions and their resolution
The most common class of temporal expression in clinical notes is relative rather than absolute. "Three weeks ago," "since last year," "following the procedure in December," "at the time of his prior admission": all of these require an anchor point before they can be placed on a calendar timeline.
The default anchor for relative temporal expressions is the document creation date, and this is correct for most cases in the present-tense portions of the note. But it is systematically wrong for relative expressions that appear within a narrative of past events. "She reported that her pain began two weeks before she was first seen in the ED" contains a relative expression anchored to an emergency department visit, which itself needs to be placed on the timeline before the "two weeks before" can be resolved.
We handle this by identifying anchor chains: a sequence of temporal expressions where each one serves as the reference point for the next. The system identifies the explicit anchor (an absolute date, a named event like "prior ED visit") and then resolves relative expressions against that anchor rather than against the document date. For cases where no explicit anchor can be identified, we mark the temporal expression as "document-relative" and flag it for analyst review rather than generating a falsely precise date estimate.
The copy-forward contamination problem
One of the more frustrating sources of temporal error in clinical NLP is documentation that has been copied forward from prior notes. A medication reconciliation list that was accurate in November and was pasted into a December note without updates contains medication information that is nominally current but may be stale by weeks or months. A symptom history that was copied from a previous admission note and not updated now contains outdated temporal references embedded in a current-dated document.
Copy-forward contamination is common in real-world EHR data, and it is not reliably flagged in the structured metadata. We use several signals to identify likely copy-forward content: high textual similarity between sections across sequential notes for the same patient, temporal expressions that are inconsistent with the document date (a "two weeks ago" reference that would push the event before the patient was first seen), and section-level heuristics for note types where copy-forward is particularly common (medication lists, problem lists, review of systems).
We do not claim to perfectly identify copy-forward content. We flag high-confidence cases, mark them in the extraction output, and reduce the temporal confidence score for entities extracted from flagged sections. The analyst reviewing flagged cases can then decide whether to trace back to the source note or to accept the extracted information with the appropriate caveat. Silently propagating copy-forward content as current clinical information would be worse than flagging it as uncertain.
Event dating versus documentation dating
For research purposes, the distinction between event date and documentation date is significant and often ignored. If a patient had an adverse drug reaction on October 5 and it was first documented in a note on October 12, the event date for a safety analysis is October 5, not October 12. If the adverse reaction was retrospectively documented in a discharge summary written on October 20, both the event date and the documentation lag matter for different purposes.
Clinical text frequently provides evidence to distinguish event date from documentation date. "Patient reports onset of rash approximately one week prior to presentation" gives you both an estimated event date and the documentation date. "Per prior notes, reaction noted on 10/5" gives you a documented event date from a secondary source. "Adverse reaction confirmed after chart review of outside facility records" tells you the event date is uncertain and derived from a secondary source with possible delay.
We extract both the event date and the documentation date as separate fields where the text supports the distinction. For safety surveillance studies and adverse event analysis, this distinction is often the difference between a usable data point and one that produces systematic lag bias in incidence estimates.
What we have learned about where temporal reasoning fails
After processing enough clinical notes to build honest calibration data, we have a clearer picture of the error categories. The highest-confidence temporal extractions come from discharge summaries with explicit admission and discharge dates, procedure notes with documented procedure dates, and lab result documentation where the collection date is in a structured field adjacent to the narrative. These are also the highest-volume note types for most research use cases, which is fortunate.
The lowest-confidence cases cluster in three categories. First: notes from outpatient visits where symptoms are described with vague relative timelines and no anchor other than the visit date. Second: notes with heavy copy-forward content where temporal expressions may belong to prior documentation episodes. Third: clinical correspondence (referral letters, specialist consultation letters) written in a narrative style that mixes present and past tense without clear section structure.
For these categories, we reduce confidence scores and surface them explicitly in the extraction output. The goal is not to hide uncertainty but to route it to the right handling: high-confidence extractions go to auto-accept, uncertain cases go to analyst review, ambiguous-source cases go to note trace-back. Presenting all extractions with equal confidence would make the output look clean while generating errors that propagate into the analysis undetected.