LINUX.ORG.RU

Требуется помощь с разработкой приложения для учета личных финансов

 , , ,


1

2

Уже несколько лет использую GnuCash для учета личных финансов. В целом эта программа нравится, но кое-что хотелось бы переработать:

  • Поддержка мультивалютности: она есть, но неудобная: все счета привязаны к конкретной валюте (ниже напишу более подробно как я хочу)
  • Ввод разделенных транзакций по шаблону: хочется чтобы суммы остальных частей пересчитывались автоматически
  • При вводе транзакций/сплитов в дроп-даун попадают скрытые счета
  • некоторые прочие мелкие косяки

Наверное некоторые из этих недостатков можно было бы решить в существующем GnuCash, но вот мое представление о мультивалютности (я кстати писал о нем в рассылку gnucash) не очень укладывается в существующую схему базы данных, так что даже если брать gnucash за основу и форкать, перерабатывать все пришлось бы весьма существенно.

Идея с мультивалютностью заключается в том, чтобы отвязать счета от валют: то есть валюта будет указываться в каждом сплите (части транзакции, изменяющей сумму на одном счете). Таким образом на каждом счете смогут одновременно существовать несколько балансов в разных валютах. Это удобно тем, что когда у пользователя много используемых валют, ему не придется дублировать все свои счета под все валюты. Сделал один счет «наличные», и туда можно записывать и рубли, и доллары, и евро и все что угодно. Или другой пример: сделать один счет «брокерский», и на него записать «акции XXXX», «акции YYYY» и т.д. (каждый вид ценных бумаг как отдельная валюта)

>>> подробное описание требований к программе (1 фаза)

Пока что больше думал в сторону того, чтобы сделать это как десктопное приложение с хранением данных в виде базы SQLite, но не уверен в этом решении: в будущем хочется иметь и мобильную версию тоже. Так придется код писать с нуля, и синхронизировать базу каким-то внешним инструментом. Но если делать веб-приложение, то тогда встают более остро вопросы безопасности и хостинга.

Пытался сделать что-то с помощь PyQt и LLM, но видимо не очень хватает компетенции и я сам не до конца понимаю как оно должно работать (в плане архитектуры). Gemini посоветовал Model-View-Presenter, но пока что это выглядит просто как перекладывание данных туда-сюда.

Особую сложность пока что вызывает обработка ввода/изменения данных. С одной стороны, у меня и так реализовано отображение данных, и хочется при изменении просто перезагрузить все. Потому что отобразить выписку по выбранному счету и сплиты по выбранной транзакции – дело пары не очень сложных SQL-запросов. Так не надо дублировать логику, меньше шансов ошибок. Но с другой стороны, не очень понятно, можно ли это реализовать без моргания интерфейса, потери фокуса поля и прочих подобных эффектов. А вот если не перезагружать все, а прицельно изменять – кажется что это потребует весьма глубокого анализа. Например, если пользователь переводит сплит с одного счета на другой, то это отразится на:

  • балансах старого и нового счета в валюте сплита
  • балансе активного счета после каждой транзакции, которая была сделана после редактируемой (в валюте сплита) А ведь это лишь один пример: пользователь может поменять дату транзакции, сумму или валюту сплита, и на все все такие изменения нужно будет просчитать импакт и реализовать пересчет.

В процессе написания этой темы решил все же залить свои наработки куда-нибудь, а то совсем без кода как-то не очень серьезно. Но пока это очень сырая версия (и не исключено переписывание с нуля).

>>> репозиторий

Предполагается что это будет свободный, скорее всего некоммерческий проект (если будет решено сделать веб-приложение, то возможно будет хранение пользовательских данных за деньги как альтернатива self-hosted).

Оптимистичные планы (фазы проекта):

  1. Ручной ввод и отображение данных. То что описано в требованиях выше.
  2. Отчеты, хранение курсов валют (для отчетов)
  3. Импорт данных (например выписки из банков в CSV)
  4. Мобильное приложение

Но самому мне с этим похоже что не справиться. Поэтому буду рад, если кто-то сможет помочь в любых формах:

  • Советы
  • Код-ревью
  • Пулл-реквесты
  • Переписывание с нуля по требованиям

Не исключаю возможность оплаты (ниже рынка, зато без NDA).

★★★★★
Ответ на: комментарий от Cergoo

