mtotschnig / MyExpenses

GPL licenced Android Expense Tracking App
http://www.myexpenses.mobi/
GNU General Public License v3.0
844 stars 222 forks source link

Migrating from MoneyControl and other Budgeting Software #1487

Open creatvty opened 6 months ago

creatvty commented 6 months ago

Hey,

I have been looking into this project and I am quite amazed so far at the powerful feature set of this app. I have been using the budgeting app MoneyControl for years now and I am content but not super happy with it since it is lacking some features I would love to have but the project seems relatively static and it doesn't look like a lot of development is still going on there. For lack of good alternatives I have stuck with it. Until now...

As I said I think this app looks quite promising. I would like to try it out and migrate my data. Here is a list of issues I'm having that you might appreciate as Feedback but maybe you could also help me out here as a newcomer. I would definitely pay money for this if it holds what it promises.

These are some points I could think of. If more come to mind I will update this post. I would really love to use this app if I can manage to transition without a huge amount of work and without corrupting my budgeting data I have accumulated since 2016.

Thanks

mtotschnig commented 6 months ago

thank you for the extensive feedback!

* The help is quite good in-App but I think a more extensive Documentation / Wiki would be great

The app covers a lot of different use cases, and I lack the resources to maintain extensive documentation covering all of them. I try to gather frequently asked questions in the FAQ (https://github.com/mtotschnig/MyExpenses/wiki).

* The CSV import looks to be promising but as-is I cannot directly use the CSV export of MoneyControl (MC). In the interest of attracting more people and lowering the barrier of entry it would be great to have specific imports for other budgeting tools like this. I imagine this could be a pretty thin layer on the CSV import with some additional mapping and to be able to also import Categories, Tags, etc

Since there are so man different expense tracking applications, it is not feasible at the moment, to implement support for all of them. But if you encounter specific issues when importing from MC, I am ready help via Discussions here on Github or support@myexpenses.mobi, and maybe specific recommendations could then be extracted into the FAQ?

* Since MC is designed to be used collaboratively, there is the concept of "Person" as in "who acts on this transaction / account". This can also be considered in Visualizations. For me and my family this would be a vital feature but I was not able to find anything similar to this here

My Expenses is primarily focused on data stored on the device, and managed by a single user. Maybe if multiple users use the same device, or data is copied between devices via sync, the person could be represented via Tags? There is also the concept of Custom Attributes (https://github.com/mtotschnig/MyExpenses/issues/447) which is actually already implemented on the database level, and would just need an UI.

* The same goes for collaboration. The synchronization of the app's state between devices would be very important so we can have a single source of truth

The current synchronization feature should provide this.

* The scan function looks very promising but sadly I was not able to make it work yet. I installed Tesseract and tried it a few times but I always get a `no data` message. I was not able to find a relevant issue or closer information on what is important for the scan to succeed

The OCR via Tesseract is known to not have satisfactory results. You could give the Mlkit variant a try, if you are fine with using software that is not 100% FLOSS: https://github.com/mtotschnig/MyExpenses/wiki/FAQ:-OCR

creatvty commented 5 months ago

Thank YOU for the detailed reply :heart_hands:

The app covers a lot of different use cases...

I understand. I just think this could really help new people looking into this

Since there are so man different expense tracking applications, ...

Sure, but I think working off of the Pareto principle you could already help a lot of people just by implementing a few of the most used apps

My Expenses is primarily focused on data stored on the device, and managed by a single user. Maybe if multiple users use the same device, or data is copied between devices via sync, the person could be represented via Tags? There is also the concept of Custom Attributes (https://github.com/mtotschnig/MyExpenses/issues/447) which is actually already implemented on the database level, and would just need an UI.

Okay that solution sounds promising as a workaround. I will try it. For me the attribution of expenses to a certain person was pretty essential in MC that's why I thought this would translate to other apps.

The current synchronization feature should provide this.

Great!

The OCR via Tesseract is known to not have satisfactory results. You could give the Mlkit variant a try, if you are fine with using software that is not 100% FLOSS ...

Thank you, I have not tried this out yet. Will definitely give it a shot.

Thanks again for taking the time to answer these

creatvty commented 3 months ago

Hey @mtotschnig, I managed to do here some more work. If you want we can move this to discussion but for now I will answer here. The normal CSV export of MC was not sufficient for me so I used the sqlite Backup of MC to make my own CSV. I can later share the SQL Statement if there is interest. It looks very promising to me. The only Issue I have is with Transfers. In #1039 you mentioned that transfers are supported by passing the other account as Category i.e. [Cash]. I tried this, and it works in a sense, that it treats Transfers differently but what happens to me is pretty much that it just creates a normal Transaction where the Note is "Transfer: \<other account Name>". No opposite transaction is created in the other Account and the original Note for the transaction is also lost. I looked into the code and to me it seems Transfer is calling the wrong overload here https://github.com/mtotschnig/MyExpenses/blob/83fd9af2fc05d0ffaaeab749a67ec6724828eefd/myExpenses/src/main/java/org/totschnig/myexpenses/io/ImportAccount.kt#L135 as only amount and the originating account is passed. The closest overload I could find would be this one https://github.com/mtotschnig/MyExpenses/blob/83fd9af2fc05d0ffaaeab749a67ec6724828eefd/myExpenses/src/main/java/org/totschnig/myexpenses/model/Transfer.java#L85 Although this is also missing the note as parameter.

Is it possible to update this so it turns into an actual transfer? Or is there reasoning behind why it is the way it is?

Help / Advice is appreciated

creatvty commented 3 months ago

Following up on this. I managed to create Transfers. But they look different then the transfers created in the App. Also they are not counted towards the transfers in the totals. IMG_20240808_100248 As you can see here, the first transaction is the one I created manually, the other is created by the import. Also the totals for transfers is 100 instead of 200.

The csv looks like this

"Date";"Timestamp";"OriginalRecurringDate";"Value";"Expense";"Income";"Note";"AccountName";"AccountFlags";"IsAccountTransfer";"CounterAccountName";"Category";"CategoryFlags";"Person";"Group"
"2022-01-29";"2022-01-28 15:53:28";"";-100.0;100.0;;ATM SPK Rastatt;DiBa Giro;0;1;Cash;Transfer;;;[Cash]
"2022-01-29";"2022-01-28 15:53:28";"";100.0;;100.0;ATM SPK Rastatt;Cash;0;1;Cash;Transfer;;;[DiBa Giro]

I tried several approaches mentioned in #1039 , like putting the target account in the category. The way I'm mapping is like this: CSV -> MyExpenses

Date -> Date Value -> Amount Expense -> Expense Income -> Income AccountName -> Account Category -> Category Person -> Tags Group -> Subcategory

I pulled a backup from myExpenses and looked into the sqlite DB. So the issue is that the transaction are not actually mapped to the "Transfer" category. Even if you have "Transfer" as category.

"_id","comment","date","value_date","amount","cat_id","account_id","payee_id","transfer_peer","transfer_account","method_id","parent_id","status","cr_status","number","uuid","original_amount","original_currency","equivalent_amount","debt_id"
1,ATM SPK Rastatt,"1,643,410,800","1,723,103,823",10000,,3,,2,2,,,0,UNRECONCILED,,"56f44d64-3387-4b40-b9b9-2591cb86dfb8",,,,
2,ATM SPK Rastatt,"1,643,410,800","1,723,103,823",-10000,,2,,1,3,,,0,UNRECONCILED,,"56f44d64-3387-4b40-b9b9-2591cb86dfb8",,,,
3,ATM Sparkasse Rastatt.,"1,723,103,838","1,723,103,838",10000,1,3,,4,2,,,0,UNRECONCILED,,"0c6e433d-6499-4651-9d85-6d239d0c415a",,,,
4,ATM Sparkasse Rastatt.,"1,723,103,838","1,723,103,838",-10000,1,2,,3,3,,,0,UNRECONCILED,,"0c6e433d-6499-4651-9d85-6d239d0c415a",,,,

Is this a bug?

mtotschnig commented 2 months ago

@creatvty The CSV import and export have not yet been sufficiently adjusted after transfer categories have been introduced (#407). You are right that during import the default transfer category needs to be added. This must be done in a slightly different way than you have suggested in MR #1546 . I'll fix this, but it might not land in 3.8.8, because it is already in the pipeline.

creatvty commented 2 months ago

@mtotschnig I see, great news! Thank you for the effort. And for the quick response. Looking forward to it!

creatvty commented 1 month ago

Hey, @mtotschnig should the fix be released by now? I tried the transfer today again but to me it doesn't look like there was a change. This is the CSVs I tried using Category and SubCategory

"Date";"Expense";"Income";"Note";"AccountName";"Category";"Group"
"2016-01-22";;30.0;ATM abc;Cash;[Bank1];
"2016-01-22";30.0;;ATM abc;Bank1;[Cash];
"Date";"Expense";"Income";"Note";"AccountName";"Category";"Group"
"2016-01-22";;30.0;ATM abc;Cash;Transfer;[Bank1]
"2016-01-22";30.0;;ATM abc;Bank1;Transfer;[Cash]

Am I doing something wrong? The type is recognized as Transfer but the Category is not

Edit: I did a JSON Export along with a Transfer I manually created. Here is the difference

{
  "uuid": "542a2c74-bc94-4f7c-84d6-600ea3c6ba85",
  "label": "Bank1",
  "currency": "EUR",
  "openingBalance": 0,
  "transactions": [
    {
      "amount": -30,
      "comment": "ATM abc",
      "date": "2016/01/22",
      "status": "UNRECONCILED",
      "transferAccount": "Cash",
      "uuid": "03e1aa0d-bddd-4479-8eab-f7922f859877"
    },
    {
      "amount": -18,
      "category": [
        "Transfer" // This category is missing from the csv imported entry
      ],
      "comment": "Holla",
      "date": "2024/10/11",
      "status": "UNRECONCILED",
      "transferAccount": "Cash",
      "uuid": "af6b39bb-8663-4e44-8e5e-4e5d8ae1da44"
    }
  ]
}
mtotschnig commented 1 week ago

@creatvty Sorry for the late reply. What has changed, is that when you import a transfer via CVS, the default transfer category is added to the transfer. What is still missing, is that transfer categories are also exported. The problem is that this is not possible with the current CSV format, where transfer account and category share the same column. So the way forward would be to introduce a new CSV format where those two are written to separate columns. I plan to take this up for one of the upcoming versions.