[
  {
    "id": "zero-burn-with-funds",
    "description": "Zero burn → runway_months 0, status danger",
    "input": {
      "emergency_fund": 10000,
      "investments": 0
    },
    "expect": {
      "result.runway_months": 0,
      "result.total_monthly_burn": 0,
      "result.total_funds": 10000,
      "result.status": "danger",
      "result.recommendation_code": "DANGER_DO_NOT_QUIT",
      "result.target.required_funds": 0,
      "result.target.additional_needed": 0,
      "result.target.months_to_save": 0
    }
  },
  {
    "id": "zero-funds-with-burn",
    "description": "Zero funds, positive burn → 0 months danger",
    "input": {
      "rent": 1000,
      "food": 400,
      "emergency_fund": 0,
      "investments": 0
    },
    "expect": {
      "result.monthly_burn": 1400,
      "result.total_monthly_burn": 1400,
      "result.total_funds": 0,
      "result.runway_months": 0,
      "result.status": "danger",
      "result.recommendation_code": "DANGER_DO_NOT_QUIT",
      "result.target.required_funds": 16800,
      "result.target.additional_needed": 16800,
      "result.target.months_to_save": 34
    }
  },
  {
    "id": "boundary-5-months-danger",
    "description": "Exactly 5 months → danger (below 6)",
    "input": {
      "rent": 1000,
      "emergency_fund": 5000
    },
    "expect": {
      "result.total_monthly_burn": 1000,
      "result.runway_months": 5,
      "result.status": "danger",
      "result.recommendation_code": "DANGER_DO_NOT_QUIT"
    }
  },
  {
    "id": "boundary-6-months-caution",
    "description": "Exactly 6 months → caution",
    "input": {
      "rent": 1000,
      "emergency_fund": 6000
    },
    "expect": {
      "result.runway_months": 6,
      "result.status": "caution",
      "result.recommendation_code": "CAUTION_KEEP_JOB"
    }
  },
  {
    "id": "boundary-11-months-caution",
    "description": "Exactly 11 months → caution (below 12)",
    "input": {
      "rent": 1000,
      "emergency_fund": 11000
    },
    "expect": {
      "result.runway_months": 11,
      "result.status": "caution",
      "result.recommendation_code": "CAUTION_KEEP_JOB"
    }
  },
  {
    "id": "boundary-12-months-safe",
    "description": "Exactly 12 months → safe",
    "input": {
      "rent": 1000,
      "emergency_fund": 12000
    },
    "expect": {
      "result.runway_months": 12,
      "result.status": "safe",
      "result.recommendation_code": "SAFE_SOLID",
      "result.target.additional_needed": 0,
      "result.target.months_to_save": 0
    }
  },
  {
    "id": "floor-partial-month",
    "description": "Math.floor: 11999/1000 = 11 months",
    "input": {
      "rent": 1000,
      "emergency_fund": 11999
    },
    "expect": {
      "result.runway_months": 11,
      "result.status": "caution"
    }
  },
  {
    "id": "full-breakdown-project-costs",
    "description": "Living + project costs summed correctly",
    "input": {
      "rent": 1500,
      "food": 500,
      "utilities": 150,
      "insurance": 200,
      "transportation": 100,
      "other": 50,
      "domain": 10,
      "software": 80,
      "ads": 110,
      "emergency_fund": 8000,
      "investments": 4000,
      "target_months": 12,
      "savings_rate": 500
    },
    "expect": {
      "result.monthly_burn": 2500,
      "result.project_costs": 200,
      "result.total_monthly_burn": 2700,
      "result.total_funds": 12000,
      "result.runway_months": 4,
      "result.status": "danger",
      "result.recommendation_code": "DANGER_DO_NOT_QUIT",
      "result.target.required_funds": 32400,
      "result.target.additional_needed": 20400,
      "result.target.months_to_save": 41
    }
  },
  {
    "id": "target-already-met",
    "description": "Funds cover target_months → additional_needed 0",
    "input": {
      "rent": 2000,
      "emergency_fund": 30000,
      "target_months": 12
    },
    "expect": {
      "result.runway_months": 15,
      "result.status": "safe",
      "result.target.required_funds": 24000,
      "result.target.additional_needed": 0,
      "result.target.months_to_save": 0
    }
  },
  {
    "id": "custom-target-and-savings",
    "description": "Custom target_months=18 and savings_rate=1000",
    "input": {
      "rent": 1000,
      "food": 500,
      "emergency_fund": 9000,
      "target_months": 18,
      "savings_rate": 1000
    },
    "expect": {
      "result.total_monthly_burn": 1500,
      "result.runway_months": 6,
      "result.status": "caution",
      "result.target.required_funds": 27000,
      "result.target.additional_needed": 18000,
      "result.target.months_to_save": 18
    }
  },
  {
    "id": "savings-rate-zero-cannot-save",
    "description": "Need more funds but savings_rate=0 → months_to_save null",
    "input": {
      "rent": 1000,
      "emergency_fund": 3000,
      "target_months": 12,
      "savings_rate": 0
    },
    "expect": {
      "result.runway_months": 3,
      "result.status": "danger",
      "result.target.additional_needed": 9000,
      "result.target.months_to_save": null
    }
  },
  {
    "id": "safe-long-runway",
    "description": "Large funds → safe, target met",
    "input": {
      "rent": 800,
      "food": 300,
      "software": 100,
      "emergency_fund": 20000,
      "investments": 10000,
      "target_months": 12
    },
    "expect": {
      "result.total_monthly_burn": 1200,
      "result.total_funds": 30000,
      "result.runway_months": 25,
      "result.status": "safe",
      "result.recommendation_code": "SAFE_SOLID",
      "result.target.additional_needed": 0
    }
  },
  {
    "id": "ceil-savings-months",
    "description": "ceil: need 1001 at 500/mo → 3 months",
    "input": {
      "rent": 1000,
      "emergency_fund": 10999,
      "target_months": 12,
      "savings_rate": 500
    },
    "expect": {
      "result.runway_months": 10,
      "result.status": "caution",
      "result.target.required_funds": 12000,
      "result.target.additional_needed": 1001,
      "result.target.months_to_save": 3
    }
  },
  {
    "id": "all-defaults-empty",
    "description": "Empty object: all zeros → danger, target met at 0",
    "input": {},
    "expect": {
      "result.total_monthly_burn": 0,
      "result.total_funds": 0,
      "result.runway_months": 0,
      "result.status": "danger",
      "result.target.required_funds": 0,
      "result.target.additional_needed": 0,
      "result.target.months_to_save": 0
    }
  }
]
