[{"data":1,"prerenderedAt":783},["ShallowReactive",2],{"navigation_docs_en":3,"-en-reference-transaction-types":191,"-en-reference-transaction-types-surround":778},[4,61,127,171],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":60},"Guide","i-lucide-book-open","\u002Fen\u002Fguide","en\u002F1.guide",[10,15,20,25,30,35,40,45,50,55],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fguide\u002Fintroduction","en\u002F1.guide\u002F01.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Install the App","\u002Fen\u002Fguide\u002Finstallation","en\u002F1.guide\u002F02.installation","i-lucide-smartphone",{"title":21,"path":22,"stem":23,"icon":24},"Authentication","\u002Fen\u002Fguide\u002Fauth","en\u002F1.guide\u002F03.auth","i-lucide-lock",{"title":26,"path":27,"stem":28,"icon":29},"Wallets","\u002Fen\u002Fguide\u002Fwallets","en\u002F1.guide\u002F04.wallets","i-lucide-wallet",{"title":31,"path":32,"stem":33,"icon":34},"Categories","\u002Fen\u002Fguide\u002Fcategories","en\u002F1.guide\u002F05.categories","i-lucide-tags",{"title":36,"path":37,"stem":38,"icon":39},"Transactions","\u002Fen\u002Fguide\u002Ftransactions","en\u002F1.guide\u002F06.transactions","i-lucide-receipt",{"title":41,"path":42,"stem":43,"icon":44},"Transfers","\u002Fen\u002Fguide\u002Ftransfers","en\u002F1.guide\u002F07.transfers","i-lucide-arrow-left-right",{"title":46,"path":47,"stem":48,"icon":49},"Statistics","\u002Fen\u002Fguide\u002Fstatistics","en\u002F1.guide\u002F08.statistics","i-lucide-bar-chart-3",{"title":51,"path":52,"stem":53,"icon":54},"Theme","\u002Fen\u002Fguide\u002Ftheme","en\u002F1.guide\u002F09.theme","i-lucide-palette",{"title":56,"path":57,"stem":58,"icon":59},"Settings","\u002Fen\u002Fguide\u002Fsettings","en\u002F1.guide\u002F10.settings","i-lucide-settings",false,{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":60},"Development","i-lucide-code","\u002Fen\u002Fdevelopment","en\u002F2.development",[67,72,77,82,87,92,97,102,122],{"title":68,"path":69,"stem":70,"icon":71},"Installation","\u002Fen\u002Fdevelopment\u002Finstallation","en\u002F2.development\u002F01.installation","i-lucide-download",{"title":73,"path":74,"stem":75,"icon":76},"Codebase Graph","\u002Fen\u002Fdevelopment\u002Funderstand-anything","en\u002F2.development\u002F02.understand-anything","i-lucide-network",{"title":78,"path":79,"stem":80,"icon":81},"Offline & PWA","\u002Fen\u002Fdevelopment\u002Foffline","en\u002F2.development\u002F03.offline","i-lucide-wifi-off",{"title":83,"path":84,"stem":85,"icon":86},"Data Migration History","\u002Fen\u002Fdevelopment\u002Fmigration","en\u002F2.development\u002F04.migration","i-lucide-database",{"title":88,"path":89,"stem":90,"icon":91},"Deployment","\u002Fen\u002Fdevelopment\u002Fdeployment","en\u002F2.development\u002F05.deployment","i-lucide-rocket",{"title":93,"path":94,"stem":95,"icon":96},"Testing","\u002Fen\u002Fdevelopment\u002Ftesting","en\u002F2.development\u002F06.testing","i-lucide-flask-conical",{"title":98,"path":99,"stem":100,"icon":101},"Date Utilities","\u002Fen\u002Fdevelopment\u002Fdate-utilities","en\u002F2.development\u002F07.date-utilities","i-lucide-calendar",{"title":103,"path":104,"stem":105,"children":106,"page":60},"Ai Workflow","\u002Fen\u002Fdevelopment\u002Fai-workflow","en\u002F2.development\u002F08.ai-workflow",[107,112,117],{"title":108,"path":109,"stem":110,"icon":111},"Overview","\u002Fen\u002Fdevelopment\u002Fai-workflow\u002Foverview","en\u002F2.development\u002F08.ai-workflow\u002F01.overview","i-lucide-bot",{"title":113,"path":114,"stem":115,"icon":116},"Agents","\u002Fen\u002Fdevelopment\u002Fai-workflow\u002Fagents","en\u002F2.development\u002F08.ai-workflow\u002F02.agents","i-lucide-users",{"title":118,"path":119,"stem":120,"icon":121},"Skills","\u002Fen\u002Fdevelopment\u002Fai-workflow\u002Fskills","en\u002F2.development\u002F08.ai-workflow\u002F03.skills","i-lucide-lightbulb",{"title":123,"path":124,"stem":125,"icon":126},"Troubleshooting","\u002Fen\u002Fdevelopment\u002Ftroubleshooting","en\u002F2.development\u002F09.troubleshooting","i-lucide-life-buoy",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":60},"Reference","i-lucide-file-code","\u002Fen\u002Freference","en\u002F3.reference",[133,138,142,147,152,156,161,166],{"title":134,"path":135,"stem":136,"icon":137},"Architecture","\u002Fen\u002Freference\u002Farchitecture","en\u002F3.reference\u002F01.architecture","i-lucide-boxes",{"title":139,"path":140,"stem":141,"icon":44},"Transaction Types","\u002Fen\u002Freference\u002Ftransaction-types","en\u002F3.reference\u002F02.transaction-types",{"title":143,"path":144,"stem":145,"icon":146},"Sync","\u002Fen\u002Freference\u002Fsync","en\u002F3.reference\u002F03.sync","i-lucide-refresh-cw",{"title":148,"path":149,"stem":150,"icon":151},"Offline-first","\u002Fen\u002Freference\u002Foffline-first","en\u002F3.reference\u002F04.offline-first","i-lucide-list-ordered",{"title":153,"path":154,"stem":155,"icon":121},"Technical Decisions","\u002Fen\u002Freference\u002Ftech-decisions","en\u002F3.reference\u002F05.tech-decisions",{"title":157,"path":158,"stem":159,"icon":160},"Validation Strategy","\u002Fen\u002Freference\u002Fvalidation-strategy","en\u002F3.reference\u002F06.validation-strategy","i-lucide-shield-check",{"title":162,"path":163,"stem":164,"icon":165},"What Changed Since Firebase","\u002Fen\u002Freference\u002Ffirebase-migration","en\u002F3.reference\u002F07.firebase-migration","i-lucide-hamburger",{"title":167,"path":168,"stem":169,"icon":170},"Performance","\u002Fen\u002Freference\u002Fperformance","en\u002F3.reference\u002F08.performance","i-lucide-gauge",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":60},"Premium","i-lucide-star","\u002Fen\u002Fpremium","en\u002F4.premium",[177,181,186],{"title":108,"path":178,"stem":179,"icon":180},"\u002Fen\u002Fpremium\u002Foverview","en\u002F4.premium\u002F01.overview","i-lucide-layers",{"title":182,"path":183,"stem":184,"icon":185},"Telegram Bot","\u002Fen\u002Fpremium\u002Ftelegram-bot","en\u002F4.premium\u002F02.telegram-bot","i-lucide-send",{"title":187,"path":188,"stem":189,"icon":190},"AI Chat","\u002Fen\u002Fpremium\u002Fai-chat","en\u002F4.premium\u002F03.ai-chat","i-lucide-sparkles",{"id":192,"title":139,"body":193,"description":770,"extension":771,"links":772,"meta":773,"navigation":774,"path":140,"seo":775,"stem":141,"__hash__":777},"docs_en\u002Fen\u002F3.reference\u002F02.transaction-types.md",{"type":194,"value":195,"toc":753},"minimark",[196,200,204,276,279,282,295,298,301,311,314,317,337,340,343,348,362,376,380,391,438,442,474,478,481,520,523,548,552,562,636,639,642,647,732,736,749],[197,198,108],"h2",{"id":199},"overview",[201,202,203],"p",{},"Finapp supports three transaction types and one special category:",[205,206,207,223],"table",{},[208,209,210],"thead",{},[211,212,213,217,220],"tr",{},[214,215,216],"th",{},"Type",[214,218,219],{},"TrnType",[214,221,222],{},"Description",[224,225,226,238,249,260],"tbody",{},[211,227,228,232,235],{},[229,230,231],"td",{},"Expense",[229,233,234],{},"0",[229,236,237],{},"Money spent",[211,239,240,243,246],{},[229,241,242],{},"Income",[229,244,245],{},"1",[229,247,248],{},"Money received",[211,250,251,254,257],{},[229,252,253],{},"Transfer",[229,255,256],{},"2",[229,258,259],{},"Money moved between wallets",[211,261,262,265,268],{},[229,263,264],{},"Adjustment",[229,266,267],{},"0 or 1",[229,269,270,271,275],{},"Balance correction (Expense or Income with ",[272,273,274],"code",{},"categoryId: 'adjustment'",")",[197,277,231],{"id":278},"expense",[201,280,281],{},"A regular expense transaction. Decreases wallet balance.",[283,284,285,289,292],"ul",{},[286,287,288],"li",{},"Requires: wallet, category, amount",[286,290,291],{},"Shown in expense statistics",[286,293,294],{},"Amount displayed with minus sign",[197,296,242],{"id":297},"income",[201,299,300],{},"A regular income transaction. Increases wallet balance.",[283,302,303,305,308],{},[286,304,288],{},[286,306,307],{},"Shown in income statistics",[286,309,310],{},"Amount displayed with plus sign",[197,312,253],{"id":313},"transfer",[201,315,316],{},"Money moved between two wallets. Does not affect income\u002Fexpense statistics.",[283,318,319,322,325,334],{},[286,320,321],{},"Requires: expense wallet, income wallet, amounts for each",[286,323,324],{},"Supports different currencies (e.g., USD wallet -> EUR wallet)",[286,326,327,328,330,331,275],{},"Uses system category ",[272,329,313],{}," (",[272,332,333],{},"categoryId: 'transfer'",[286,335,336],{},"Available only when 2+ wallets exist",[197,338,264],{"id":339},"adjustment",[201,341,342],{},"Balance correction for a wallet. Affects wallet balance but is excluded from income\u002Fexpense statistics.",[344,345,347],"h3",{"id":346},"how-it-works","How it works",[201,349,350,351,355,356,330,358,361],{},"Adjustment is ",[352,353,354],"strong",{},"not a separate transaction type",". It is a regular Expense or Income transaction with the system category ",[272,357,339],{},[272,359,360],{},"categoryId === 'adjustment'",").",[283,363,364,370],{},[286,365,366,369],{},[352,367,368],{},"Expense + adjustment"," - decreases wallet balance (e.g., \"lost money\", correction down)",[286,371,372,375],{},[352,373,374],{},"Income + adjustment"," - increases wallet balance (e.g., \"found money\", correction up)",[344,377,379],{"id":378},"detection","Detection",[201,381,382,383,386,387,390],{},"Adjustment is identified by ",[272,384,385],{},"categoryId",", not by ",[272,388,389],{},"type",":",[392,393,398],"pre",{"className":394,"code":395,"language":396,"meta":397,"style":397},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const isAdjustment = trn.categoryId === 'adjustment'\n","typescript","",[272,399,400],{"__ignoreMap":397},[401,402,405,409,413,417,420,423,426,429,432,435],"span",{"class":403,"line":404},"line",1,[401,406,408],{"class":407},"spNyl","const",[401,410,412],{"class":411},"sTEyZ"," isAdjustment ",[401,414,416],{"class":415},"sMK4o","=",[401,418,419],{"class":411}," trn",[401,421,422],{"class":415},".",[401,424,425],{"class":411},"categoryId ",[401,427,428],{"class":415},"===",[401,430,431],{"class":415}," '",[401,433,339],{"class":434},"sfazB",[401,436,437],{"class":415},"'\n",[344,439,441],{"id":440},"behavior","Behavior",[283,443,444,450,456,462,468,471],{},[286,445,446,447],{},"Excluded from income\u002Fexpense statistics in ",[272,448,449],{},"getTotal()",[286,451,452,453],{},"Excluded from recent categories in ",[272,454,455],{},"recentCategoriesIds",[286,457,458,459],{},"Excluded from last created transaction in ",[272,460,461],{},"lastCreatedTrnId",[286,463,464,465,467],{},"Included in wallet balance calculation (as a separate ",[272,466,339],{}," field in totals)",[286,469,470],{},"Not shown in the category tree (system category)",[286,472,473],{},"Available in the category selector modal (Command Palette)",[197,475,477],{"id":476},"system-categories","System Categories",[201,479,480],{},"Two system categories are always present in the store and cannot be edited or deleted:",[205,482,483,496],{},[208,484,485],{},[211,486,487,490,493],{},[214,488,489],{},"ID",[214,491,492],{},"Name",[214,494,495],{},"Purpose",[224,497,498,509],{},[211,499,500,504,506],{},[229,501,502],{},[272,503,313],{},[229,505,253],{},[229,507,508],{},"Used by Transfer transactions",[211,510,511,515,517],{},[229,512,513],{},[272,514,339],{},[229,516,264],{},[229,518,519],{},"Used for balance corrections",[201,521,522],{},"These categories are:",[283,524,525,531,538],{},[286,526,527,528],{},"Auto-added in ",[272,529,530],{},"useCategoriesStore.setCategories()",[286,532,533,534,537],{},"Excluded from ",[272,535,536],{},"categoriesRootIds"," (not shown in category tree)",[286,539,540,541,544,545],{},"Protected from editing\u002Fdeletion in ",[272,542,543],{},"saveCategory()"," and ",[272,546,547],{},"deleteCategory()",[197,549,551],{"id":550},"type-change-behavior","Type Change Behavior",[201,553,554,555,330,558,561],{},"When a transaction's type changes, normalization happens client-side in ",[272,556,557],{},"trnToRow",[272,559,560],{},"services\u002Fpowersync\u002Ftransforms.ts",") at write time - there is no server backend doing it:",[283,563,564,605,628],{},[286,565,566,569,570,572,573,575,576,579,580,583,584,583,587,583,590,593,594,597,598,601,602],{},[352,567,568],{},"→ Transfer",": ",[272,571,557],{}," sets ",[272,574,385],{}," to ",[272,577,578],{},"'transfer'"," and writes ",[272,581,582],{},"expenseWalletId","\u002F",[272,585,586],{},"incomeWalletId",[272,588,589],{},"expenseAmount",[272,591,592],{},"incomeAmount","; non-transfer fields (",[272,595,596],{},"walletId",", ",[272,599,600],{},"amount",") are written as ",[272,603,604],{},"null",[286,606,607,569,610,612,613,583,615,617,618,597,620,597,622,597,624,601,626],{},[352,608,609],{},"→ Expense\u002FIncome",[272,611,557],{}," writes ",[272,614,596],{},[272,616,600],{},"; transfer-specific fields (",[272,619,582],{},[272,621,586],{},[272,623,589],{},[272,625,592],{},[272,627,604],{},[286,629,630,633,634],{},[352,631,632],{},"→ Adjustment",": no extra clearing - adjustment uses regular Expense\u002FIncome fields with ",[272,635,274],{},[201,637,638],{},"This ensures only the fields relevant to the current type carry non-null values in the local SQLite row and on the server.",[197,640,46],{"id":641},"statistics",[201,643,644,646],{},[272,645,449],{}," returns:",[205,648,649,659],{},[208,650,651],{},[211,652,653,656],{},[214,654,655],{},"Field",[214,657,658],{},"Includes",[224,660,661,670,679,688,698,708,720],{},[211,662,663,667],{},[229,664,665],{},[272,666,297],{},[229,668,669],{},"Income transactions (excluding transfers and adjustments)",[211,671,672,676],{},[229,673,674],{},[272,675,278],{},[229,677,678],{},"Expense transactions (excluding transfers and adjustments)",[211,680,681,685],{},[229,682,683],{},[272,684,339],{},[229,686,687],{},"Adjustment transactions (affects wallet balance)",[211,689,690,695],{},[229,691,692],{},[272,693,694],{},"incomeTransfers",[229,696,697],{},"Transfer income side",[211,699,700,705],{},[229,701,702],{},[272,703,704],{},"expenseTransfers",[229,706,707],{},"Transfer expense side",[211,709,710,715],{},[229,711,712],{},[272,713,714],{},"sum",[229,716,717],{},[272,718,719],{},"income - expense",[211,721,722,727],{},[229,723,724],{},[272,725,726],{},"sumTransfers",[229,728,729],{},[272,730,731],{},"incomeTransfers - expenseTransfers",[197,733,735],{"id":734},"next-steps","Next Steps",[283,737,738,744],{},[286,739,740,743],{},[741,742,143],"a",{"href":144}," - how transactions sync to the server",[286,745,746,748],{},[741,747,153],{"href":154}," - rationale behind key design choices",[750,751,752],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":397,"searchDepth":754,"depth":754,"links":755},2,[756,757,758,759,760,766,767,768,769],{"id":199,"depth":754,"text":108},{"id":278,"depth":754,"text":231},{"id":297,"depth":754,"text":242},{"id":313,"depth":754,"text":253},{"id":339,"depth":754,"text":264,"children":761},[762,764,765],{"id":346,"depth":763,"text":347},3,{"id":378,"depth":763,"text":379},{"id":440,"depth":763,"text":441},{"id":476,"depth":754,"text":477},{"id":550,"depth":754,"text":551},{"id":641,"depth":754,"text":46},{"id":734,"depth":754,"text":735},"Transaction types, adjustment logic, statistics.","md",null,{},{"icon":44},{"title":139,"description":776},"Finapp transaction types reference - Expense, Income, Transfer, and Adjustment - with detection logic, type change behavior, and statistics output.","W1G3LoievD6-3uwfNG7d6Owd0vEKKZOzLUC6Au7teJY",[779,781],{"title":134,"path":135,"stem":136,"description":780,"icon":137,"children":-1},"Initialization flow, project structure, store pattern, auth - Supabase + PowerSync.",{"title":143,"path":144,"stem":145,"description":782,"icon":146,"children":-1},"How PowerSync keeps local SQLite in sync with Supabase Postgres.",1782114344084]