CYCLO-OVA: Transparent Cyclophosphamide-Associated Ovarian Failure Risk Stratification in Rheumatic and Autoimmune Disease
CYCLO-OVA: Transparent Cyclophosphamide-Associated Ovarian Failure Risk Stratification in Rheumatic and Autoimmune Disease
Authors: Dr. Erick Zamora-Tehozol, DNAI, RheumaAI
ORCID: 0000-0002-7888-3961
Abstract
Cyclophosphamide remains a life-saving therapy for severe lupus nephritis, vasculitis, and other organ-threatening autoimmune disease, but ovarian failure remains one of its most consequential non-malignant toxicities. The clinical challenge is rarely simple awareness that gonadotoxicity exists. The harder problem is identifying which patients are most likely to sustain fertility loss before the treatment window closes. We present CYCLO-OVA, an executable Python skill for transparent ovarian-failure risk stratification before or during cyclophosphamide exposure in rheumatic and autoimmune disease. The model integrates age, planned cumulative dose, oral daily versus pulse exposure, prior cyclophosphamide exposure, baseline low ovarian reserve or prior amenorrhea, expectation of repeated treatment cycles, other gonadotoxic exposures, fertility goals, GnRH agonist mitigation planning, and availability of less gonadotoxic alternatives. Outputs include visible component scores, categorical risk classes, safety alerts, recommended actions, and explicit limitations. In demonstration scenarios, a young patient with low cumulative pulse exposure and mitigation planned is LOW risk, a 32-year-old with lupus nephritis requiring higher cumulative pulse therapy is HIGH risk, and an older reproductive-age patient with prior exposure, low reserve, and oral cyclophosphamide history is VERY HIGH risk. CYCLO-OVA is intended as an auditable counseling and triage tool rather than a fertility-outcome predictor and does not replace reproductive endocrinology consultation or urgent disease-control decisions.
Keywords: cyclophosphamide, ovarian failure, fertility preservation, lupus nephritis, vasculitis, reproductive health, clinical decision support, DeSci, RheumaAI
1. Clinical problem
Cyclophosphamide still occupies a necessary place in autoimmune medicine. In lupus nephritis, ANCA-associated vasculitis, neuropsychiatric lupus, and other life-threatening disease states, it may rapidly control inflammation when delay is dangerous. But the same treatment can irreversibly reduce ovarian reserve, trigger amenorrhea, and narrow or eliminate future reproductive options.
This problem is ethically and clinically important because the harm is often preventable only before treatment begins. Once exposure starts, some opportunities for fertility preservation may already be lost. Older reproductive age, greater cumulative dose, oral daily exposure, repeated prior exposure, and pre-existing reserve impairment all intensify concern. Yet these risks are often discussed qualitatively and inconsistently.
CYCLO-OVA was designed to make that risk structure explicit, auditable, and easier to act on in time.
2. Methodology
2.1 Design principles
The score follows five clinical principles:
- Age matters strongly. Ovarian recovery becomes less reliable with increasing reproductive age.
- Exposure burden matters. Higher cumulative dose, oral daily therapy, prior exposure, and repeated cycles increase gonadotoxic pressure.
- Baseline reserve matters. Prior amenorrhea or reduced reserve lowers the margin for recovery.
- Mitigation timing matters. Fertility-preservation planning and GnRH agonist discussion are most useful before exposure.
- This is a counseling triage tool, not a guarantee. The score supports urgency and transparency; it does not predict pregnancy or live birth directly.
2.2 Model structure
The implementation computes three visible components:
- Ovarian vulnerability — age and baseline reserve impairment
- Exposure burden — cyclophosphamide exposure, cumulative dose, oral daily exposure, prior exposure, repeated cycles, and other gonadotoxic exposures
- Mitigation gap — fertility relevance, absent GnRH mitigation, and lack of less gonadotoxic alternatives
Interaction terms intensify concern when higher age coexists with larger planned cumulative dose, when low reserve coexists with active exposure, and when oral daily therapy follows prior exposure. Modest score reductions acknowledge planned GnRH agonist use and feasible alternative induction strategies, while preserving residual risk.
2.3 Output logic
The skill returns:
- Total score
- Risk class: LOW, INTERMEDIATE, HIGH, VERY HIGH
- Recommended actions
- Safety alerts
- Explicit limitations
3. Executable skill
3.1 Implementation
The implementation is standalone Python using only the standard library and is stored locally at:
skills/cyclo-ova/cyclo_ova.py
3.2 Demo output summary
Young patient with low cumulative pulse exposure and mitigation planned -> LOW
Thirty-two-year-old with lupus nephritis needing higher cumulative pulse therapy -> HIGH
Older reproductive-age patient with prior exposure, low reserve, and oral cyclophosphamide history -> VERY HIGHRepresentative high-risk output:
total_score: 106.0
risk_class: VERY HIGH
alert: Oral daily cyclophosphamide is generally more gonadotoxic than intermittent pulse exposure.4. Why this solves a real problem
Cyclophosphamide toxicity is usually framed as a regrettable tradeoff rather than a structured pre-treatment decision problem. That framing is too passive. When fertility is relevant, counseling is not a courtesy add-on; it is part of ethically competent consent. CYCLO-OVA helps teams identify when reproductive risk is becoming time-sensitive, when mitigation should be escalated, and when alternative induction strategies deserve explicit discussion.
5. Limitations
- This is an evidence-informed heuristic tool, not a validated probability calculator for premature ovarian insufficiency.
- Most supporting data come from lupus and severe autoimmune-disease cohorts, so transportability to every indication is uncertain.
- Ovarian reserve, menstrual recovery, and live-birth outcomes are related but not identical endpoints.
- GnRH agonist protection is incomplete and should not substitute for counseling or fertility-preservation referral.
- Definitive management requires individualized disease severity, treatment timing, and reproductive-goal assessment.
References
- Boumpas DT, Austin HA 3rd, Vaughan EM, et al. Risk factors for ovarian failure in patients with systemic lupus erythematosus receiving pulse cyclophosphamide therapy. Arthritis Rheum. 1998;41(5):831-837. DOI: 10.1002/1529-0131(199805)41:5<831::aid-art9>3.0.co;2-1
- Mok CC, Lau CS, Wong RW. Risk of ovarian failure and pregnancy outcome in patients with lupus nephritis treated with intravenous cyclophosphamide pulse therapy. Lupus. 2004;13(7):569-574. DOI: 10.1191/0961203304lu1063oa
- Somers EC, Marder W, Christman GM, Ognenovski V, McCune WJ. Use of a gonadotropin-releasing hormone analog for protection against premature ovarian failure during cyclophosphamide therapy in women with severe lupus. Arthritis Rheum. 2005;52(9):2761-2767. DOI: 10.1002/art.21263
- Clowse MEB, Behera MA, Anders CK, et al. Gonadal failure with cyclophosphamide therapy for lupus nephritis: advances in fertility preservation. Rheum Dis Clin North Am. 2010;36(1):99-108. DOI: 10.1016/j.rdc.2009.12.010
- Sammaritano LR, Bermas BL, Chakravarty EE, et al. 2020 American College of Rheumatology Guideline for the Management of Reproductive Health in Rheumatic and Musculoskeletal Diseases. Arthritis Rheumatol. 2020;72(4):529-556. DOI: 10.1002/art.41191
Executable Code
#!/usr/bin/env python3
"""
CYCLO-OVA — Cyclophosphamide-Associated Ovarian Failure Risk Stratification
Transparent clinical skill for estimating ovarian failure / fertility-loss risk
before or during cyclophosphamide exposure in rheumatic and autoimmune disease.
Authors: Dr. Erick Zamora-Tehozol (ORCID:0000-0002-7888-3961), DNAI, RheumaAI
License: MIT
References:
- Boumpas DT, Austin HA 3rd, Vaughan EM, et al. Risk factors for ovarian
failure in patients with systemic lupus erythematosus receiving pulse
cyclophosphamide therapy. Arthritis Rheum. 1998;41(5):831-837.
DOI:10.1002/1529-0131(199805)41:5<831::aid-art9>3.0.co;2-1
- Mok CC, Lau CS, Wong RW. Risk of ovarian failure and pregnancy outcome in
patients with lupus nephritis treated with intravenous cyclophosphamide pulse
therapy. Lupus. 2004;13(7):569-574. DOI:10.1191/0961203304lu1063oa
- Somers EC, Marder W, Christman GM, Ognenovski V, McCune WJ. Use of a
gonadotropin-releasing hormone analog for protection against premature ovarian
failure during cyclophosphamide therapy in women with severe lupus.
Arthritis Rheum. 2005;52(9):2761-2767. DOI:10.1002/art.21263
- Clowse MEB, Behera MA, Anders CK, et al. Gonadal failure with
cyclophosphamide therapy for lupus nephritis: advances in fertility
preservation. Rheum Dis Clin North Am. 2010;36(1):99-108.
DOI:10.1016/j.rdc.2009.12.010
- Sammaritano LR, Bermas BL, Chakravarty EE, et al. 2020 American College of
Rheumatology Guideline for the Management of Reproductive Health in Rheumatic
and Musculoskeletal Diseases. Arthritis Rheumatol. 2020;72(4):529-556.
DOI:10.1002/art.41191
"""
from dataclasses import dataclass, asdict
from typing import Dict, Any, List
import json
@dataclass
class CycloOvaInput:
age: int
diagnosis: str
planned_or_current_cyclophosphamide: bool = True
cumulative_planned_g: float = 0.0
oral_daily_exposure: bool = False
prior_cyclophosphamide_exposure: bool = False
baseline_low_ovarian_reserve_or_prior_amenorrhea: bool = False
severe_disease_requiring_repeated_cycles: bool = False
concomitant_alkylator_or_pelvic_gonadotoxic_exposure: bool = False
fertility_desired_or_preservation_requested: bool = True
gnrh_agonist_planned: bool = False
alternative_less_gonadotoxic_induction_feasible: bool = False
def ovarian_vulnerability(inp: CycloOvaInput) -> float:
score = 0.0
if inp.age >= 35:
score += 3.0
elif inp.age >= 30:
score += 1.8
elif inp.age >= 25:
score += 0.8
if inp.baseline_low_ovarian_reserve_or_prior_amenorrhea:
score += 2.4
return score
def exposure_burden(inp: CycloOvaInput) -> float:
score = 0.0
if inp.planned_or_current_cyclophosphamide:
score += 1.6
if inp.cumulative_planned_g >= 12:
score += 2.8
elif inp.cumulative_planned_g >= 8:
score += 1.8
elif inp.cumulative_planned_g >= 4:
score += 1.0
if inp.oral_daily_exposure:
score += 2.0
if inp.prior_cyclophosphamide_exposure:
score += 1.6
if inp.severe_disease_requiring_repeated_cycles:
score += 1.4
if inp.concomitant_alkylator_or_pelvic_gonadotoxic_exposure:
score += 1.8
return score
def mitigation_gap(inp: CycloOvaInput) -> float:
score = 0.0
if inp.fertility_desired_or_preservation_requested:
score += 0.8
if not inp.gnrh_agonist_planned:
score += 0.8
if not inp.alternative_less_gonadotoxic_induction_feasible:
score += 0.6
return score
def total_score(inp: CycloOvaInput) -> float:
score = ovarian_vulnerability(inp) + exposure_burden(inp) + mitigation_gap(inp)
if inp.age >= 30 and inp.cumulative_planned_g >= 8:
score += 1.6
if inp.baseline_low_ovarian_reserve_or_prior_amenorrhea and inp.planned_or_current_cyclophosphamide:
score += 1.4
if inp.oral_daily_exposure and inp.prior_cyclophosphamide_exposure:
score += 1.2
if inp.gnrh_agonist_planned:
score -= 1.0
if inp.alternative_less_gonadotoxic_induction_feasible:
score -= 0.8
return round(max(score, 0.0) * 5.0, 1)
def classify(score: float) -> str:
if score >= 60:
return 'VERY HIGH'
if score >= 35:
return 'HIGH'
if score >= 20:
return 'INTERMEDIATE'
return 'LOW'
def recommendations(inp: CycloOvaInput, score: float) -> List[str]:
plan: List[str] = []
if score < 15:
plan.append('Current ovarian-failure risk appears low, but fertility goals should still be documented before exposure.')
elif score < 35:
plan.append('Discuss fertility preservation early and document menstrual history and baseline ovarian-reserve context before cyclophosphamide starts.')
elif score < 60:
plan.append('Meaningful gonadotoxicity concern: urgent reproductive counseling is appropriate before continuing or initiating cyclophosphamide.')
plan.append('Review whether a less gonadotoxic induction strategy or formal fertility-preservation pathway is feasible.')
else:
plan.append('Very high concern for treatment-associated ovarian failure: fertility-preservation discussion should be treated as time-sensitive, not optional.')
plan.append('Proceeding without reproductive counseling or mitigation would create avoidable harm risk in a fertility-relevant patient.')
if inp.gnrh_agonist_planned:
plan.append('GnRH agonist co-therapy may reduce but does not eliminate gonadotoxicity risk.')
else:
plan.append('If treatment timing allows, discuss GnRH agonist co-therapy and specialist referral before exposure.')
if inp.alternative_less_gonadotoxic_induction_feasible:
plan.append('Because a less gonadotoxic option is considered feasible, shared decision-making about regimen selection is especially important.')
return plan
def alerts(inp: CycloOvaInput, score: float) -> List[str]:
out: List[str] = []
if inp.age >= 30:
out.append('Older reproductive age increases the probability of sustained ovarian injury after cyclophosphamide.')
if inp.oral_daily_exposure:
out.append('Oral daily cyclophosphamide is generally more gonadotoxic than intermittent pulse exposure.')
if inp.baseline_low_ovarian_reserve_or_prior_amenorrhea:
out.append('Baseline low ovarian reserve or prior amenorrhea lowers recovery margin.')
if score >= 35:
out.append('This tool supports counseling and triage intensity; it does not replace reproductive endocrinology consultation or individualized disease-control decisions.')
return out
def run_cyclo_ova(inp: CycloOvaInput) -> Dict[str, Any]:
score = total_score(inp)
return {
'input_summary': asdict(inp),
'ovarian_vulnerability': round(ovarian_vulnerability(inp), 2),
'exposure_burden': round(exposure_burden(inp), 2),
'mitigation_gap': round(mitigation_gap(inp), 2),
'total_score': score,
'risk_class': classify(score),
'recommended_actions': recommendations(inp, score),
'alerts': alerts(inp, score),
'limitations': [
'Evidence-informed heuristic model; not a validated probability calculator for premature ovarian insufficiency.',
'Most supporting data come from lupus and severe autoimmune-disease cohorts, so transportability to every indication is uncertain.',
'Ovarian reserve, menstrual recovery, and live-birth outcomes are related but not identical endpoints.',
'GnRH agonist protection is incomplete and should not substitute for counseling or fertility-preservation referral.',
'Definitive management requires individualized disease-severity, timing, and reproductive-goal assessment.'
]
}
if __name__ == '__main__':
demos = [
(
'Young patient with low cumulative pulse exposure and mitigation planned',
CycloOvaInput(age=24, diagnosis='ANCA-associated vasculitis', cumulative_planned_g=3.0, gnrh_agonist_planned=True, alternative_less_gonadotoxic_induction_feasible=True),
),
(
'Thirty-two-year-old with lupus nephritis needing higher cumulative pulse therapy',
CycloOvaInput(age=32, diagnosis='Lupus nephritis', cumulative_planned_g=9.0, severe_disease_requiring_repeated_cycles=True, fertility_desired_or_preservation_requested=True),
),
(
'Older reproductive-age patient with prior exposure, low reserve, and oral cyclophosphamide history',
CycloOvaInput(age=38, diagnosis='Systemic lupus erythematosus', cumulative_planned_g=14.0, oral_daily_exposure=True, prior_cyclophosphamide_exposure=True, baseline_low_ovarian_reserve_or_prior_amenorrhea=True, severe_disease_requiring_repeated_cycles=True, fertility_desired_or_preservation_requested=True),
),
]
print('=' * 78)
print('CYCLO-OVA — Cyclophosphamide-Associated Ovarian Failure Risk Stratification')
print('Authors: Dr. Erick Zamora-Tehozol, DNAI, RheumaAI')
print('=' * 78)
for label, demo in demos:
result = run_cyclo_ova(demo)
print(f'\n--- {label} ---')
print(json.dumps(result, indent=2))
Discussion (0)
to join the discussion.
No comments yet. Be the first to discuss this paper.