Mengapa
Beberapa tahun yang lalu, saya tertarik untuk mendapatkan penghasilan pasif dan memutuskan untuk mencoba berinvestasi menggunakan platform p2b. Setelah beberapa waktu, menjadi nyata bahwa dana sangat terfragmentasi oleh situs, bank, hutang, dan ini membuatnya sulit untuk memahami situasinya. Saya tidak bisa menjawab dua pertanyaan paling penting:
Berapa banyak uang yang saya miliki?
Apa trennya? Apakah saya menjadi lebih kaya atau lebih miskin?
Itu perlu untuk entah bagaimana mengumpulkan informasi bersama dan menjaganya agar tetap up to date.
Solusi untuk masalah ini adalah sebagai berikut:
Tabel di Google Sheets
Keuntungan: dilakukan dengan cepat, fleksibel, gratis
Kekurangan: kebutuhan untuk memperbarui data secara manual
Pada awalnya, saya menggunakan opsi ini, tetapi kerja keras untuk mempertahankannya melelahkan: saya harus pergi ke banyak akun pribadi dan menulis ulang data dari sana. Selain itu, beberapa aset memiliki volatilitas tinggi, sehingga ketidakteraturan data memengaruhi kualitas pengambilan keputusan.
Solusi Khusus
Dalam kebanyakan kasus, ini adalah tabel yang sama, hanya dengan antarmuka yang bagus / nyaman.
Dalam kasus yang jarang terjadi, ada integrasi dengan beberapa bank, tetapi dalam semua kasus yang saya coba - itu tidak stabil dan tidak dapat diandalkan. Juga menakut-nakuti kebutuhan untuk memberikan nama pengguna / kata sandi Anda dari Internet banking dan kurangnya integrasi dengan sumber data non-standar.
Menjadi jelas bahwa Anda harus menulis sendiri layanan yang sesuai - ini adalah satu-satunya cara untuk mengotomatisasi sepenuhnya penerimaan data keuangan, dan pada saat yang sama tidak perlu khawatir tentang mentransfer rincian ke pihak ketiga. Selain itu, itu akan memungkinkan untuk mengimplementasikan antarmuka yang diinginkan. Maka mulailah proyek BudgetTracker, yang telah saya gunakan dengan sukses selama dua tahun sekarang. Ini dapat diunduh sebagai sumber dan / atau diinstal pada server Anda sendiri sebagai wadah buruh pelabuhan yang sudah jadi.
Ide utama
Ada dua sisi berbeda tentang bagaimana Anda memandang keuangan. Di satu sisi, ada keadaan saat ini (kondisional - sekarang ada "Y" uang di akun "X"), di sisi lain, ada transaksi (kondisional - pembelian "XX" untuk uang "UUU" pada waktu T).
Kedua sisi keuangan ini praktis independen satu sama lain, tetapi perlu untuk memahami tren umum. Contoh sederhana adalah bahwa kita memiliki aset yang mirip dengan deposito (misalnya, obligasi), yang kita beli secara berkala.
Untuk membuat grafik perubahan nilai aset semacam itu (dan perkiraan), penting untuk tidak memperhitungkan pembelian.
Sumber data
Ada berbagai penyedia - sumber data, misalnya, mengumpulkan data dari bank klien.
Daftar Penyedia yang Didukung- FX - nilai tukar: EUR, USD
- LiveCoin - pertukaran cryptocurrency
- Penenza
- AlfaBank
- Alfa Capital
- Alpha Direct
- Alfa Aliran
- ModuleBank
- ModuleMoney
- Raiffeisen
- Hutang dan pinjaman (untuk hutang yang dimasukkan secara manual)
- POST-api untuk menerima data acak dari sistem eksternal
Karena beberapa penyedia memerlukan otentikasi SMS, ada juga integrasi dengan SMS via IFTTT (hanya untuk ponsel Android).
Setiap hari, penyedia mengumpulkan status masing-masing akun dan daftar semua transaksi dan menyimpannya dalam database. Untuk melakukan ini, Chrome dimulai, dan dengan bantuan Selenium, data yang diperlukan diambil dari bank online.
Akun
Status setiap akun membentuk tabel formulir:

Ini memungkinkan untuk melihat detail dan kondisi masing-masing akun, tetapi tidak membantu melihat gambaran besarnya, dan tidak memberikan jawaban untuk pertanyaan sederhana "berapa banyak uang yang saya miliki?".
Untuk menjawab pertanyaan ini, dukungan untuk "kolom terhitung" telah ditambahkan, di mana Anda dapat menentukan formula, misalnya:

