{
  "version": 3,
  "sources": ["/cdn/shop/t/33/assets/bb-budget.core.js?cb=bbpolish01_20260112"],
  "sourcesContent": ["/* bb-budget.core.js (DROP-IN REPLACEMENT)\r\n   - Core = state + parsing + calculations + master build/export helpers\r\n   - Depends on: bb-budget.util.js -> TYBH.util\r\n*/\r\n\r\n;(() => {\r\n  window.TYBH = window.TYBH || {};\r\n  const TYBH = window.TYBH;\r\n  const U = TYBH.util;\r\n\r\n  if (!U) {\r\n    console.error(\"[TYBH] util missing. Load bb-budget.util.js before core/ui.\");\r\n    return;\r\n  }\r\n\r\n  const {\r\n    stripBom, parseMaster, readKeyValueBlock, parseCsv,\r\n    num, isoToday, ymToday, toMonth, uid, uniq,\r\n    downloadText\r\n  } = U;\r\n\r\n  const DEFAULT_HEADER_TX = [\r\n    \"ID\",\"Date\",\"Month\",\"Type\",\"Person\",\"Account\",\"Category\",\"Subcategory\",\"Item\",\"Payee\",\"Amount\",\"Notes\",\r\n    \"Impulse\",\"ImpulseReason\",\"Flags\"\r\n  ];\r\n\r\n  // \u2705 legacy compatibility (UI / older HTML may read these directly)\r\n  TYBH.DEFAULT_HEADER_TX = TYBH.DEFAULT_HEADER_TX || DEFAULT_HEADER_TX;\r\n\r\n  const state = TYBH.state = TYBH.state || {\r\n    loaded: false,\r\n    settings: { currency:\"USD\", people:[\"Tin Lei\",\"Tin Wing\"] },\r\n    rules: {\r\n      mode: \"BLOCK\",\r\n      eatCats: \"Eat Out, Dining, Restaurant, Takeout\",\r\n      eatWeekly: 120,\r\n      impulseWeekly: 80,\r\n      nonEssCats: \"Fun, Shopping, Entertainment\",\r\n      nonEssDaily: 40,\r\n    },\r\n    grow: { investMonthly: 150, investAccount: \"Brokerage\" },\r\n    accounts: [],\r\n    bills: [],\r\n    move: [],\r\n    budgets: [],\r\n    goals: [],\r\n    categories: [],\r\n    tx: []\r\n  };\r\n\r\n  function resetDataArrays(){\r\n    state.accounts = [];\r\n    state.bills = [];\r\n    state.move = [];\r\n    state.budgets = [];\r\n    state.goals = [];\r\n    state.categories = [];\r\n    state.tx = [];\r\n  }\r\n\r\n  function allMonths(){\r\n    const ms = uniq((state.tx||[]).map(t=>t.Month).filter(Boolean).concat([ymToday()]));\r\n    ms.sort((a,b)=>b.localeCompare(a));\r\n    return ms;\r\n  }\r\n\r\n  function monthTx(month){\r\n    const m = String(month||\"\").trim();\r\n    return m ? state.tx.filter(t=>t.Month===m) : [...state.tx];\r\n  }\r\n\r\n  function mergeAccountsByName(){\r\n    const map = new Map();\r\n    const out = [];\r\n    for(const a0 of (state.accounts||[])){\r\n      const name = String(a0.Account||\"\").trim();\r\n      if(!name) continue;\r\n\r\n      const a = {\r\n        Account: name,\r\n        Owner: String(a0.Owner||\"\"),\r\n        Type: String(a0.Type||\"\"),\r\n        Nature: String(a0.Nature||\"ASSET\").toUpperCase()===\"LIABILITY\" ? \"LIABILITY\" : \"ASSET\",\r\n        StartBalance: num(a0.StartBalance),\r\n        BankBalance: (String(a0.BankBalance??\"\").trim()===\"\" ? \"\" : num(a0.BankBalance)),\r\n        Active: String(a0.Active||\"Y\")\r\n      };\r\n\r\n      if(!map.has(name)){\r\n        map.set(name, a);\r\n        out.push(a);\r\n      }else{\r\n        const t = map.get(name);\r\n        t.StartBalance = num(t.StartBalance) + num(a.StartBalance);\r\n\r\n        if((t.BankBalance===\"\" || t.BankBalance==null) && String(a.BankBalance??\"\").trim()!==\"\"){\r\n          t.BankBalance = num(a.BankBalance);\r\n        }\r\n\r\n        if(!t.Owner && a.Owner) t.Owner = a.Owner;\r\n        if(!t.Type && a.Type) t.Type = a.Type;\r\n        if(!t.Nature && a.Nature) t.Nature = a.Nature;\r\n\r\n        const tN = String(t.Active||\"Y\").trim().toUpperCase()===\"N\";\r\n        const aN = String(a.Active||\"Y\").trim().toUpperCase()===\"N\";\r\n        if(tN && !aN) t.Active = a.Active;\r\n      }\r\n    }\r\n    state.accounts = out;\r\n  }\r\n\r\n  function loadTransactionsCsv(text, opts){\r\n    opts = opts || {};\r\n    text = stripBom(text);\r\n    const rows = parseCsv((text.trim()+\"\\n\"));\r\n    if(!rows.length) throw new Error(\"CSV is empty.\");\r\n\r\n    const headRaw = (rows[0]||[]).map(h=>String(h||\"\").trim());\r\n    if(headRaw[0]) headRaw[0] = headRaw[0].replace(/^\\uFEFF/,\"\");\r\n\r\n    function normKey(x){\r\n      return String(x || \"\").toLowerCase().trim().replace(/[^a-z0-9]+/g,\"\");\r\n    }\r\n\r\n    const headMap = {};\r\n    const headKeys = [];\r\n    for(let i=0;i<headRaw.length;i++){\r\n      const k = normKey(headRaw[i]);\r\n      if(!k) continue;\r\n      if(headMap[k] === undefined){\r\n        headMap[k] = i;\r\n        headKeys.push(k);\r\n      }\r\n    }\r\n\r\n    function findIndex(name){\r\n      const t = normKey(name);\r\n      if(headMap[t] !== undefined) return headMap[t];\r\n      for(const k of headKeys){ if(k === t) return headMap[k]; }\r\n      for(const k of headKeys){ if(k.startsWith(t) || k.includes(t)) return headMap[k]; }\r\n      return undefined;\r\n    }\r\n\r\n    const get = (row, name)=>{\r\n      const i = findIndex(name);\r\n      return (i !== undefined) ? (row[i] ?? \"\") : \"\";\r\n    };\r\n\r\n    const getAny = (row, names)=>{\r\n      for(const n of names){\r\n        const v = get(row, n);\r\n        if(String(v ?? \"\").trim() !== \"\") return v;\r\n      }\r\n      return \"\";\r\n    };\r\n\r\n    const hasID = findIndex(\"ID\") !== undefined;\r\n    const hasDate = findIndex(\"Date\") !== undefined;\r\n\r\n    const out = [];\r\n    for(let i=1;i<rows.length;i++){\r\n      const r = rows[i];\r\n      if(!r || !r.length) continue;\r\n\r\n      const rowHasAny = r.some(c=>String(c ?? \"\").trim() !== \"\");\r\n      if(!rowHasAny) continue;\r\n\r\n      const rawID = hasID ? getAny(r, [\"ID\",\"TxID\",\"TransactionID\"]) : (r[0]||\"\");\r\n      const rawDate = hasDate ? getAny(r, [\"Date\",\"TransactionDate\",\"TxDate\"]) : (r[1]||\"\");\r\n\r\n      const obj = {\r\n        ID: String(rawID||\"\").trim(),\r\n        Date: String(rawDate||\"\").trim().slice(0,10),\r\n        Month: String(getAny(r, [\"Month\"])) || \"\",\r\n        Type: String(getAny(r, [\"Type\"])) || \"\",\r\n        Person: String(getAny(r, [\"Person\",\"Name\",\"Owner\"])) || \"\",\r\n        Account: String(getAny(r, [\"Account\",\"Acct\",\"AccountName\"])) || \"\",\r\n        Category: String(getAny(r, [\"Category\",\"Cat\"])) || \"\",\r\n        Subcategory: String(getAny(r, [\"Subcategory\",\"SubCat\",\"SubcategoryName\"])) || \"\",\r\n        Item: String(getAny(r, [\"Item\",\"Code\",\"Template\"])) || \"\",\r\n        Payee: String(getAny(r, [\"Payee\",\"Merchant\",\"Vendor\"])) || \"\",\r\n        Amount: num(getAny(r, [\"Amount\",\"Amt\",\"Value\",\"Total\"])),\r\n        Notes: String(getAny(r, [\"Notes\",\"Memo\",\"Description\"])) || \"\",\r\n        Impulse: String(getAny(r, [\"Impulse\",\"ImpulseFlag\"])) || \"N\",\r\n        ImpulseReason: String(getAny(r, [\"ImpulseReason\",\"Reason\"])) || \"\",\r\n        Scope: String(getAny(r, [\"Scope\",\"BusinessPersonal\",\"BP\",\"Use\",\"UseType\"])) || \"\",\r\n        Receipt: String(getAny(r, [\"Receipt\",\"ReceiptURL\",\"ReceiptLink\",\"Link\",\"URL\"])) || \"\",\r\n        Flags: String(getAny(r, [\"Flags\",\"Flag\",\"Tags\"])) || \"\"\r\n      };\r\n\r\n      obj.ID = obj.ID || uid();\r\n      obj.Date = (obj.Date || isoToday()).slice(0,10);\r\n\r\n      // \u2705 keep Month if provided, else derive from Date\r\n      obj.Month = String(obj.Month||\"\").trim() || toMonth(obj.Date);\r\n\r\n      obj.Type = (obj.Type===\"Income\" || obj.Type===\"Expense\") ? obj.Type : \"Expense\";\r\n      obj.Amount = Math.abs(num(obj.Amount));\r\n      obj.Impulse = (String(obj.Impulse||\"N\").toUpperCase()===\"Y\") ? \"Y\" : \"N\";\r\n      obj.Scope = (String(obj.Scope||\"\").trim().toLowerCase()===\"business\") ? \"Business\" : (String(obj.Scope||\"\").trim() ? \"Personal\" : \"Personal\");\r\n      obj.Receipt = String(obj.Receipt||\"\").trim();\r\n\r\n      const meaningful =\r\n        (String(obj.Person||obj.Account||obj.Category||obj.Subcategory||obj.Item||obj.Payee||obj.Notes||\"\").trim() !== \"\") ||\r\n        (obj.Amount > 0);\r\n\r\n      if(!meaningful) continue;\r\n      out.push(obj);\r\n    }\r\n\r\n  // optional de-dup (for messy bank exports / repeated imports)\r\n  if(opts.dedup){\r\n    const seen = new Set();\r\n    const deduped = [];\r\n    for(const t of out){\r\n      const key = (t.ID && String(t.ID).trim()) ? (\"id:\"+String(t.ID).trim()) : (\r\n        [\r\n          String(t.Date||\"\"),\r\n          String(t.Person||\"\"),\r\n          String(t.Account||\"\"),\r\n          String(t.Type||\"\"),\r\n          String(t.Category||\"\"),\r\n          String(t.Subcategory||\"\"),\r\n          String(t.Item||\"\"),\r\n          String(t.Payee||\"\"),\r\n          // amount normalized\r\n          (Number(t.Amount||0).toFixed(2)),\r\n          String(t.Notes||\"\")\r\n        ].map(s=>String(s).toLowerCase().trim().replace(/\\s+/g,\" \")).join(\"|\")\r\n      );\r\n      if(seen.has(key)) continue;\r\n      seen.add(key);\r\n      deduped.push(t);\r\n    }\r\n    out.length = 0;\r\n    Array.prototype.push.apply(out, deduped);\r\n  }\r\n\r\n  state.tx = out;\r\n}\r\n\r\n  function loadFromMaster(text, opts){\r\n    opts = opts || {};\r\n    text = stripBom(text);\r\n    const blocks = parseMaster(text);\r\n\r\n    resetDataArrays();\r\n\r\n    // If not a master file, treat as tx-only\r\n    if(!Object.keys(blocks).length){\r\n      loadTransactionsCsv(text, opts);\r\n      state.loaded = true;\r\n      mergeAccountsByName();\r\n      return;\r\n    }\r\n\r\n    if(blocks.Settings){\r\n      const map = readKeyValueBlock(blocks.Settings);\r\n      const currency = map.Currency || \"USD\";\r\n      const people = (map.People || \"Tin Lei,Tin Wing\").split(\",\").map(s=>s.trim()).filter(Boolean);\r\n      state.settings.currency = currency;\r\n      state.settings.people = people.length ? people : [\"Tin Lei\",\"Tin Wing\"];\r\n    }\r\n\r\n    if(blocks.Rules){\r\n      const map = readKeyValueBlock(blocks.Rules);\r\n      state.rules.mode = (map.Mode || state.rules.mode || \"BLOCK\").toUpperCase();\r\n      state.rules.eatCats = map.EatCats || state.rules.eatCats;\r\n      state.rules.eatWeekly = num(map.EatWeekly || state.rules.eatWeekly);\r\n      state.rules.impulseWeekly = num(map.ImpulseWeekly || state.rules.impulseWeekly);\r\n      state.rules.nonEssCats = map.NonEssCats || state.rules.nonEssCats;\r\n      state.rules.nonEssDaily = num(map.NonEssDaily || state.rules.nonEssDaily);\r\n\r\n      state.grow.investMonthly = num(map.InvestMonthly || state.grow.investMonthly);\r\n      state.grow.investAccount = map.InvestAccount || state.grow.investAccount;\r\n    }\r\n\r\n    if(blocks.Accounts){\r\n      const rows = parseCsv(blocks.Accounts);\r\n      const head = rows[0] || [];\r\n      const idx = (name)=>head.indexOf(name);\r\n      for(let i=1;i<rows.length;i++){\r\n        const r = rows[i];\r\n        if(!r || !r.length) continue;\r\n        const a = {\r\n          Account: r[idx(\"Account\")] || \"\",\r\n          Owner: r[idx(\"Owner\")] || \"\",\r\n          Type: r[idx(\"Type\")] || \"\",\r\n          Nature: (r[idx(\"Nature\")] || \"ASSET\"),\r\n          StartBalance: num(r[idx(\"StartBalance\")]),\r\n          BankBalance: (r[idx(\"BankBalance\")] === \"\" ? \"\" : num(r[idx(\"BankBalance\")])),\r\n          Active: (r[idx(\"Active\")] || \"Y\")\r\n        };\r\n        if(String(a.Account).trim()) state.accounts.push(a);\r\n      }\r\n    }\r\n\r\n    if(blocks.Bills){\r\n      const rows = parseCsv(blocks.Bills);\r\n      const head = rows[0] || [];\r\n      const idx = (name)=>head.indexOf(name);\r\n      for(let i=1;i<rows.length;i++){\r\n        const r = rows[i];\r\n        if(!r || !r.length) continue;\r\n        const b = {\r\n          BillName: r[idx(\"BillName\")] || \"\",\r\n          Amount: num(r[idx(\"Amount\")]),\r\n          DueDay: num(r[idx(\"DueDay\")]),\r\n          Account: r[idx(\"Account\")] || \"\",\r\n          AutoPay: (r[idx(\"AutoPay\")] || \"N\"),\r\n          Notes: r[idx(\"Notes\")] || \"\",\r\n          Active: (r[idx(\"Active\")] || \"Y\")\r\n        };\r\n        if(String(b.BillName).trim()) state.bills.push(b);\r\n      }\r\n    }\r\n\r\n    if(blocks.Move){\r\n      const rows = parseCsv(blocks.Move);\r\n      const head = rows[0] || [];\r\n      const idx = (name)=>head.indexOf(name);\r\n      for(let i=1;i<rows.length;i++){\r\n        const r = rows[i];\r\n        if(!r || !r.length) continue;\r\n        const it = {\r\n          Item: r[idx(\"Item\")] || \"\",\r\n          Kind: r[idx(\"Kind\")] || \"One-time\",\r\n          Amount: num(r[idx(\"Amount\")]),\r\n          Notes: r[idx(\"Notes\")] || \"\",\r\n          Active: (r[idx(\"Active\")] || \"Y\")\r\n        };\r\n        if(String(it.Item).trim()) state.move.push(it);\r\n      }\r\n    }\r\n\r\n    if(blocks.Budgets){\r\n      const rows = parseCsv(blocks.Budgets);\r\n      const head = rows[0] || [];\r\n      const idx = (name)=>head.indexOf(name);\r\n      for(let i=1;i<rows.length;i++){\r\n        const r = rows[i];\r\n        if(!r || !r.length) continue;\r\n        const b = {\r\n          Month: r[idx(\"Month\")] || \"\",\r\n          Type: r[idx(\"Type\")] || \"Expense\",\r\n          Category: r[idx(\"Category\")] || \"\",\r\n          BudgetAmount: num(r[idx(\"BudgetAmount\")]),\r\n          Notes: r[idx(\"Notes\")] || \"\",\r\n          Active: (r[idx(\"Active\")] || \"Y\")\r\n        };\r\n        if(String(b.Month).trim() && String(b.Category).trim()) state.budgets.push(b);\r\n      }\r\n    }\r\n\r\n    \r\n    if(blocks.Categories){\r\n      const rows = parseCsv(blocks.Categories);\r\n      const head = rows[0] || [];\r\n      const idx = (name)=>head.indexOf(name);\r\n      for(let i=1;i<rows.length;i++){\r\n        const r = rows[i];\r\n        if(!r || !r.length) continue;\r\n        const c = {\r\n          Type: (r[idx(\"Type\")] || \"Expense\"),\r\n          Category: r[idx(\"Category\")] || \"\",\r\n          Subcategory: r[idx(\"Subcategory\")] || \"\",\r\n          Active: (r[idx(\"Active\")] || \"Y\"),\r\n          Tax: (r[idx(\"Tax\")] || \"\"),\r\n          TaxNote: (r[idx(\"TaxNote\")] || \"\")\r\n        };\r\n        if(String(c.Category).trim()) state.categories.push(c);\r\n      }\r\n    }\r\nif(blocks.Goals){\r\n      const rows = parseCsv(blocks.Goals);\r\n      const head = rows[0] || [];\r\n      const idx = (name)=>head.indexOf(name);\r\n      for(let i=1;i<rows.length;i++){\r\n        const r = rows[i];\r\n        if(!r || !r.length) continue;\r\n        const g = {\r\n          GoalName: r[idx(\"GoalName\")] || \"\",\r\n          TargetAmount: num(r[idx(\"TargetAmount\")]),\r\n          CurrentAmount: num(r[idx(\"CurrentAmount\")]),\r\n          Notes: r[idx(\"Notes\")] || \"\",\r\n          Active: (r[idx(\"Active\")] || \"Y\")\r\n        };\r\n        if(String(g.GoalName).trim()) state.goals.push(g);\r\n      }\r\n    }\r\n\r\n    if(blocks.Transactions){\r\n      loadTransactionsCsv(blocks.Transactions, opts);\r\n    }else{\r\n      state.tx = [];\r\n    }\r\n\r\n    state.loaded = true;\r\n    mergeAccountsByName();\r\n  }\r\n\r\n  function budgetFor(month, type, category){\r\n    const m = String(month||\"\").trim();\r\n    const typ = String(type||\"Expense\").trim();\r\n    const cat = String(category||\"\").trim();\r\n    const row = state.budgets.find(b =>\r\n      String(b.Active||\"Y\").toUpperCase()!==\"N\" &&\r\n      b.Month===m && b.Type===typ && String(b.Category||\"\").trim()===cat\r\n    );\r\n    return row ? num(row.BudgetAmount) : null;\r\n  }\r\n\r\n  function sumTxWhere(fn){\r\n    let sum=0;\r\n    for(const t of state.tx){\r\n      if(fn(t)) sum += num(t.Amount);\r\n    }\r\n    return sum;\r\n  }\r\n\r\n  function spentFor(month, type, category){\r\n    const m = String(month||\"\").trim();\r\n    const typ = String(type||\"Expense\").trim();\r\n    const cat = String(category||\"\").trim();\r\n    return sumTxWhere(t => t.Month===m && t.Type===typ && String(t.Category||\"\").trim()===cat);\r\n  }\r\n\r\n  function startOfWeek(d){ return U.startOfWeek(d); }\r\n  function endOfWeek(d){ return U.endOfWeek(d); }\r\n  function isoToDate(s){ return U.isoToDate(s); }\r\n\r\n  function parseKeywords(s){ return U.parseKeywords(s); }\r\n  function catMatches(cat, keywords){ return U.catMatches(cat, keywords); }\r\n\r\n  function evalWarningsForTx(tx, includeTx=true){\r\n    const warns = [];\r\n    if(!tx || tx.Type!==\"Expense\") return warns;\r\n\r\n    const d = isoToDate(tx.Date || isoToday());\r\n    const wS = startOfWeek(d);\r\n    const wE = endOfWeek(d);\r\n\r\n    const eatKeys = parseKeywords(state.rules.eatCats);\r\n    const nonKeys = parseKeywords(state.rules.nonEssCats);\r\n\r\n    const isEat = catMatches(tx.Category, eatKeys);\r\n    const isNon = catMatches(tx.Category, nonKeys);\r\n    const isImp = (String(tx.Impulse||\"N\").toUpperCase()===\"Y\");\r\n\r\n    const dateISO = String(tx.Date||\"\").slice(0,10);\r\n\r\n    const eatTotal = sumTxWhere(t=>{\r\n      if(t.Type!==\"Expense\") return false;\r\n      const td = isoToDate(t.Date);\r\n      return td>=wS && td<=wE && catMatches(t.Category, eatKeys);\r\n    }) + (includeTx && isEat ? num(tx.Amount) : 0);\r\n\r\n    const impTotal = sumTxWhere(t=>{\r\n      if(t.Type!==\"Expense\") return false;\r\n      const td = isoToDate(t.Date);\r\n      return td>=wS && td<=wE && String(t.Impulse||\"N\").toUpperCase()===\"Y\";\r\n    }) + (includeTx && isImp ? num(tx.Amount) : 0);\r\n\r\n    const nonDayTotal = sumTxWhere(t=>{\r\n      if(t.Type!==\"Expense\") return false;\r\n      return String(t.Date||\"\").slice(0,10)===dateISO && catMatches(t.Category, nonKeys);\r\n    }) + (includeTx && isNon ? num(tx.Amount) : 0);\r\n\r\n    const eatMax = num(state.rules.eatWeekly);\r\n    const impMax = num(state.rules.impulseWeekly);\r\n    const nonMax = num(state.rules.nonEssDaily);\r\n\r\n    const money = U.money;\r\n\r\n    if(eatMax>0 && isEat && eatTotal > eatMax){\r\n      warns.push(`Eat Out weekly max exceeded: ${money(eatTotal)} > ${money(eatMax)} (week of ${wS.toISOString().slice(0,10)})`);\r\n    }\r\n    if(impMax>0 && isImp && impTotal > impMax){\r\n      warns.push(`Impulse weekly max exceeded: ${money(impTotal)} > ${money(impMax)} (week of ${wS.toISOString().slice(0,10)})`);\r\n    }\r\n    if(nonMax>0 && isNon && nonDayTotal > nonMax){\r\n      warns.push(`Non-essential daily max exceeded: ${money(nonDayTotal)} > ${money(nonMax)} (on ${dateISO})`);\r\n    }\r\n\r\n    const b = budgetFor(tx.Month, \"Expense\", tx.Category);\r\n    if(b!==null && b>0){\r\n      const spent = spentFor(tx.Month, \"Expense\", tx.Category);\r\n      const after = spent + num(tx.Amount);\r\n      if(after > b){\r\n        warns.push(`Category budget exceeded (${tx.Category}): ${money(after)} > ${money(b)} (month ${tx.Month})`);\r\n      }\r\n    }\r\n\r\n    const hasBud = state.budgets.some(x=>String(x.Active||\"Y\").toUpperCase()!==\"N\" && x.Month===tx.Month && x.Type===\"Expense\");\r\n    if(hasBud){\r\n      const totalBud = state.budgets\r\n        .filter(x=>String(x.Active||\"Y\").toUpperCase()!==\"N\" && x.Month===tx.Month && x.Type===\"Expense\")\r\n        .reduce((a,x)=>a+num(x.BudgetAmount),0);\r\n      const spentBud = state.tx\r\n        .filter(t=>t.Month===tx.Month && t.Type===\"Expense\")\r\n        .reduce((a,t)=>a+num(t.Amount),0) + num(tx.Amount);\r\n      if(totalBud>0 && spentBud > totalBud){\r\n        warns.push(`Total monthly budgets exceeded: ${money(spentBud)} > ${money(totalBud)} (month ${tx.Month})`);\r\n      }\r\n    }\r\n\r\n    return warns;\r\n  }\r\n\r\n  function applyFlagsForTx(tx, warnings, overridden=false){\r\n    const flags = new Set(String(tx.Flags||\"\").split(\",\").map(x=>x.trim()).filter(Boolean));\r\n    if(warnings && warnings.length) flags.add(\"overbudget\");\r\n    if(overridden) flags.add(\"override\");\r\n    tx.Flags = Array.from(flags).join(\",\");\r\n  }\r\n\r\n  function computedBalanceFor(accountName){\r\n    const acc = state.accounts.find(a=>a.Account===accountName);\r\n    const start = acc ? num(acc.StartBalance) : 0;\r\n    const nature = String(acc?.Nature || \"ASSET\").toUpperCase();\r\n\r\n    let delta = 0;\r\n    for(const t of state.tx){\r\n      if(t.Account!==accountName) continue;\r\n\r\n      if(nature===\"LIABILITY\"){\r\n        if(t.Type===\"Expense\") delta += num(t.Amount);\r\n        if(t.Type===\"Income\") delta -= num(t.Amount);\r\n      }else{\r\n        if(t.Type===\"Income\") delta += num(t.Amount);\r\n        if(t.Type===\"Expense\") delta -= num(t.Amount);\r\n      }\r\n    }\r\n    return start + delta;\r\n  }\r\n\r\n  function _iso10(s){\r\n    const x = String(s||\"\").trim();\r\n    if(!x) return \"\";\r\n    // already ISO\r\n    if(/^\\d{4}-\\d{2}-\\d{2}/.test(x)) return x.slice(0,10);\r\n    // try Date parse\r\n    const d = new Date(x);\r\n    if(!isFinite(d.getTime())) return \"\";\r\n    const yy = d.getFullYear();\r\n    const mm = String(d.getMonth()+1).padStart(2,\"0\");\r\n    const dd = String(d.getDate()).padStart(2,\"0\");\r\n    return `${yy}-${mm}-${dd}`;\r\n  }\r\n\r\n  function _dayBefore(iso){\r\n    const i = _iso10(iso);\r\n    if(!i) return \"\";\r\n    const d = new Date(i+\"T00:00:00\");\r\n    d.setDate(d.getDate()-1);\r\n    return d.toISOString().slice(0,10);\r\n  }\r\n\r\n  function computedBalanceForAsOf(accountName, endDateISO){\r\n    const endISO = _iso10(endDateISO);\r\n    if(!endISO) return computedBalanceFor(accountName);\r\n\r\n    const acc = state.accounts.find(a=>a.Account===accountName);\r\n    const start = acc ? num(acc.StartBalance) : 0;\r\n    const nature = String(acc?.Nature || \"ASSET\").toUpperCase();\r\n\r\n    let delta = 0;\r\n    for(const t of state.tx){\r\n      if(t.Account!==accountName) continue;\r\n      const dt = _iso10(t.Date);\r\n      if(!dt) continue;\r\n      if(dt > endISO) continue;\r\n\r\n      if(nature===\"LIABILITY\"){\r\n        if(t.Type===\"Expense\") delta += num(t.Amount);\r\n        if(t.Type===\"Income\") delta -= num(t.Amount);\r\n      }else{\r\n        if(t.Type===\"Income\") delta += num(t.Amount);\r\n        if(t.Type===\"Expense\") delta -= num(t.Amount);\r\n      }\r\n    }\r\n    return start + delta;\r\n  }\r\n\r\n  function reconcileLedger(accountName, startISO, endISO){\r\n    const s = _iso10(startISO);\r\n    const e = _iso10(endISO);\r\n    const acc = state.accounts.find(a=>a.Account===accountName);\r\n    const nature = String(acc?.Nature || \"ASSET\").toUpperCase();\r\n\r\n    const openBal = computedBalanceForAsOf(accountName, _dayBefore(s));\r\n    let running = openBal;\r\n\r\n    const rows = (state.tx||[])\r\n      .filter(t=>t.Account===accountName)\r\n      .map(t=>({ t, d:_iso10(t.Date) }))\r\n      .filter(x=>x.d && (!s || x.d>=s) && (!e || x.d<=e))\r\n      .sort((a,b)=>a.d.localeCompare(b.d) || String(a.t.ID||\"\").localeCompare(String(b.t.ID||\"\")));\r\n\r\n    const out = [];\r\n    let incomeTotal = 0;\r\n    let expenseTotal = 0;\r\n    let netEffect = 0;\r\n    for(const x of rows){\r\n      const t = x.t;\r\n      const amt = num(t.Amount);\r\n      if(t.Type===\"Income\") incomeTotal += amt;\r\n      if(t.Type===\"Expense\") expenseTotal += amt;\r\n      let effect = 0;\r\n      if(nature===\"LIABILITY\"){\r\n        if(t.Type===\"Expense\") effect = +amt;\r\n        else if(t.Type===\"Income\") effect = -amt;\r\n      }else{\r\n        if(t.Type===\"Income\") effect = +amt;\r\n        else if(t.Type===\"Expense\") effect = -amt;\r\n      }\r\n      netEffect += effect;\r\n      running = running + effect;\r\n      out.push({\r\n        Date: x.d,\r\n        Type: String(t.Type||\"\"),\r\n        Category: String(t.Category||\"\"),\r\n        Payee: String(t.Payee||\"\"),\r\n        Amount: amt,\r\n        Effect: effect,\r\n        Running: running\r\n      });\r\n    }\r\n\r\n    const expectedEnd = computedBalanceForAsOf(accountName, e);\r\n    return { openBal, expectedEnd, rows: out, incomeTotal, expenseTotal, netEffect };\r\n  }\r\n\r\n  function daysInMonth(y, mIndex){ return U.daysInMonth(y,mIndex); }\r\n\r\n  function nextBillDueDate(bill, fromDate){\r\n    const dueDay = Math.max(1, Math.min(31, num(bill.DueDay)||1));\r\n    let y = fromDate.getFullYear();\r\n    let m = fromDate.getMonth();\r\n\r\n    function makeDate(yy, mm){\r\n      const dim = daysInMonth(yy, mm);\r\n      const dd = Math.max(1, Math.min(dim, dueDay));\r\n      const d = new Date(yy, mm, dd);\r\n      d.setHours(0,0,0,0);\r\n      return d;\r\n    }\r\n\r\n    let d = makeDate(y,m);\r\n    const start = new Date(fromDate.getFullYear(), fromDate.getMonth(), fromDate.getDate());\r\n    start.setHours(0,0,0,0);\r\n    if(d < start){\r\n      m += 1;\r\n      if(m>11){ m=0; y+=1; }\r\n      d = makeDate(y,m);\r\n    }\r\n    return d;\r\n  }\r\n\r\n  function billsDueNext7Days(){\r\n    const now = new Date();\r\n    const start = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n    start.setHours(0,0,0,0);\r\n    const end = new Date(start);\r\n    end.setDate(end.getDate()+7);\r\n    end.setHours(23,59,59,999);\r\n\r\n    return (state.bills||[])\r\n      .filter(b=>String(b.Active||\"Y\").toUpperCase()!==\"N\")\r\n      .map(b=>{\r\n        const due = nextBillDueDate(b, start);\r\n        return { ...b, _due: due, DueISO: due.toISOString().slice(0,10) };\r\n      })\r\n      .filter(x=>x._due>=start && x._due<=end)\r\n      .sort((a,b)=>a._due-b._due);\r\n  }\r\n\r\n  function plannedRemainForMonth(month){\r\n    const m = String(month||\"\").trim();\r\n    const buds = state.budgets.filter(b=>b.Month===m && b.Type===\"Expense\" && String(b.Active||\"Y\").toUpperCase()!==\"N\");\r\n    if(!buds.length) return 0;\r\n    let remain = 0;\r\n    for(const b of buds){\r\n      const spent = spentFor(m, \"Expense\", b.Category);\r\n      remain += (num(b.BudgetAmount) - spent);\r\n    }\r\n    return remain;\r\n  }\r\n\r\n  function buildMasterCsvText(){\r\n    mergeAccountsByName();\r\n\r\n    const settingsRows = [\r\n      [\"Key\",\"Value\"],\r\n      [\"Currency\", state.settings.currency || \"USD\"],\r\n      [\"People\", (state.settings.people||[]).join(\", \")]\r\n    ];\r\n\r\n    const rulesRows = [\r\n      [\"Key\",\"Value\"],\r\n      [\"Mode\", String(state.rules.mode||\"BLOCK\").toUpperCase()],\r\n      [\"EatCats\", state.rules.eatCats || \"\"],\r\n      [\"EatWeekly\", String(num(state.rules.eatWeekly))],\r\n      [\"ImpulseWeekly\", String(num(state.rules.impulseWeekly))],\r\n      [\"NonEssCats\", state.rules.nonEssCats || \"\"],\r\n      [\"NonEssDaily\", String(num(state.rules.nonEssDaily))],\r\n      [\"InvestMonthly\", String(num(state.grow.investMonthly))],\r\n      [\"InvestAccount\", state.grow.investAccount || \"\"]\r\n    ];\r\n\r\n    const accRows = [\r\n      [\"Account\",\"Owner\",\"Type\",\"Nature\",\"StartBalance\",\"BankBalance\",\"Active\"],\r\n      ...state.accounts.map(a=>[\r\n        a.Account||\"\",\r\n        a.Owner||\"\",\r\n        a.Type||\"\",\r\n        String(a.Nature||\"ASSET\").toUpperCase()===\"LIABILITY\" ? \"LIABILITY\" : \"ASSET\",\r\n        String(num(a.StartBalance)),\r\n        (String(a.BankBalance??\"\").trim()===\"\" ? \"\" : String(num(a.BankBalance))),\r\n        String(a.Active||\"Y\")\r\n      ])\r\n    ];\r\n\r\n    const billRows = [\r\n      [\"BillName\",\"Amount\",\"DueDay\",\"Account\",\"AutoPay\",\"Notes\",\"Active\"],\r\n      ...state.bills.map(b=>[\r\n        b.BillName||\"\",\r\n        String(num(b.Amount)),\r\n        String(Math.max(1, Math.min(31, num(b.DueDay)||1))),\r\n        b.Account||\"\",\r\n        String(b.AutoPay||\"N\"),\r\n        b.Notes||\"\",\r\n        String(b.Active||\"Y\")\r\n      ])\r\n    ];\r\n\r\n    const moveRows = [\r\n      [\"Item\",\"Kind\",\"Amount\",\"Notes\",\"Active\"],\r\n      ...state.move.map(m=>[\r\n        m.Item||\"\",\r\n        (String(m.Kind||\"One-time\")===\"Monthly\" ? \"Monthly\" : \"One-time\"),\r\n        String(num(m.Amount)),\r\n        m.Notes||\"\",\r\n        String(m.Active||\"Y\")\r\n      ])\r\n    ];\r\n\r\n    const budRows = [\r\n      [\"Month\",\"Type\",\"Category\",\"BudgetAmount\",\"Notes\",\"Active\"],\r\n      ...state.budgets.map(b=>[\r\n        b.Month||\"\",\r\n        b.Type||\"Expense\",\r\n        b.Category||\"\",\r\n        String(num(b.BudgetAmount)),\r\n        b.Notes||\"\",\r\n        String(b.Active||\"Y\")\r\n      ])\r\n    ];\r\n\r\n    const catRows = [\r\n      [\"Type\",\"Category\",\"Subcategory\",\"Active\",\"Tax\",\"TaxNote\"],\r\n      ...(() => {\r\n        const out = [];\r\n        const seen = new Set();\r\n        const add = (Type, Category, Subcategory, Active, Tax, TaxNote) => {\r\n          Type = (String(Type||\"Expense\")||\"Expense\").trim() || \"Expense\";\r\n          Category = String(Category||\"\").trim();\r\n          Subcategory = String(Subcategory||\"\").trim();\r\n          if(!Category) return;\r\n          const key = (Type+\"|\"+Category+\"|\"+Subcategory).toLowerCase();\r\n          if(seen.has(key)) return;\r\n          seen.add(key);\r\n          out.push([Type, Category, Subcategory, String(Active||\"Y\"), String(Tax||\"\"), String(TaxNote||\"\")]);\r\n        };\r\n        (state.categories||[]).forEach(c => add(c.Type, c.Category, c.Subcategory, c.Active, c.Tax, c.TaxNote));\r\n        (state.tx||[]).forEach(t => add(t.Type||\"Expense\", t.Category, t.Subcategory, \"Y\", \"\", \"\"));\r\n        out.sort((a,b)=>(a[0]+a[1]+a[2]).localeCompare(b[0]+b[1]+b[2]));\r\n        return out;\r\n      })()\r\n    ];\r\n\r\n    const goalRows = [\r\n      [\"GoalName\",\"TargetAmount\",\"CurrentAmount\",\"Notes\",\"Active\"],\r\n      ...state.goals.map(g=>[\r\n        g.GoalName||\"\",\r\n        String(num(g.TargetAmount)),\r\n        String(num(g.CurrentAmount)),\r\n        g.Notes||\"\",\r\n        String(g.Active||\"Y\")\r\n      ])\r\n    ];\r\n\r\n    const txRows = [\r\n      DEFAULT_HEADER_TX,\r\n      ...state.tx.map(t=>[\r\n        t.ID||\"\",\r\n        t.Date||\"\",\r\n        t.Month||toMonth(t.Date),\r\n        t.Type||\"Expense\",\r\n        t.Person||\"\",\r\n        t.Account||\"\",\r\n        t.Category||\"\",\r\n        t.Subcategory||\"\",\r\n        t.Item||\"\",\r\n        t.Payee||\"\",\r\n        String(Math.abs(num(t.Amount))),\r\n        t.Notes||\"\",\r\n        (String(t.Impulse||\"N\").toUpperCase()===\"Y\" ? \"Y\" : \"N\"),\r\n        t.ImpulseReason||\"\",\r\n        (t.Scope||\"Personal\"),\r\n        (t.Receipt||\"\"),\r\n        t.Flags||\"\"\r\n      ])\r\n    ];\r\n\r\n    const parts = [];\r\n    parts.push(\"#TABLE:Settings\\n\" + U.toCsvNoBom(settingsRows));\r\n    parts.push(\"#TABLE:Rules\\n\" + U.toCsvNoBom(rulesRows));\r\n    parts.push(\"#TABLE:Accounts\\n\" + U.toCsvNoBom(accRows));\r\n    parts.push(\"#TABLE:Bills\\n\" + U.toCsvNoBom(billRows));\r\n    parts.push(\"#TABLE:Move\\n\" + U.toCsvNoBom(moveRows));\r\n    parts.push(\"#TABLE:Budgets\\n\" + U.toCsvNoBom(budRows));\r\n    parts.push(\"#TABLE:Categories\\n\" + U.toCsvNoBom(catRows));\r\n    parts.push(\"#TABLE:Goals\\n\" + U.toCsvNoBom(goalRows));\r\n    parts.push(\"#TABLE:Transactions\\n\" + U.toCsvNoBom(txRows));\r\n\r\n    return \"\\uFEFF\" + parts.join(\"\\n\\n\");\r\n  }\r\n\r\n  function buildTxOnlyCsvText(){\r\n    const txRows = [\r\n      DEFAULT_HEADER_TX,\r\n      ...state.tx.map(t=>[\r\n        t.ID||\"\",\r\n        (t.Date||isoToday()).slice(0,10),\r\n        String(t.Month||\"\").trim() || toMonth(t.Date||isoToday()),\r\n        (t.Type===\"Income\" ? \"Income\" : \"Expense\"),\r\n        t.Person||\"\",\r\n        t.Account||\"\",\r\n        t.Category||\"\",\r\n        t.Subcategory||\"\",\r\n        t.Item||\"\",\r\n        t.Payee||\"\",\r\n        String(Math.abs(num(t.Amount))),\r\n        t.Notes||\"\",\r\n        (String(t.Impulse||\"N\").toUpperCase()===\"Y\" ? \"Y\" : \"N\"),\r\n        t.ImpulseReason||\"\",\r\n        (t.Scope||\"Personal\"),\r\n        (t.Receipt||\"\"),\r\n        t.Flags||\"\"\r\n      ])\r\n    ];\r\n    return \"\\uFEFF\" + U.toCsvNoBom(txRows);\r\n  }\r\n\r\n  function downloadMaster(filename){\r\n    const name = filename || `BudgetHub_MASTER_${ymToday()}.csv`;\r\n    if(typeof downloadText === \"function\") downloadText(name, buildMasterCsvText());\r\n    else console.warn(\"[TYBH] util.downloadText missing\");\r\n  }\r\n\r\n  function downloadTxOnly(filename){\r\n    const name = filename || `BudgetHub_TX_${ymToday()}.csv`;\r\n    if(typeof downloadText === \"function\") downloadText(name, buildTxOnlyCsvText());\r\n    else console.warn(\"[TYBH] util.downloadText missing\");\r\n  }\r\n\r\n  function buildGptPackText(month){\r\n    if(!state.loaded) return \"Import a CSV first.\";\r\n    const m = String(month||\"\").trim() || ymToday();\r\n    const rows = m ? state.tx.filter(t=>t.Month===m) : [...state.tx];\r\n\r\n    let income=0, expense=0;\r\n    for(const r of rows){\r\n      if(r.Type===\"Income\") income += num(r.Amount);\r\n      if(r.Type===\"Expense\") expense += num(r.Amount);\r\n    }\r\n    const net = income-expense;\r\n\r\n    const byCat = new Map();\r\n    for(const r of rows){\r\n      if(r.Type!==\"Expense\") continue;\r\n      const k = String(r.Category||\"(uncat)\");\r\n      byCat.set(k, (byCat.get(k)||0)+num(r.Amount));\r\n    }\r\n    const topCats = Array.from(byCat.entries()).sort((a,b)=>b[1]-a[1]).slice(0,15);\r\n\r\n    const buds = state.budgets.filter(b=>b.Month===m && b.Type===\"Expense\" && String(b.Active||\"Y\").toUpperCase()!==\"N\");\r\n    const budLines = buds.length ? buds.map(b=>{\r\n      const spent = spentFor(m,\"Expense\",b.Category);\r\n      const rem = num(b.BudgetAmount)-spent;\r\n      return `- ${b.Category}: budget ${U.money(num(b.BudgetAmount))}, spent ${U.money(spent)}, remain ${U.money(rem)}`;\r\n    }).join(\"\\n\") : \"(no budgets)\";\r\n\r\n    const impRows = rows.filter(t=>t.Type===\"Expense\" && String(t.Impulse||\"N\").toUpperCase()===\"Y\");\r\n    const impSum = impRows.reduce((a,t)=>a+num(t.Amount),0);\r\n\r\n    const due = billsDueNext7Days().slice(0,12)\r\n      .map(b=>`- ${b.BillName}: ${U.money(num(b.Amount))} due ${b.DueISO}${b.Account?(\" (\"+b.Account+\")\"):\"\"}${String(b.AutoPay||\"N\").toUpperCase()===\"Y\"?\" [autopay]\":\"\"}`)\r\n      .join(\"\\n\") || \"(none)\";\r\n\r\n    const recent = [...rows].sort((a,b)=> (b.Date||\"\").localeCompare(a.Date||\"\")).slice(0,20)\r\n      .map(t=>`- ${t.Date} ${t.Type} ${U.money(num(t.Amount))} | ${t.Category}${t.Subcategory?(\"/\"+t.Subcategory):\"\"} | ${t.Payee||\"\"} | ${t.Account||\"\u2014\"} | ${t.Person||\"\"}${String(t.Impulse||\"N\").toUpperCase()===\"Y\"?\" | impulse\":\"\"}`)\r\n      .join(\"\\n\");\r\n\r\n    return (\r\n`BUDGET DATA PACK\r\nCurrency: ${state.settings.currency}\r\nMonth: ${m}\r\n\r\nSUMMARY\r\nIncome: ${U.money(income)}\r\nExpense: ${U.money(expense)}\r\nNet: ${U.money(net)}\r\n\r\nTOP EXPENSE CATEGORIES\r\n${topCats.length ? topCats.map(([k,v])=>`- ${k}: ${U.money(v)}`).join(\"\\n\") : \"(none)\"}\r\n\r\nBUDGETS (ACTIVE)\r\n${budLines}\r\n\r\nIMPULSE\r\nCount: ${impRows.length}\r\nTotal: ${U.money(impSum)}\r\n\r\nBILLS DUE NEXT 7 DAYS\r\n${due}\r\n\r\nRECENT TRANSACTIONS (TOP 20)\r\n${recent}\r\n\r\nREQUEST\r\nGive me clear, practical budgeting advice for this month. Focus on stopping impulse spending and staying within budgets.`\r\n    );\r\n  }\r\n\r\n  // \u2705 legacy alias name (some UI versions call buildGptPack)\r\n  function buildGptPack(month){ return buildGptPackText(month); }\r\n\r\n\r\n// Preflight for CSV import (no state mutation)\r\nfunction preflightImport(text){\r\n  text = stripBom(String(text||\"\"));\r\n  const blocks = parseMaster(text);\r\n  const isMaster = !!Object.keys(blocks||{}).length;\r\n  const counts = { tx:0, accounts:0, budgets:0, bills:0, goals:0, moves:0, settings:0, rules:0 };\r\n  const blockRows = (blockText)=>{\r\n    if(!blockText) return 0;\r\n    const rows = parseCsv((String(blockText).trim()+\"\\n\"));\r\n    return Math.max(0, (rows.length||0) - 1);\r\n  };\r\n\r\n  // compute tx + dup count using loader but restore original tx\r\n  const prevTx = state.tx;\r\n  let txTotal = 0, txDedup = 0, txDup = 0;\r\n  try{\r\n    const txText = isMaster ? (blocks.Transactions || \"\") : text;\r\n    loadTransactionsCsv(txText, {dedup:false});\r\n    txTotal = state.tx.length;\r\n    loadTransactionsCsv(txText, {dedup:true});\r\n    txDedup = state.tx.length;\r\n    txDup = Math.max(0, txTotal - txDedup);\r\n  }catch(e){\r\n    // keep 0; UI will show error on commit anyway\r\n  }finally{\r\n    state.tx = prevTx;\r\n  }\r\n  counts.tx = txTotal;\r\n\r\n  if(isMaster){\r\n    counts.accounts = blockRows(blocks.Accounts);\r\n    counts.budgets  = blockRows(blocks.Budgets);\r\n    counts.bills    = blockRows(blocks.Bills);\r\n    counts.goals    = blockRows(blocks.Goals);\r\n    counts.moves    = blockRows(blocks.Move);\r\n    counts.settings = blocks.Settings ? 1 : 0;\r\n    counts.rules    = blocks.Rules ? 1 : 0;\r\n  }\r\n\r\n  return {\r\n    isMaster,\r\n    counts,\r\n    txDup,\r\n    txDedupIfEnabled: txDedup\r\n  };\r\n}\r\n\r\n  TYBH.core = {\r\n    DEFAULT_HEADER_TX,\r\n    state,\r\n    resetDataArrays,\r\n    allMonths,\r\n    monthTx,\r\n    mergeAccountsByName,\r\n    loadFromMaster,\r\n    preflightImport,\r\n    loadTransactionsCsv,\r\n    budgetFor,\r\n    sumTxWhere,\r\n    spentFor,\r\n    evalWarningsForTx,\r\n    applyFlagsForTx,\r\n    computedBalanceFor,\r\n    computedBalanceForAsOf,\r\n    reconcileLedger,\r\n    nextBillDueDate,\r\n    billsDueNext7Days,\r\n    plannedRemainForMonth,\r\n    buildMasterCsvText,\r\n    buildTxOnlyCsvText,\r\n    downloadMaster,\r\n    downloadTxOnly,\r\n    buildGptPackText,\r\n    buildGptPack\r\n  };\r\n})();\r\n"],
  "mappings": "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",
  "names": ["d"]
}
