[{"data":1,"prerenderedAt":764},["ShallowReactive",2],{"navigation_docs_ru":3,"-ru-reference-transaction-types":167,"-ru-reference-transaction-types-surround":759},[4,61,101,146],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":60},"Руководство","i-lucide-book-open","\u002Fru\u002Fguide","ru\u002F1.guide",[10,15,20,25,30,35,40,45,50,55],{"title":11,"path":12,"stem":13,"icon":14},"Введение","\u002Fru\u002Fguide\u002Fintroduction","ru\u002F1.guide\u002F01.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Установка","\u002Fru\u002Fguide\u002Finstallation","ru\u002F1.guide\u002F02.installation","i-lucide-smartphone",{"title":21,"path":22,"stem":23,"icon":24},"Авторизация","\u002Fru\u002Fguide\u002Fauth","ru\u002F1.guide\u002F03.auth","i-lucide-lock",{"title":26,"path":27,"stem":28,"icon":29},"Кошельки","\u002Fru\u002Fguide\u002Fwallets","ru\u002F1.guide\u002F04.wallets","i-lucide-wallet",{"title":31,"path":32,"stem":33,"icon":34},"Категории","\u002Fru\u002Fguide\u002Fcategories","ru\u002F1.guide\u002F05.categories","i-lucide-tags",{"title":36,"path":37,"stem":38,"icon":39},"Транзакции","\u002Fru\u002Fguide\u002Ftransactions","ru\u002F1.guide\u002F06.transactions","i-lucide-receipt",{"title":41,"path":42,"stem":43,"icon":44},"Переводы","\u002Fru\u002Fguide\u002Ftransfers","ru\u002F1.guide\u002F07.transfers","i-lucide-arrow-left-right",{"title":46,"path":47,"stem":48,"icon":49},"Статистика","\u002Fru\u002Fguide\u002Fstatistics","ru\u002F1.guide\u002F08.statistics","i-lucide-bar-chart-3",{"title":51,"path":52,"stem":53,"icon":54},"Тема","\u002Fru\u002Fguide\u002Ftheme","ru\u002F1.guide\u002F09.theme","i-lucide-palette",{"title":56,"path":57,"stem":58,"icon":59},"Настройки","\u002Fru\u002Fguide\u002Fsettings","ru\u002F1.guide\u002F10.settings","i-lucide-settings",false,{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":60},"Разработка","i-lucide-code","\u002Fru\u002Fdevelopment","ru\u002F2.development",[67,71,76,81,86,91,96],{"title":16,"path":68,"stem":69,"icon":70},"\u002Fru\u002Fdevelopment\u002Finstallation","ru\u002F2.development\u002F01.installation","i-lucide-download",{"title":72,"path":73,"stem":74,"icon":75},"Граф кодовой базы","\u002Fru\u002Fdevelopment\u002Funderstand-anything","ru\u002F2.development\u002F02.understand-anything","i-lucide-network",{"title":77,"path":78,"stem":79,"icon":80},"Офлайн и PWA","\u002Fru\u002Fdevelopment\u002Foffline","ru\u002F2.development\u002F03.offline","i-lucide-wifi-off",{"title":82,"path":83,"stem":84,"icon":85},"История миграций данных","\u002Fru\u002Fdevelopment\u002Fmigration","ru\u002F2.development\u002F04.migration","i-lucide-database",{"title":87,"path":88,"stem":89,"icon":90},"Деплой","\u002Fru\u002Fdevelopment\u002Fdeployment","ru\u002F2.development\u002F05.deployment","i-lucide-rocket",{"title":92,"path":93,"stem":94,"icon":95},"Тестирование","\u002Fru\u002Fdevelopment\u002Ftesting","ru\u002F2.development\u002F06.testing","i-lucide-flask-conical",{"title":97,"path":98,"stem":99,"icon":100},"Дата-утилиты","\u002Fru\u002Fdevelopment\u002Fdate-utilities","ru\u002F2.development\u002F07.date-utilities","i-lucide-calendar",{"title":102,"icon":103,"path":104,"stem":105,"children":106,"page":60},"Справочник","i-lucide-file-code","\u002Fru\u002Freference","ru\u002F3.reference",[107,112,116,121,126,131,136,141],{"title":108,"path":109,"stem":110,"icon":111},"Архитектура","\u002Fru\u002Freference\u002Farchitecture","ru\u002F3.reference\u002F01.architecture","i-lucide-boxes",{"title":113,"path":114,"stem":115,"icon":44},"Типы транзакций","\u002Fru\u002Freference\u002Ftransaction-types","ru\u002F3.reference\u002F02.transaction-types",{"title":117,"path":118,"stem":119,"icon":120},"Синхронизация","\u002Fru\u002Freference\u002Fsync","ru\u002F3.reference\u002F03.sync","i-lucide-refresh-cw",{"title":122,"path":123,"stem":124,"icon":125},"Офлайн-first","\u002Fru\u002Freference\u002Foffline-first","ru\u002F3.reference\u002F04.offline-first","i-lucide-list-ordered",{"title":127,"path":128,"stem":129,"icon":130},"Тех. решения","\u002Fru\u002Freference\u002Ftech-decisions","ru\u002F3.reference\u002F05.tech-decisions","i-lucide-lightbulb",{"title":132,"path":133,"stem":134,"icon":135},"Валидация","\u002Fru\u002Freference\u002Fvalidation-strategy","ru\u002F3.reference\u002F06.validation-strategy","i-lucide-shield-check",{"title":137,"path":138,"stem":139,"icon":140},"Что изменилось со времён Firebase","\u002Fru\u002Freference\u002Ffirebase-migration","ru\u002F3.reference\u002F07.firebase-migration","i-lucide-hamburger",{"title":142,"path":143,"stem":144,"icon":145},"Производительность","\u002Fru\u002Freference\u002Fperformance","ru\u002F3.reference\u002F08.performance","i-lucide-gauge",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":60},"Премиум","i-lucide-star","\u002Fru\u002Fpremium","ru\u002F4.premium",[152,157,162],{"title":153,"path":154,"stem":155,"icon":156},"Обзор","\u002Fru\u002Fpremium\u002Foverview","ru\u002F4.premium\u002F01.overview","i-lucide-layers",{"title":158,"path":159,"stem":160,"icon":161},"Telegram-бот","\u002Fru\u002Fpremium\u002Ftelegram-bot","ru\u002F4.premium\u002F02.telegram-bot","i-lucide-send",{"title":163,"path":164,"stem":165,"icon":166},"AI Chat","\u002Fru\u002Fpremium\u002Fai-chat","ru\u002F4.premium\u002F03.ai-chat","i-lucide-sparkles",{"id":168,"title":113,"body":169,"description":750,"extension":751,"links":752,"meta":753,"navigation":754,"path":114,"seo":755,"stem":115,"__hash__":758},"docs_ru\u002Fru\u002F3.reference\u002F02.transaction-types.md",{"type":170,"value":171,"toc":733},"minimark",[172,176,180,252,255,258,271,274,277,287,290,293,314,317,320,325,340,354,358,369,416,420,452,456,459,498,501,526,530,540,614,617,620,625,712,716,729],[173,174,153],"h2",{"id":175},"обзор",[177,178,179],"p",{},"Финапка поддерживает три типа транзакций и одну специальную категорию:",[181,182,183,199],"table",{},[184,185,186],"thead",{},[187,188,189,193,196],"tr",{},[190,191,192],"th",{},"Тип",[190,194,195],{},"TrnType",[190,197,198],{},"Описание",[200,201,202,214,225,236],"tbody",{},[187,203,204,208,211],{},[205,206,207],"td",{},"Расход",[205,209,210],{},"0",[205,212,213],{},"Потраченные деньги",[187,215,216,219,222],{},[205,217,218],{},"Доход",[205,220,221],{},"1",[205,223,224],{},"Полученные деньги",[187,226,227,230,233],{},[205,228,229],{},"Перевод",[205,231,232],{},"2",[205,234,235],{},"Перемещение денег между кошельками",[187,237,238,241,244],{},[205,239,240],{},"Корректировка",[205,242,243],{},"0 или 1",[205,245,246,247,251],{},"Корректировка баланса (Расход или Доход с ",[248,249,250],"code",{},"categoryId: 'adjustment'",")",[173,253,207],{"id":254},"расход",[177,256,257],{},"Обычная транзакция расхода. Уменьшает баланс кошелька.",[259,260,261,265,268],"ul",{},[262,263,264],"li",{},"Требуется: кошелёк, категория, сумма",[262,266,267],{},"Отображается в статистике расходов",[262,269,270],{},"Сумма показывается со знаком минус",[173,272,218],{"id":273},"доход",[177,275,276],{},"Обычная транзакция дохода. Увеличивает баланс кошелька.",[259,278,279,281,284],{},[262,280,264],{},[262,282,283],{},"Отображается в статистике доходов",[262,285,286],{},"Сумма показывается со знаком плюс",[173,288,229],{"id":289},"перевод",[177,291,292],{},"Перемещение денег между двумя кошельками. Не влияет на статистику доходов\u002Fрасходов.",[259,294,295,298,301,311],{},[262,296,297],{},"Требуется: кошелёк расхода, кошелёк дохода, суммы для каждого",[262,299,300],{},"Поддерживает разные валюты (например, кошелёк USD → кошелёк EUR)",[262,302,303,304,307,308,251],{},"Использует системную категорию ",[248,305,306],{},"transfer"," (",[248,309,310],{},"categoryId: 'transfer'",[262,312,313],{},"Доступен только при наличии 2+ кошельков",[173,315,240],{"id":316},"корректировка",[177,318,319],{},"Корректировка баланса кошелька. Влияет на баланс кошелька, но исключается из статистики доходов\u002Fрасходов.",[321,322,324],"h3",{"id":323},"как-это-работает","Как это работает",[177,326,327,328,332,333,307,336,339],{},"Корректировка - ",[329,330,331],"strong",{},"это не отдельный тип транзакции",". Это обычная транзакция Расхода или Дохода с системной категорией ",[248,334,335],{},"adjustment",[248,337,338],{},"categoryId === 'adjustment'",").",[259,341,342,348],{},[262,343,344,347],{},[329,345,346],{},"Расход + корректировка"," - уменьшает баланс кошелька (например, «потерянные деньги», корректировка вниз)",[262,349,350,353],{},[329,351,352],{},"Доход + корректировка"," - увеличивает баланс кошелька (например, «найденные деньги», корректировка вверх)",[321,355,357],{"id":356},"определение","Определение",[177,359,360,361,364,365,368],{},"Корректировка определяется по ",[248,362,363],{},"categoryId",", не по ",[248,366,367],{},"type",":",[370,371,376],"pre",{"className":372,"code":373,"language":374,"meta":375,"style":375},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const isAdjustment = trn.categoryId === 'adjustment'\n","typescript","",[248,377,378],{"__ignoreMap":375},[379,380,383,387,391,395,398,401,404,407,410,413],"span",{"class":381,"line":382},"line",1,[379,384,386],{"class":385},"spNyl","const",[379,388,390],{"class":389},"sTEyZ"," isAdjustment ",[379,392,394],{"class":393},"sMK4o","=",[379,396,397],{"class":389}," trn",[379,399,400],{"class":393},".",[379,402,403],{"class":389},"categoryId ",[379,405,406],{"class":393},"===",[379,408,409],{"class":393}," '",[379,411,335],{"class":412},"sfazB",[379,414,415],{"class":393},"'\n",[321,417,419],{"id":418},"поведение","Поведение",[259,421,422,428,434,440,446,449],{},[262,423,424,425],{},"Исключается из статистики доходов\u002Fрасходов в ",[248,426,427],{},"getTotal()",[262,429,430,431],{},"Исключается из недавних категорий в ",[248,432,433],{},"recentCategoriesIds",[262,435,436,437],{},"Исключается из последней созданной транзакции в ",[248,438,439],{},"lastCreatedTrnId",[262,441,442,443,445],{},"Включается в расчёт баланса кошелька (как отдельное поле ",[248,444,335],{}," в итогах)",[262,447,448],{},"Не показывается в дереве категорий (системная категория)",[262,450,451],{},"Доступна в модальном окне выбора категории (Command Palette)",[173,453,455],{"id":454},"системные-категории","Системные категории",[177,457,458],{},"Две системные категории всегда присутствуют в хранилище и не могут быть изменены или удалены:",[181,460,461,474],{},[184,462,463],{},[187,464,465,468,471],{},[190,466,467],{},"ID",[190,469,470],{},"Название",[190,472,473],{},"Назначение",[200,475,476,487],{},[187,477,478,482,484],{},[205,479,480],{},[248,481,306],{},[205,483,229],{},[205,485,486],{},"Используется переводами",[187,488,489,493,495],{},[205,490,491],{},[248,492,335],{},[205,494,240],{},[205,496,497],{},"Используется для корректировки баланса",[177,499,500],{},"Эти категории:",[259,502,503,509,516],{},[262,504,505,506],{},"Автоматически добавляются в ",[248,507,508],{},"useCategoriesStore.setCategories()",[262,510,511,512,515],{},"Исключены из ",[248,513,514],{},"categoriesRootIds"," (не показываются в дереве категорий)",[262,517,518,519,522,523],{},"Защищены от редактирования\u002Fудаления в ",[248,520,521],{},"saveCategory()"," и ",[248,524,525],{},"deleteCategory()",[173,527,529],{"id":528},"поведение-при-смене-типа","Поведение при смене типа",[177,531,532,533,307,536,539],{},"При смене типа транзакции нормализация происходит на клиенте - в ",[248,534,535],{},"trnToRow",[248,537,538],{},"services\u002Fpowersync\u002Ftransforms.ts",") при записи. Никакого серверного бэкенда для этого нет:",[259,541,542,583,606],{},[262,543,544,547,548,550,551,553,554,557,558,561,562,561,565,561,568,571,572,575,576,579,580],{},[329,545,546],{},"→ Перевод",": ",[248,549,535],{}," устанавливает ",[248,552,363],{}," в ",[248,555,556],{},"'transfer'"," и записывает ",[248,559,560],{},"expenseWalletId","\u002F",[248,563,564],{},"incomeWalletId",[248,566,567],{},"expenseAmount",[248,569,570],{},"incomeAmount","; поля одного кошелька (",[248,573,574],{},"walletId",", ",[248,577,578],{},"amount",") записываются как ",[248,581,582],{},"null",[262,584,585,547,588,590,591,561,593,595,596,575,598,575,600,575,602,579,604],{},[329,586,587],{},"→ Расход\u002FДоход",[248,589,535],{}," записывает ",[248,592,574],{},[248,594,578],{},"; поля перевода (",[248,597,560],{},[248,599,564],{},[248,601,567],{},[248,603,570],{},[248,605,582],{},[262,607,608,611,612],{},[329,609,610],{},"→ Корректировка",": дополнительная очистка не требуется - корректировка использует обычные поля Расхода\u002FДохода с ",[248,613,250],{},[177,615,616],{},"Это гарантирует, что только поля, относящиеся к текущему типу, имеют ненулевые значения в локальной SQLite-строке и на сервере.",[173,618,46],{"id":619},"статистика",[177,621,622,624],{},[248,623,427],{}," возвращает:",[181,626,627,637],{},[184,628,629],{},[187,630,631,634],{},[190,632,633],{},"Поле",[190,635,636],{},"Включает",[200,638,639,649,659,668,678,688,700],{},[187,640,641,646],{},[205,642,643],{},[248,644,645],{},"income",[205,647,648],{},"Транзакции дохода (исключая переводы и корректировки)",[187,650,651,656],{},[205,652,653],{},[248,654,655],{},"expense",[205,657,658],{},"Транзакции расхода (исключая переводы и корректировки)",[187,660,661,665],{},[205,662,663],{},[248,664,335],{},[205,666,667],{},"Транзакции корректировки (влияет на баланс кошелька)",[187,669,670,675],{},[205,671,672],{},[248,673,674],{},"incomeTransfers",[205,676,677],{},"Сторона дохода перевода",[187,679,680,685],{},[205,681,682],{},[248,683,684],{},"expenseTransfers",[205,686,687],{},"Сторона расхода перевода",[187,689,690,695],{},[205,691,692],{},[248,693,694],{},"sum",[205,696,697],{},[248,698,699],{},"income - expense",[187,701,702,707],{},[205,703,704],{},[248,705,706],{},"sumTransfers",[205,708,709],{},[248,710,711],{},"incomeTransfers - expenseTransfers",[173,713,715],{"id":714},"следующие-шаги","Следующие шаги",[259,717,718,724],{},[262,719,720,723],{},[721,722,117],"a",{"href":118}," - как транзакции синхронизируются с сервером",[262,725,726,728],{},[721,727,127],{"href":128}," - обоснование ключевых решений",[730,731,732],"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":375,"searchDepth":734,"depth":734,"links":735},2,[736,737,738,739,740,746,747,748,749],{"id":175,"depth":734,"text":153},{"id":254,"depth":734,"text":207},{"id":273,"depth":734,"text":218},{"id":289,"depth":734,"text":229},{"id":316,"depth":734,"text":240,"children":741},[742,744,745],{"id":323,"depth":743,"text":324},3,{"id":356,"depth":743,"text":357},{"id":418,"depth":743,"text":419},{"id":454,"depth":734,"text":455},{"id":528,"depth":734,"text":529},{"id":619,"depth":734,"text":46},{"id":714,"depth":734,"text":715},"Типы транзакций, логика корректировок, статистика.","md",null,{},{"icon":44},{"title":113,"description":756},{"Типы транзакций в Финапке":757},"Расход, Доход, Перевод и Корректировка. Логика определения корректировок, поведение при смене типа и расчёт статистики.","Ak7SXI4_yMckQl-AsfWOQSdLHL40_01BRDpcqEjUsww",[760,762],{"title":108,"path":109,"stem":110,"description":761,"icon":111,"children":-1},"Инициализация, структура проекта, паттерн хранилищ, авторизация - Supabase + PowerSync.",{"title":117,"path":118,"stem":119,"description":763,"icon":120,"children":-1},"Как PowerSync синхронизирует локальную SQLite с Supabase Postgres.",1782114340141]