This prompt is designed for clinical documentation reviewers, medical informatics engineers, and healthcare AI builders who need to extract objective, verifiable observations from clinical notes, discharge summaries, and consult reports. The core job-to-be-done is separating measured facts (e.g., 'BP 140/90', 'WBC 12.5') from clinical judgment, differential diagnosis reasoning, and treatment rationale. The ideal user is integrating this prompt into a clinical data pipeline, a chart review application, or a medical QA system where downstream processes require clean, atomic factual statements that can be validated against lab values, vital signs records, or structured EHR fields.
Prompt
Medical Summary Fact-Separation Prompt

When to Use This Prompt
Define the job, reader, and constraints for the Medical Summary Fact-Separation Prompt.
Use this prompt when the source text is a clinical narrative written by a healthcare professional and the output must distinguish between what was observed or measured and what was assessed or planned. The prompt is appropriate for post-encounter documentation review, clinical data abstraction for registries, and pre-processing steps before automated fact-checking against medical knowledge bases. It is not suitable for real-time clinical decision support, patient-facing explanations, or generating clinical advice. The prompt assumes the input has already been de-identified according to your organization's policies; it does not perform PHI redaction. It also assumes English-language clinical text with standard medical terminology.
Do not use this prompt for generic health content, patient forum posts, or consumer medical articles. It is not designed for legal medical review, billing code extraction, or quality-of-care assessments. The prompt does not make clinical determinations about correctness of the documented findings—it only separates factual statements from interpretive ones. For high-stakes use cases, always route outputs through human clinical review before any downstream action. The prompt's value is in structuring unstructured clinical text for machine consumption, not in replacing clinical judgment.
Use Case Fit
Where the Medical Summary Fact-Separation Prompt works well, where it breaks, and the operational prerequisites for safe deployment.
Good Fit: Structured Clinical Notes
Use when: processing discharge summaries, consult reports, and operative notes with clear section headers. Why: these documents separate objective findings from assessment/plan sections, giving the model structural cues. Guardrail: pre-process with section-boundary detection before running the prompt.
Bad Fit: Real-Time Dictation Streams
Avoid when: processing live dictation or unedited voice transcripts. Risk: incomplete sentences, mid-thought corrections, and missing punctuation cause the model to misclassify fragments as facts or hallucinate boundaries. Guardrail: require complete, reviewed documents as input; use a separate transcription normalization step first.
Required Input: Explicit Measurement Context
Risk: the model cannot distinguish a measured value from an interpreted severity without units, reference ranges, and temporal context. Guardrail: include lab reference ranges, prior values, and collection timestamps in the [CONTEXT] block. Test with borderline-normal values to ensure the model does not reclassify them as abnormal.
Operational Risk: Over-Confident Classification
Risk: the model assigns high confidence to fact-interpretation splits on ambiguous clinical language (e.g., 'mild cardiomegaly' blends measurement and judgment). Guardrail: route all 'mild,' 'moderate,' 'suggestive of,' and 'cannot exclude' statements to a human review queue with the model's classification and rationale attached.
Variant: Differential Diagnosis Handling
Risk: differential diagnosis lists contain both factual observations and interpretive reasoning in the same sentence. Guardrail: add a dedicated output field for 'differential_diagnosis_items' that captures each candidate with its supporting evidence and flags the entire list as interpretive. Test against lists where the leading diagnosis changes based on new lab results.
Compliance Boundary: PHI Leakage in Prompts
Risk: clinical notes contain PHI that must not persist in prompt logs, caches, or error traces. Guardrail: run a PHI redaction step before the prompt, use ephemeral model requests with logging disabled, and never store raw clinical text in eval datasets. Validate with a PHI detection scan on all prompt inputs before execution.
Copy-Ready Prompt Template
A reusable prompt template for separating verifiable clinical observations from interpretive judgment in medical summaries.
This prompt template is designed to process clinical documentation—such as discharge summaries, consult reports, and progress notes—and decompose the content into two distinct categories: verifiable objective findings and clinical interpretation. The goal is to produce a structured output that a downstream verification system or human reviewer can trust, ensuring that measured values (e.g., 'BP 140/90') are never conflated with severity assessments (e.g., 'poorly controlled hypertension'). The template uses square-bracket placeholders for all dynamic inputs, allowing you to integrate it into a production pipeline where the source text, risk level, and output schema are injected at runtime.
textYou are a clinical documentation analyst. Your task is to process the provided [CLINICAL_TEXT] and separate every statement into one of two categories: 'verifiable_objective_finding' or 'clinical_interpretation'. **Definitions:** - **verifiable_objective_finding**: A statement that can be confirmed or refuted by a measurement, a lab result, a documented observation, a timestamped event, or a direct patient quote. This includes vital signs, administered medications with dosages, lab values, and physical exam findings (e.g., 'tenderness to palpation in the right lower quadrant'). - **clinical_interpretation**: A statement that involves medical judgment, reasoning, differential diagnosis, risk assessment, treatment rationale, prognosis, or characterization of severity. This includes phrases like 'likely due to', 'consistent with', 'suspicious for', 'well-controlled', and 'significant improvement'. **Input:** [CLINICAL_TEXT] **Output Format:** You must produce a valid JSON object conforming to the following schema: [OUTPUT_SCHEMA] **Constraints:** [CONSTRAINTS] **Examples of Correct Separation:** [EXAMPLES] **Risk Level:** [RISK_LEVEL] If the risk level is 'high', you must flag any statement where the boundary is ambiguous for mandatory human review. Do not guess.
To adapt this template for your own use, replace the placeholders with concrete values. [CLINICAL_TEXT] should be the raw, unprocessed note. [OUTPUT_SCHEMA] should be a strict JSON Schema definition, for example, requiring an array of objects with statement, category, source_span, and confidence fields. [CONSTRAINTS] might include rules like 'never modify the original text' or 'preserve all negations'. [EXAMPLES] is critical for few-shot performance; provide 3-5 examples that specifically address the distinction between a measured value and its interpreted severity. [RISK_LEVEL] should be set to 'high' for any clinical workflow, which activates the ambiguity flagging instruction. The next step is to integrate this template into a harness that validates the JSON output against your schema before any downstream use.
Prompt Variables
Required inputs for the Medical Summary Fact-Separation Prompt. Each placeholder must be populated before the prompt is sent. Validation notes describe how to check input quality before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[CLINICAL_DOCUMENT_TEXT] | The full text of the clinical note, discharge summary, or consult report to be processed | Patient is a 67-year-old male with a history of CHF. Vitals: BP 142/88, HR 92. Lungs clear to auscultation. Assessment: mild decompensation likely due to medication non-adherence. | Check that text is non-empty and under model context limit. Strip PHI if processing in non-compliant environment. Reject if document contains only billing codes without narrative. |
[FACTUAL_CATEGORIES] | List of clinical observation categories to extract as verifiable facts | ["vital signs", "physical exam findings", "lab results", "medication list", "allergies", "imaging findings"] | Validate against allowed category enum. Each category must map to an observable or measurable clinical data type. Reject categories that require clinical judgment such as diagnosis or prognosis. |
[INTERPRETATION_CATEGORIES] | List of clinical reasoning categories to flag as interpretation rather than fact | ["assessment", "differential diagnosis", "clinical impression", "treatment rationale", "prognosis"] | Validate against allowed category enum. Ensure no overlap with factual categories. Each category must represent clinical judgment, inference, or opinion rather than direct observation. |
[OUTPUT_SCHEMA] | JSON schema defining the structure for separated facts and interpretations | {"facts": [{"statement": string, "category": string, "source_span": string, "measurable": boolean}], "interpretations": [{"statement": string, "category": string, "source_span": string, "basis_facts": string[]}]} | Validate schema is valid JSON Schema or TypeScript interface. Confirm source_span field is required for traceability. Check that basis_facts field links interpretations back to extracted factual statements. |
[CONFIDENCE_THRESHOLD] | Minimum confidence score for automated classification before routing to human review | 0.85 | Must be a float between 0.0 and 1.0. Values below 0.7 risk high false-positive rates on boundary cases. Values above 0.95 may route too many cases to human review. Log threshold in audit trail. |
[DOMAIN_TERMINOLOGY] | Domain-specific terms that signal clinical measurement versus clinical interpretation | {"measurement_signals": ["mg/dL", "mmHg", "bpm", "cm"], "interpretation_signals": ["likely", "consistent with", "suggestive of", "cannot rule out"]} | Validate that measurement_signals contain units or objective indicators. Validate that interpretation_signals contain hedging or inferential language. Test against sample documents to confirm signals do not produce false matches on edge cases. |
[HUMAN_REVIEW_TRIGGERS] | Conditions that force routing to human review regardless of confidence score | ["contradiction_between_facts", "interpretation_without_basis_facts", "severity_assessment_present", "critical_finding_detected"] | Validate each trigger against a known failure mode. Confirm trigger logic is implemented in the harness before prompt execution. Log every trigger activation with the passage that caused it. |
[ESCALATION_CONTEXT] | Additional context packaged for human reviewers when automated separation is routed for review | {"document_id": "DC-2025-00421", "author_role": "attending", "review_question": "Is 'mild decompensation' a measured finding or clinical judgment?"} | Validate that document_id is present and traceable. Confirm review_question is specific and answerable. Check that author_role is included to help reviewer assess clinical context. Reject empty escalation packets. |
Implementation Harness Notes
How to wire the Medical Summary Fact-Separation Prompt into a clinical documentation review application with validation, retries, logging, and human review gates.
The Medical Summary Fact-Separation Prompt is designed to operate as a pre-processing step in a clinical documentation review pipeline, not as a standalone chat interaction. Its primary job is to receive a clinical note, discharge summary, or consult report and return a structured separation of objective findings from clinical judgment. In production, this prompt should be called via an API (OpenAI, Anthropic, or a self-hosted model) with the output parsed into a typed object before any downstream system consumes it. The prompt is stateless: each call is independent, and the application layer is responsible for managing document context, chunking long notes, and assembling the final structured output.
Model choice and configuration: Use a model with strong instruction-following and structured output capabilities, such as gpt-4o, claude-3-5-sonnet, or a fine-tuned clinical variant if available. Set temperature to 0 or a very low value (0.0–0.1) to maximize deterministic separation behavior. Enable structured output mode (JSON mode or function-calling with a strict schema) rather than relying on free-text parsing. The output schema should enforce the separation contract: an array of objective_findings (with statement, source_span, measurement_value, unit, reference_range where applicable) and a separate array of clinical_interpretations (with statement, source_span, interpretation_type such as differential_diagnosis, severity_assessment, treatment_rationale, or prognosis).
Validation and retry logic: After each model call, validate the output against the expected schema. Check that every objective_finding contains a source_span that can be located in the original document text. If validation fails—missing spans, unparseable JSON, or findings that appear to contain interpretive language—retry once with the same prompt plus the validation error message appended as a [CORRECTION_FEEDBACK] block. If the second attempt also fails, route the document to a human review queue with the raw model output and validation errors attached. Do not silently accept unvalidated output into downstream systems. For high-risk clinical settings, consider a dual-model verification pattern: run the same prompt on two different models and flag discrepancies for review.
Logging and audit trail: Log every prompt call with the input document ID, model version, prompt template version, raw response, parsed output, validation result, and any retry or escalation actions. This audit trail is essential for clinical governance, prompt iteration, and debugging separation failures. Store logs in a structured format (JSON) with timestamps and user/session context. Never log raw PHI to unstructured log streams; use document IDs and reference the source text from a secured clinical data store. For regulated environments, ensure logs are immutable and retained according to your organization's record-keeping policies.
Human review integration: The prompt's output should feed a review interface that displays the original document side-by-side with the extracted objective findings and clinical interpretations. Reviewers should be able to accept, reject, reclassify, or edit each item. Capture reviewer corrections as labeled feedback that can be used to evaluate prompt performance over time and to build few-shot examples or fine-tuning datasets. Set an escalation threshold based on confidence scoring: if the model's separation confidence (which you can request as an additional output field) falls below a configurable threshold for any passage, automatically flag that passage for human review even if schema validation passes.
What to avoid: Do not use this prompt as a diagnostic tool or clinical decision support system. It is a documentation structuring aid only. Do not feed its output directly into patient records, billing systems, or clinical decision support without human review. Do not assume the model correctly distinguishes measured values from interpreted severity in edge cases—always validate numerical extractions against the source document. Finally, do not deploy this prompt without a regression test suite of annotated clinical notes covering common failure modes: embedded facts within interpretive sentences, ambiguous measurement language, and notes where the distinction between observation and assessment is genuinely unclear even to human reviewers.
Expected Output Contract
Defines the required fields, types, and validation rules for the structured output of the Medical Summary Fact-Separation Prompt. Use this contract to build a post-processing validator before the output enters any downstream clinical workflow.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
factual_observations | Array of objects | Array must not be empty. Each object must contain the fields defined in the subsequent rows. | |
factual_observations[].statement | String | Must be a single, atomic, verifiable clinical observation. Cannot contain hedging language (e.g., 'likely', 'possible'), clinical judgment (e.g., 'improving', 'concerning'), or treatment rationale. Parse check: must not match the interpretation regex pattern. | |
factual_observations[].source_span | String | Must be a verbatim quote from [INPUT_TEXT] that directly supports the statement. A fuzzy string match against the input must succeed with a similarity threshold > 0.95. | |
factual_observations[].category | Enum: [MEASUREMENT, OBSERVATION, EVENT, MEDICATION, TEST_RESULT] | Must be one of the specified enum values. A 'MEASUREMENT' must include a numerical value and unit in the statement. | |
clinical_interpretations | Array of objects | Array must not be empty. Each object must contain the fields defined in the subsequent rows. | |
clinical_interpretations[].statement | String | Must contain a clinical judgment, differential diagnosis reasoning, severity assessment, or treatment rationale. Cannot be a direct, verifiable observation. Parse check: must not match the factual observation regex pattern. | |
clinical_interpretations[].source_span | String | Must be a verbatim quote from [INPUT_TEXT] that supports the interpretation. A fuzzy string match against the input must succeed with a similarity threshold > 0.95. | |
separation_notes | Array of objects | If present, each object must have a 'passage' (String) and 'rationale' (String) explaining why a specific passage was difficult to classify. Used for human review routing. |
Common Failure Modes
Medical fact-interpretation separation fails in predictable ways. These are the most common production failure modes and how to guard against them before they reach a clinician or downstream verification system.
Measured Values Misclassified as Interpretations
What to watch: The model treats a lab result like 'serum creatinine 2.4 mg/dL' as clinical interpretation because it appears near severity language ('acute kidney injury'). The numeric fact gets lost in the interpretation bucket. Guardrail: Add few-shot examples showing measured values extracted from sentences that also contain interpretive phrases. Validate with a test set of lab values embedded in assessment paragraphs.
Clinical Judgments Presented as Verifiable Facts
What to watch: Statements like 'patient is stable' or 'wound appears infected' are clinical judgments, not atomic facts, but the model classifies them as verifiable observations because they lack hedging language. Guardrail: Maintain a deny-list of clinical judgment terms (stable, improved, unremarkable, within normal limits) and require explicit measurement anchors before classifying as fact. Route borderline cases to human review.
Differential Diagnosis Reasoning Leaks into Fact Stream
What to watch: When a note says 'chest pain likely musculoskeletal, though cardiac etiology cannot be excluded,' the model extracts 'chest pain' as fact but also extracts 'musculoskeletal etiology' as fact rather than as diagnostic reasoning. Guardrail: Require the model to flag any statement containing likelihood language (likely, possible, cannot exclude, rule out) and place it in the interpretation stream with explicit uncertainty labels.
Temporal Facts Lose Their Time Anchors
What to watch: The model extracts 'hemoglobin 7.2 g/dL' as a fact but drops the timestamp 'on post-op day 2,' making the value unverifiable and clinically misleading when compared to a later value. Guardrail: Require every extracted fact to carry its temporal context from the source. Add a post-extraction validation step that rejects facts without time anchors when the source document contains them.
Negated Findings Extracted as Positive Facts
What to watch: 'No focal neurological deficits' gets extracted as 'focal neurological deficits' because the model strips negation during fact decomposition. This creates false positive findings that could trigger unnecessary clinical actions. Guardrail: Add explicit negation-preservation rules in the prompt. Test with a dedicated negation test set covering common clinical negation patterns (no, denies, without evidence of, ruled out).
Treatment Rationale Confused with Outcome Facts
What to watch: 'Started on vancomycin for suspected MRSA coverage' gets split into 'started on vancomycin' (fact) and 'MRSA coverage' (fact), when the latter is the clinical rationale, not a confirmed finding. Guardrail: Require the model to classify 'for [purpose]' clauses as treatment rationale unless the purpose is explicitly documented as a confirmed diagnosis elsewhere in the note. Cross-reference with the assessment section when available.
Evaluation Rubric
Use this rubric to test the quality of the Medical Summary Fact-Separation Prompt before deploying it to production. Each criterion targets a specific failure mode common in clinical text processing.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Measured Value vs. Severity Assessment | A lab value like 'potassium 5.8' is classified as [FACT]; 'severe hyperkalemia' is classified as [INTERPRETATION]. | The phrase 'severe hyperkalemia' is incorrectly tagged as [FACT] or the numeric value is tagged as [INTERPRETATION]. | Run a test case containing 'severe hyperkalemia with potassium 5.8'. Assert the exact tags on each phrase using a substring match. |
Treatment Rationale Separation | A statement like 'started on lisinopril for hypertension' is split: 'started on lisinopril' is [FACT] and 'for hypertension' is [CLINICAL_RATIONALE]. | The entire sentence is tagged as a single [FACT] block, merging the action with the clinical reasoning. | Parse the output JSON. Assert that the 'started on lisinopril' span and 'for hypertension' span have different |
Differential Diagnosis Handling | A statement like 'chest pain, rule out MI vs. GERD' is tagged as [DIFFERENTIAL_DIAGNOSIS], not as a confirmed [FACT]. | The phrase 'rule out MI' is extracted as a verifiable factual claim that the patient has an MI. | Use a labeled test set of 10 differential diagnosis sentences. Measure recall: 100% must be tagged with |
Temporal Fact Grounding | A fact like 'chest pain started 3 hours ago' retains the relative timestamp '[3 hours ago]' in the | The model hallucinates a specific datetime like '2024-05-20 14:00' for the onset, or drops the temporal qualifier entirely. | Check the |
Negation Detection | A statement 'no acute infiltrates' is extracted as a [FACT] with | The statement is extracted as a positive finding of 'acute infiltrates' or is completely omitted from the output. | Run a test case with 5 negated findings. Assert that |
Attribution to Source | A statement 'per patient, fever started Tuesday' is tagged with | The fact is attributed to the clinician authoring the note, losing the chain of custody of the subjective information. | Check the |
Uncertainty Language Preservation | A phrase 'suspected UTI' is extracted as a [FACT] with | The phrase is extracted as a confirmed diagnosis of 'UTI' with | Run a test case with 'suspected UTI'. Assert that the output object's |
Hallucinated Normative Comparisons | The output contains only explicit facts from the text. It does not add statements like 'this is within normal limits' unless that exact phrase is in the source. | The model adds a clinical judgment like 'normal sinus rhythm' when the source only stated 'sinus rhythm'. | Use a strict schema validator. After extraction, assert that the concatenation of all |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Use the base prompt with a frontier model and manual review. Remove strict output schema requirements initially to iterate on classification quality. Start with a small set of representative clinical notes.
codeClassify each sentence in [CLINICAL_NOTE] as FACT, INTERPRETATION, or MIXED. For MIXED, extract the factual core.
Watch for
- Over-classification of measured values as interpretation when they contain severity modifiers (e.g., "severely elevated")
- Missing differential diagnosis reasoning embedded in factual statements
- No confidence scores, making ambiguous cases hard to triage

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us