{
  "schemaVersion": 1,
  "slug": "life-path-number-calculator",
  "category": "everyday",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "a10d255c739792dbb8094897c2de96a70181824fba812534a4d7112d51d3e562",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/life-path-number-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": "s(n) = Σᵢ dᵢ, n = Σᵢ dᵢ × 10ⁱ, dᵢ ∈ {0,…,9}; r(n) = {n, n ≤ 9 ∨ n ∈ M; r(s(n)), n > 9 ∧ n ∉ M}; L = r(r(day) + r(month) + r(year))",
    "vars": [
      [
        "day",
        "birth day"
      ],
      [
        "month",
        "birth month"
      ],
      [
        "year",
        "birth year"
      ],
      [
        "r",
        "repeated digit sum"
      ],
      [
        "L",
        "life path number"
      ],
      [
        "s",
        "digit sum, s(n) = Σᵢ dᵢ"
      ],
      [
        "d",
        "digit of n, dᵢ ∈ {0,…,9}"
      ],
      [
        "M",
        "master-number set: {11,22,33} when kept, ∅ otherwise"
      ]
    ],
    "note": "The separate method reduces date components independently before adding them; all-at-once reduces their combined sum. If enabled, 11, 22 and 33 are retained. Numerology is traditional entertainment, not an assessment."
  },
  "externalEvidence": null,
  "contract": {
    "compute": "const rawDate=String(birthDate); const d=new Date(rawDate+'T00:00:00Z'); const validDate=/^\\d{4}-\\d{2}-\\d{2}$/.test(rawDate) && !Number.isNaN(d.getTime()) && d.toISOString().slice(0,10)===rawDate; if(!validDate) return { lifePath: null, dayNumber: null, monthNumber: null, yearNumber: null, meaning: null, note: null, __error: 'inputError' }; const reduce = (n) => { while (n > 9) { if (keepMaster === 'yes' && (n === 11 || n === 22 || n === 33)) return n; n = String(n).split('').reduce((a, b) => a+Number(b), 0); } return n; }; const day = Number.isFinite(d.getTime()) ? d.getUTCDate() : 0; const month = Number.isFinite(d.getTime()) ? d.getUTCMonth()+1 : 0; const year = Number.isFinite(d.getTime()) ? d.getUTCFullYear() : 0; const dayNumber = reduce(day); const monthNumber = reduce(month); const yearNumber = reduce(String(year).split('').reduce((a, b) => a+Number(b), 0)); const lifePath = method === 'allAtOnce' ? reduce(day+month+year) : reduce(dayNumber+monthNumber+yearNumber); const M = { 1: 'The leader — independent, driven and original', 2: 'The peacemaker — diplomatic and sensitive', 3: 'The communicator — creative and expressive', 4: 'The builder — practical and dependable', 5: 'The adventurer — curious and freedom-loving', 6: 'The nurturer — responsible and protective', 7: 'The seeker — analytical and introspective', 8: 'The achiever — ambitious and business-minded', 9: 'The humanitarian — generous and idealistic', 11: 'The intuitive — a master number of insight and inspiration', 22: 'The master builder — vision turned into practical reality', 33: 'The master teacher — guidance through compassion' }; return { lifePath, dayNumber, monthNumber, yearNumber, meaning: M[lifePath] || M[reduce(lifePath)] || 'No single traditional meaning', note: 'Numerology is a traditional practice, not an evidence-based assessment' };",
    "inputs": [
      {
        "name": "birthDate",
        "type": "date",
        "default": "1990-06-15",
        "step": 1
      },
      {
        "name": "keepMaster",
        "type": "select",
        "default": "yes",
        "options": [
          {
            "value": "yes"
          },
          {
            "value": "no"
          }
        ]
      },
      {
        "name": "method",
        "type": "select",
        "default": "separate",
        "options": [
          {
            "value": "separate"
          },
          {
            "value": "allAtOnce"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "lifePath",
        "precision": 0,
        "unit": ""
      },
      {
        "name": "dayNumber",
        "precision": 0,
        "unit": ""
      },
      {
        "name": "monthNumber",
        "precision": 0,
        "unit": ""
      },
      {
        "name": "yearNumber",
        "precision": 0,
        "unit": ""
      },
      {
        "name": "meaning",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "note",
        "precision": 0,
        "unit": "",
        "type": "text"
      }
    ],
    "interpret": null
  }
}
