Antiviral Stockpile Model
Antivirals are modeled as a stockpile-constrained intervention. They move
people from eligible compartments into T by allocation, not by a disease-rate
equation. This is intentionally similar to vaccination: a stockpile is released,
distributed to nodes, and then applied within each node according to eligibility
and priority. Releases and allocation are deterministic fixed-count transfers;
the stockpile model does not draw a random number of doses or randomly sample
who receives a dose.
For SEITRS, eligible compartments are usually E and I. For SEITHRD, the
antiviral-capable SEIHRD variant, eligible compartments can be E, IA, IP,
and IS. For SEAITRD, the standard antiviral route is I -> T; the T
compartment is required in this model family even when no doses are released.
Complete Configuration
The only supported antiviral model identity is stockpile-age-risk. A complete
five-age-group configuration looks like:
"antiviral_model": {
"identity": "stockpile-age-risk",
"parameters": {
"age_risk_priority_groups": ["0.0", "0.5", "1.0", "1.0", "0.5"],
"compartment_priority": ["IS"],
"antiviral_effectiveness_hosp": "0.25",
"antiviral_capacity_proportion": "0.10",
"antiviral_half_life_days": "30",
"antiviral_stockpile": [
{"day": "0", "amount": "1000"},
{"day": "14", "amount": "500"}
]
}
}
JSON numbers or numeric strings are accepted for the numeric values shown above.
age_risk_priority_groups
This list uses the same targeting semantics as vaccination. It must contain one value for each configured age group, in the same order as the model’s age groups.
Value |
Eligible people in that age group |
|---|---|
|
No one. |
|
High-risk people only. |
|
Everyone, including both low- and high-risk people. |
No other values are allowed. For example:
"age_risk_priority_groups": ["0.0", "0.5", "1.0", "1.0", "0.5"]
means:
Nobody in age group 0 is eligible
Only high-risk people in age groups 1 and 4 are eligible
Everyone in age groups 2 and 3 is eligible
This parameter controls age/risk eligibility, not ordering between age groups. Available doses are allocated proportionally among eligible groups. Both vaccinated and unvaccinated people may receive antivirals if they satisfy the age/risk and compartment criteria.
If supplies, daily capacity, and eligible compartment counts are sufficient, everyone who meets the configured age/risk and compartment criteria can receive an antiviral. People outside that eligibility are excluded from the scenario, even if unused doses remain. To test a narrower or broader target population, run a separate scenario with a different eligibility vector.
If omitted, every age group defaults to 1.0.
compartment_priority
This list defines the disease states eligible for antiviral treatment and the order in which they are treated within an age/risk/vaccination group. It does not prioritize one age group over another.
"compartment_priority": ["IS"]
With this SEITHRD configuration, available doses move people from symptomatic
infectious IS to T. Every label must exist in the active model’s
compartment list. If omitted, the default is ["I"]. For SEITHRD symptomatic
treatment scenarios, set compartment_priority explicitly to ["IS"].
Including E, IA, or IP in SEITHRD changes the scenario from symptomatic
treatment toward prophylaxis or early treatment. Those people may spend more
calendar time in T than someone treated only after entering IS, so the
meaning of T_to_R_days and treated infectious time changes. The current
stockpile model treats eligible compartment members directly; it does not yet
represent a separate proportion or household-contact multiplier, such as
treating 1 to 5 family members per infectious person. Use earlier
compartments only for explicit prophylaxis scenarios.
Disease Parameters
Disease parameters then describe treated people:
Parameter |
Meaning |
|---|---|
|
Average duration from treated infectious to recovered. |
|
Relative infectiousness of treated people compared with untreated |
|
Relative infectiousness of treated people compared with symptomatic |
|
Antiviral-model parameter that reduces |
|
Antiviral-model parameter that reduces |
In SEITRS and SEITHRD, if the compartment list includes T but no antiviral
model is configured, the simulator warns. Those models can still run, but no
people enter T.
There are no disease-model rates such as E_to_T_days or I_to_T_days.
Movement into T is fully determined by released doses, daily capacity,
the population in compartment_priority. In SEITRS and SEITHRD,
movement out of T is controlled by T_to_R_days; SEITHRD also allows
treated people to enter H, with risk reduced by
antiviral_effectiveness_hosp. SEAITRD also uses T_to_R_days, separately
from I_to_R_days, and derives treated mortality from I_to_D_invdays and
antiviral_effectiveness_death.
SEAITRD
SEAITRD requires T, and T means Treated, consistently with the other
antiviral-capable models. Anyone in T is assumed to be receiving an
antiviral, but no one enters T without stockpile allocation unless the input
explicitly initializes that compartment.
In the Gillespie stochastic SEAITRD model, untreated infection trajectories do
not enter T. Natural progression uses E -> A -> I; A behaves like a
pre-symptomatic compartment and does not recover or die directly.
When the optional stockpile model allocates an antiviral dose to someone in
I, the simulator:
moves one person into
T;marks the person’s old source-compartment event trajectory as stale;
queues a new trajectory beginning in
T.
Stockpile-created T entries follow the existing SEAITRD competing events:
T -> R or T -> D. Treated recovery uses T_to_R_days, while untreated
recovery uses I_to_R_days. Treated mortality is derived from
the risk-specific untreated mortality rate and
antiviral_effectiveness_death.
SEAITRD contact events are stored at the demographic-group level, not linked to
person identifiers. Antiviral reconciliation replaces progression events but
keeps the existing contact queue. This is consistent with the current SEAITRD
assumption that A, T, and I use the same infectious contact process.