Если человек про двойную запись в курсе, то считай, 70% бухучета он уже освоил. Дальше только план счетов и пбу-шки, но это фактически справочники. Ну скорей всего придется отдельно банковский бухучет отдельно изучать (он там сильно свой специфический).

Подозреваю эффект будет как с пайнта пересеть на фотошоп.

yax123 ★★★★★
()
Ответ на: комментарий от Klymedy

но мне бы все же что-то с базой данных и GUI

Какой программой учёта личных финансов вы пользуетесь? (комментарий):

Вспомнил Eqonomize!:
Eqonomize! is a cross-platform personal accounting software, with focus on efficiency and ease of use for small households. Eqonomize! provides a complete solution, with bookkeeping by double entry and support for scheduled recurring transactions, security investments, and budgeting. It gives a clear overview of past and present transactions, and development of incomes and expenses, with descriptive tables and charts, as well as an approximation of future account values.

Святые угодники! Я перепробовал огромную кучу приложений для ведения персональных финансов. Это единственное, которое нормально работает с многовалютным учетом, подтягивает курсы валют автоматически, позволяет совершать многовалютные трансферты между счетами!😃

Может и подойдёт, но сам я не пользуюсь.

dataman ★★★★★
()
Ответ на: комментарий от anonymous_sama

Так я там и писал что хочу свой велосипед, а про вариант форкнуть gnucash написал как о возможной альтернативе, которая мне кажется менее подходящей.

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Cergoo

Ну да, под «дублировать» я имел в виду заведение субсчетов (как один из возможных вариантов). Проблема в том, что они не заводятся автоматически.

А уж какой разделитель у счетов в иерархии – мне вообще не принципиально. В GnuCash разделяется через двоеточие по умолчанию: например «Расходы:Еда:Продукты:Овощи:Морковь».

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от yax123

Ну как минимум обязательное требование – чтобы программа была свободная и работала под линуксом.

Дальше только план счетов и пбу-шки, но это фактически справочники. Ну скорей всего придется отдельно банковский бухучет отдельно изучать (он там сильно свой специфический).

Смысл своего велосипеда отчасти в том чтобы не быть привязанным к тем планам счетов и правилам учета, которые есть в представлении разработчиков софта. То есть как заводить счета и как вносить операции – должно оставаться целиком на усмотрение пользователя.

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Klymedy

Про шашечки я уже говорил.

Насколько я знаю 1с под линуксом уже работает. Исходники конфигураций есть. Движок закрыт, это есть такое.

Насчет:

должно оставаться целиком на усмотрение пользователя.

Требование крайне странное.

Бухгалтерии как деятельности уже тысячелетия. И все это время она оттачивалась и шлифовалась. Все это вылилось в планы счетов, проводки и прочие абстракции. Я не специалист в ней (рядом стоял, ну и жена у меня матерая в этом деле, главбухов собеседует). Поэтому, как минимум если задача стоит чуть сложней суммирования чеков из магазина, стоит посмотреть чего там напридумывало человечество. Есть мнение, что теория бухучета может дать исчерпывающие ответы на все вопросы учета. А дальше нужно просто взять подходящий инструмент.

А вы и теорию свою пытаетесь придумать (не лично вы в данном случае, а хоббит) да еще и стругаете под эту теорию свою палку-копалку.

Напоминает плевание от сложности интерфейса блендера. Хотя если погрузится немного, все выглядит просто и понятно. Просто предметная область вынуждает делать такие интерфейсы, а не погромисты такие идиоты.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

Я не против правил бухучета, но не хочу чтобы программа была к ним гвоздями прибита. Потому что эти схемы счетов и правила учета, хоть и разрабатывались тысячелетиями, но даже в разных странах немного разные. Не говоря уж о том, что правила, которые разработаны для учета в организациях не факт что подойдут для учета личных финансов.

Я не утверждаю в 1С все прибито гвоздями – может и нет, не знаю просто. Хотя тот факт, что код закрыт – уже фатальный недостаток для меня.

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Cergoo

А я бы тоже не отказался поучаствовать в проекте на Rust и попробовать новый для себя язык. Несмотря на то, что «мой» язык это C++. При условии, что личные проекты доведены до состояния, близкого к совершенству, разумеется, вот это условие не выполняется, к сожалению.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от yax123