Namun selain nilai spesifik, saya juga ingin melihat tren, emisi, perkiraan - dengan kata lain, melihat dinamika nilai ini (dan kadang-kadang bukan hanya satu).
Untuk melakukan ini, ada konsep "halaman utama" di mana Anda dapat mengonfigurasi masing-masing widget untuk fokus pada kolom / tren tertentu.
Widget

Ada beberapa jenis widget:
- Donat dengan biaya (dari transaksi)
- โNilai Terakhirโ adalah bagan garis untuk kolom yang berubah-ubah, menunjukkan perubahan yang diproyeksikan dalam tahunan (%), dan aktual untuk hari terakhir (%). Ini juga terjadi dalam mode "kompak", ketika hanya menunjukkan nilai saat ini (terakhir).
- "Delta" - menunjukkan perubahan kolom dalam angka selama 24 jam, 48 jam, 1 minggu dan 1 bulan terakhir
- "Donat" - untuk kolom terhitung
- "Grafik" - untuk kolom terhitung
Setiap jenis widget memiliki ukurannya sendiri, dan mereka dapat dipindahkan relatif satu sama lain menggunakan "panah". Secara default, mereka disembunyikan, dan muncul ketika Anda mengklik tombol "mata" di bagian atas halaman:

Juga, saat membuat atau mengedit widget, dimungkinkan untuk mengubah pengaturannya:

Transaksi
Untuk bekerja dengan transaksi, atau DDS , ada halaman terpisah di mana Anda dapat melihat semua transaksi dikelompokkan berdasarkan kategori.

Setiap transaksi memiliki "jenis" transaksi - itu adalah "pendapatan", "biaya", atau "transfer". Terjemahan diatur secara manual untuk mengecualikan terjemahan dari bagan dari halaman utama.
Akan lebih mudah untuk memperlancar jadwal untuk aset dari penyedia yang tidak memiliki transaksi. Misalnya, pasar saham. Anda bisa membeli saham, dan harganya juga bisa naik, dan pada grafik Anda sering hanya ingin melihat jenis peristiwa kedua.
Jika penyedia data tidak memiliki dukungan transaksiDalam hal ini, lebih mudah untuk menambahkan transaksi yang dihasilkan secara otomatis di properti kolom, dan pada saat pembelian, edit transaksi di mana saham dibeli dan setel jenisnya menjadi "transfer".
Kategori dan tipe dapat diatur secara manual (Anda harus mendapatkannya terlebih dahulu), dan berdasarkan aturan. Ketika mengatur kategori untuk suatu transaksi, ia secara otomatis menginstal sendiri pada semua transaksi lain dengan deskripsi yang sama (dan juga akan diterapkan pada transaksi serupa di masa mendatang). Selain mengatur kategori secara manual ke transaksi, Anda dapat menambahkan aturan dalam bentuk ekspresi reguler atau substring untuk secara otomatis mengatur kategori ke semua transaksi yang sesuai.
Ada juga bagian terpisah "Utang", di mana Anda dapat secara manual membuat utang. Untuk setiap utang, Anda juga dapat menetapkan template untuk transaksi, sehingga ketika DDS baru yang terkait dengan utang ini muncul, jumlah yang tersisa diperbarui.

Tumpukan teknologi
Saat ini, backend berjalan pada .NET Core 3, frontend pada Svelte 3.
ObjectRepository + LiteDB digunakan untuk menyimpan data.
Untuk integrasi dengan sumber data, bundel Selenium + Chrome digunakan.
Awalnya, semuanya ditulis sepenuhnya dalam .NET Core, tetapi beberapa waktu lalu frontend ditulis ulang di Svelte.
Karena warisan ini, komunikasi dengan server tidak dilakukan secara optimal dan ada rencana untuk menulis ulang bagian proyek ini menjadi model yang reaktif.
Bagaimana cara mencoba
File docker-compose.yml di repositori akan membantu:
version: "3.3" services: budgettracker: image: diverofdark/budgettracker:master restart: unless-stopped environment: Properties__IsProduction: 'true' # true . ConnectionStrings__LiteDb: '/data/budgettracker.db' volumes: - /dev/shm:/dev/shm # Google Chrome - /root/bt:/data ports: - "80:80" networks: public: {} networks: public: driver: bridge