{
  "schemaVersion": 1,
  "slug": "rising-sign-calculator",
  "category": "everyday",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "17e2fca80f9f773d14142f0109229dd1d06cb48ad53902ea6535498d5e095aee",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/rising-sign-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "H = (T - 6 - D + 24) mod 24; A = floor((2H) mod 12); g = round((15H) mod 30)",
    "vars": [
      [
        "T",
        "Birth time (24 h)"
      ],
      [
        "D",
        "1 with daylight saving, else 0"
      ],
      [
        "H",
        "Hours after assumed 06:00 sunrise"
      ],
      [
        "A",
        "Ascendant index 0–11, sign lookup"
      ]
    ],
    "note": "Sun sign uses calendar-date cutoffs. No ascendant is calculated because required birthplace, longitude and time-zone inputs are absent."
  },
  "externalEvidence": null,
  "contract": {
    "compute": "const SIGN=['Aries','Taurus','Gemini','Cancer','Leo','Virgo','Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces']; const d=new Date(birthDate+'T00:00:00Z'); const match=/^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(String(birthDate));const valid=!!match&&Number.isFinite(d.getTime())&&d.getUTCFullYear()===Number(match[1])&&d.getUTCMonth()+1===Number(match[2])&&d.getUTCDate()===Number(match[3]);if(!valid)return{sunSign:null,risingSign:null,accuracy:null,__error:'inputError'};const m=d.getUTCMonth()+1,day=d.getUTCDate();const cuts=[[1,20,10],[2,19,11],[3,21,0],[4,20,1],[5,21,2],[6,21,3],[7,23,4],[8,23,5],[9,23,6],[10,23,7],[11,22,8],[12,22,9]];const row=cuts[m-1];const sun=SIGN[day<row[1]?(row[2]+11)%12:row[2]];return{sunSign:sun,risingSign:'Not calculated',accuracy:'An accurate ascendant requires a complete birth date, exact local time, longitude and time zone. This page does not calculate an actual rising sign.'};",
    "inputs": [
      {
        "name": "birthDate",
        "type": "date",
        "default": "1990-06-15",
        "step": 1,
        "preserveEmpty": true,
        "requiredValue": true
      }
    ],
    "outputs": [
      {
        "name": "sunSign",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "risingSign",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "accuracy",
        "precision": 0,
        "unit": "",
        "type": "text"
      }
    ],
    "interpret": null
  }
}