А вы и теорию свою пытаетесь придумать (не лично вы в данном случае, а хоббит) да еще и стругаете под эту теорию свою палку-копалку.

Фокус в том, что палка-копалка под эту теорию уже придумана! И меня эта копалка устраивает где-то на 90%. Проблема в том, что она проприетарная, т.е. с оставшимися 10% я пролетаю. А те копалки, которые придуманы в соответствии с отточенной тысячелетиями теорией – это экскаваторы, которые на мои 6 соток не лезут. Вот я и делаю свою лопату (максимум мотоблок), которую смогу расширять.

ну и жена у меня матерая в этом деле, главбухов собеседует

Вот именно, главбухов! Софта для главбухов навалом! И я не лезу на этот рынок. А софта для Васи Пупкина с 2,5 источниками дохода, кошельком, заначкой, парой вкладов, тройкой карт и (опционально) десятком-другим акций, как не было, так и нет. И когда он пытается его найти, ему хором начинают советовать софт для главбухов, сделанный по канонам энтерпрайзного бухучёта. Вася плюётся и возвращается к учёту в экселе, а то и в тетрадочке.

Эта ситуация, ящитаю, ненормальная, и её надо переломить.

P.S. Если что, я вполне понимаю бухгалтера, который привык на работе мыслить провОдками, и дома хочет, чтобы всё тоже было в проводках, даже небо, даже Аллах. Вполне законное желание, этому человеку моя программа совершенно точно не нужна (и подозреваю, что 1С:Деньги сделаны для него, да и GnuCash тоже). Я пишу для других людей.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от no-such-file

То есть ты хочешь сказать, что тебе проще на каждую валюту всегда свой счет создавать, чем в один все сложить?

Сомнительно. Опять же в других системах фин учета именно так и сделано, акции как отдельный вид валюты, еще у тебя может быть валюта Золото, к примеру, или еще какие фантики, которые по курсу можно перевести в другую валюту. Вот накручивать на это все счета это как раз странно, тем более если все фантики лежат в одной корзинке.

masa ★★
()
Последнее исправление: masa (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Ну тогда можно завести для них 1000 записей в таблице валют.

Опять же, повторюсь: я не заставляю использовать такой подход, а лишь облегчаю его использование для тех кому он понравится. Если пользователь предпочитает записывать на брокерском счете стоимость акций в рублях, и периодически их переоценивать – да пожалуйста.

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Мне конечно кажется ты переоцениваешь сложность gnucash. Я конечно тоже не сразу разобрался как им пользоваться, но когда понял принцип, проблем уже не возникало.

Когда есть 4 типа сущностей (счета, проводки/транзакции, сплиты, валюты), которые работают всегда одинаково – это проще чем когда есть отдельные виды сущностей на счета, вклады, кошельки, кредиты, долги, категории доходов, категории расходов, доходы, расходы, переносы, сторонние счета, валюты, акции, криптовалюты и хрен поймешь в чем между ними разница и какие есть ограничения на то как их комбинировать между собой.

Вот например, как в твоей (или козловской) программе обрабатывать возврат купленного товара? Как расход но со знаком минус (а она позволит поставить минус?), или как доход (а она позволит вставить категорию расходов в доход?), или там должна быть специальная функция для возврата?

А если использовать тупой двойной учет, то просто создаешь новую транзакцию у которой все сплиты имеют обратный знак (либо если программа без сплитов – то меняешь местами дебет и кредит).

И еще пример: допустим Вася работает за еду: заработал 1000 рублей и получил зарплату обедом на такую же сумму. Если у нас тупая система двойного учета, то Вася может просто создать транзакцию на 1000 рублей, которая напрямую переведет деньги со счета доходов на счет расходов. А у тебя как?

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от dataman

Спасибо за идею, но пока что посмотрев описание и скриншоты не похоже чтобы она больше остальных соответствовала моим представлениям о прекрасном.

Support for multiple currencies, with selectable currency for each account (included currencies are automatically updated)

То есть все таки есть привязка валюты к счету.

Да и по скринам видно, что там отдельные вкладочки на расходы, доходы, переводы. То есть технически оно как-то разделяет эти счета. В целом не то чтобы это большая проблема, но на данном этапе мне наверное хотелось бы что-то максимально тупое и гибкое.

Klymedy ★★★★★
() автор топика