This is the 2nd article in the PACVS series
I have created two datasets - one for Pfizer and one for Moderna - of all the results of the LLM extraction for identifying PACVS cases in v-safe based on the Neuropathy MedDRA code.
Click here to see the full Pfizer dataset
Click here to see the full Moderna dataset
I use a Pydantic class to extract the information.
I will be referring to this schema frequently in future articles, so it is a good idea to quickly skim these fields.
The following is an explanation of the schema (I used AI to generate the explanation)
This document explains every field in pydantic_vsafe_neuropathy.py, including required inputs, optional inputs, and fields auto-computed by the model validator.
Field-by-Field Breakdown
Top-Level Final Assessment
is_pacvs(CitableBool, derived): Overall classification for whether this is a clear PACVS neuropathy case.
Derived from the heuristic score (score >= 7).
Identifiers
registrant_code(CitableStr, required): V-safe registrant identifier.vaccine_manufacturer(CitableStr, required): Vaccine maker (for example, Pfizer, Moderna, Janssen).dose_number(CitableInt, required): Dose judged most likely responsible.days_from_vaccine_to_onset(CitableOptional[int], optional): Days from relevant dose to first neuropathy symptom.
Prior COVID and Baseline Health
had_prior_covid_infection(CitableBool, required): Evidence of COVID-19 infection before symptom onset.seemed_healthy_previously(CitableBool, required): Whether patient appeared previously healthy without major chronic illness.pre_existing_conditions(CitableStr, required): Conditions that might alternatively explain symptoms.
Neuropathy Pattern Features
neuropathy_pattern(CitableOptional[NeuropathyPattern], optional): Dominant neuropathy pattern label.paresthesia_tingling(CitableBool, required): Numbness, tingling, pins-and-needles.burning_dysesthesia(CitableBool, required): Burning pain or dysesthesia.facial_cranial_involvement(CitableBool, required): Involvement of face/lips/head.patchy_non_length_dependent(CitableBool, required): Patchy, migratory, or non-length-dependent distribution.
Multi-System Cluster
prominent_fatigue(CitableBool, required): Significant fatigue or post-exertional malaise.brain_fog(CitableBool, required): Memory, concentration, or cognitive fog symptoms.dysautonomia(CitableBool, required): Dysautonomic features (for example tachycardia, orthostatic dizziness, palpitations).headache(CitableBool, required): New or worsened headache burden.multi_system_count(CitableInt, derived): Count of the four non-neuropathy systems above that are positive (0-4).
Impact and Chronicity
was_debilitating(CitableBool, required): Whether daily activities/work/quality of life are substantially impaired.appears_permanent(CitableBool, required): Whether presentation suggests long-term disability or permanence.follow_up_duration_months(CitableOptional[int], optional): Approximate follow-up duration in months.
Categorization
is_vaccine_induced_neuropathy_not_pacvs(CitableBool, required): Case appears vaccine-induced neuropathy but not full PACVS.is_mild_resembling_pacvs(CitableBool, required): Mild PACVS-like presentation with low confidence.
Objections and Alternatives
other_common_causes_ruled_out(CitableBool, required): Whether common alternatives (for example diabetes, B12, thyroid) are unlikely/ruled out.alternative_explanations_considered(CitableStr, required): Which alternatives were considered and why less likely.most_likely_alternative_diagnosis(CitableOptional[str], optional): Best alternative diagnosis if PACVS is not favored.objective_evidence_available(CitableBool, required): Whether objective testing exists.symptoms_too_mild_or_nonspecific(CitableBool, required): Whether symptoms are too mild/nonspecific for strong attribution.
Why Not Regular Neuropathy
why_not_regular_neuropathy(CitableStr, required): Reasoning against ordinary/idiopathic neuropathy.
Free-Text Importance
key_free_text_phrases(CitableStr, required): Most important quoted free-text supporting assessment.why_free_text_necessary(CitableStr, required): Why coded/structured fields alone are insufficient.
Compensation Recommendation
recommend_compensation(CitableBool, derived): Recommendation to compensate if injury is confirmed.
Derived asTrueonly when:heuristic likelihood score is at least 8,
was_debilitatingis true, andappears_permanentis true.
compensation_reasoning(CitableStr, required): Short justification for compensation stance.
Objection Response Summary
objection_response_summary(CitableOptional[str], conditionally derived):Populated only when
is_pacvsis true.Left empty (
None) for non-PACVS cases.Contains a concise narrative addressing common objections (timing, prior infection, pre-existing conditions, objective evidence).
Overall Assessment
overall_pacvs_likelihood(CitableInt, derived): 1-10 likelihood score (capped at 10).confidence(CitableStr, required): Confidence label (for example High / Moderate / Low).final_conclusion(CitableStr, required): One-paragraph final case assessment.
Derived Logic (Validator Summary)
The @model_validator(mode="after") computes and/or overwrites several fields:
multi_system_countoverall_pacvs_likelihoodis_pacvsrecommend_compensationobjection_response_summary
Heuristic score components:
+3 if onset is clearly temporal (0-42 days after dose)
+2 for atypical pattern signals (
patchy_non_length_dependentorfacial_cranial_involvement)+2 for multisystem involvement (
multi_system_count >= 2)+2 if common alternative causes are ruled out
PACVS threshold:
is_pacvs = Truewhen total score is at least 7.
Important Implementation Note
Although some fields are marked required in the schema, the validator recomputes key derived fields after model creation. In practice, caller-provided values for derived fields may be replaced by computed values.
How to Read This Schema
Most fields use citable wrappers (
CitableBool,CitableInt,CitableStr,CitableOptional[T]).Each citable field typically carries:
value: the actual valuecitation: one or more source reference indicesexplanation: optional rationale text
The model forbids unknown keys (
extra="forbid"), so only the fields below are allowed.
Enum: NeuropathyPattern
Possible values for neuropathy_pattern.value:
small_fibersensory_patchyfacial_cranialmigratorylength_dependentmotor_involved

