By: Team MooLah Since: Aug 2019 Licence: MIT

1. What is MooLah?

Welcome to MooLah, your perfect personal finance assistant.

MooLah is a powerful, hassle-free expense tracker, designed to boost your efficiency at managing your daily expenses. With MooLah, you can easily monitor expenses under multiple budgets, compare expenses across different periods, set reminders for future events…​ many more wonderful things to explore. Equipped with natural language time format parser, MooLah understands what you type, just like a friend - no more rigid date and time formatting. With its exceptional autocomplete and prefix suggestion feature, MooLah is faster, smarter, and more intuitive than conventional expense trackers. Although a desktop app optimised for Command Line, MooLah has an elegant Graphical User Interface (GUI).

This is what MooLah looks like:

Ui annotated
Figure 1. The graphical user interface for MooLah

Interested? Jump to the Section 3, “Quick Start” to get started. Enjoy!

2. How to Read This User Guide

First, let’s familiarize ourselves with the symbols and formats used in this document:

Contains key information relevant to the execution of commands in MooLah.
Contains important information on feature implementation.
{contains sample command-line input}

TAB Enter : keys on the keyboard of your computer

3. Quick Start

Follow this installation guide to get MooLah up and running in your computer:

  1. Ensure you have Java 11 or above installed in your Computer.

  2. Download the latest MooLah-v1.4.jar here.

  3. Copy the file to the folder you want to use as the home folder for MooLah.

  4. Double-click the file to start the app. The GUI should appear in a few seconds.

  5. Type a command in the command box and press Enter to execute it.
    e.g. typing help and pressing Enter will open the help window.

  6. Press TAB if you want to enable the suggestion feature.

  7. Some example commands you can try:

    • listexpense : lists all expenses

    • addexpense d/Chicken Rice p/2.50 c/Food t/25-10 : adds an expense named Chicken Rice to the expense tracker.

    • deleteexpense 3 : deletes the 3rd expense shown in the current list

    • exit : exits the app

  8. Refer to Section 4, “Features” for details of each command.

4. Features

This section gives a comprehensive list of MooLah’s wonderful features, and helpful tips on how you can master them quickly.

Command Format

  • Words in between < and > are the parameters which are to be supplied by you!

    • addexpense p/<PRICE> c/<CATEGORY> d/<DESCRIPTION>, means you will need to supply a value to be used as the PRICE, DESCRIPTION and CATEGORY such as addexpense p/2.50 c/food d/chickenrice.

  • You don’t have to input the parameters in square brackets if you don’t want to. These arguments are optional, and you may use them to specify more details.

    • addexpense d/<DESCRIPTION> p/<PRICE> c/<CATEGORY> [t/<DATE>] means that both
      addexpense d/Chicken Rice p/2.50 c/Food and
      addexpense d/Chicken Rice p/2.50 c/Food t/25-01
      are valid inputs.

  • You may also enter parameters with prefixes in any order.

    • addexpense p/2.50 d/chicken rice c/food
      addexpense c/food d/chicken rice p/2.50 are both valid.

  • However, commands that require indexes will only be successful if the index is supplied immediately after the command word.

    • editexpense 1 p/2.30 is valid.

    • editexpense d/2.30 1 is not valid.

4.2. Undo and Redo

4.2.1. Undo the previous command : undo

Did something wrong? You can undo it.

However, do keep in mind that you can only undo commands that modify the data in MooLah, such as addexpense, deleteexpense-primary, and so on. Head over to "Command Summary" section for list of commands that are undoable.

Do not worry if you forgot what you did a few steps back (it happens!). MooLah will display a short description of what particular command it undid to help you confirm that you undid the right thing.

Format: undo

Example:

Let’s say you just added a new expense…​

addexpense d/bowling p/10 c/entertainment
undo1
Figure 2. The state of MooLah after adding the "bowling" expense

But you added it to the wrong budget! You wish to undo the mistake now…​

undo

And MooLah will undo it for you and return the data to the way it was before. Also, it will display Undid "Add expense bowling (10.00)" in the result display for reference. Phew!

undo2
Figure 3. The state of MooLah after undoing the expense addition

4.2.2. Redo an undone command : redo

You might hit one undo too many and wish to cancel that one undo. That’s okay, redo will help you on that.

Similar to undo, MooLah will display a short description of the command it redid to you.

Format: redo

Example: Continuing the example in the "undo" section…​ suppose now you think that the "bowling" expense is in the right place after all, and you wish to do the addition again.

redo

Result: At the end, the "bowling" expense will be re-added back to MooLah. Yay! MooLah will also display a message Redid "Add expense bowling (10.00)" for reference.

4.3. Changing panels: view

While most commands will change the panel-in-view to the relevant panel, you may wish to manually go to a panel without attempting to modify data. You may do so with the view command.

The format:

view <PANEL_NAME>

For example, you may execute the following command to view your Budget List:

view Budget List

These are the panels which you may access through the view command:
- Aliases
- Expense List
- Primary Budget
- Event List
- Budget List
- Statistics* (see Note below!)

Note

  1. Panel names are case-insensitive.

  2. * Attempting to view the Statistics panel will lead to an empty panel until you have used one of the statistic commands to populate it.

view Statistics

No statistics will be shown in this situation.

stats
listexpense
view Statistics

Using it after a prior statistic command will show you the previous statistics generated.

4.4. Generic commands

MooLah has 4 generic commands which behave differently depending on which Panel you are viewing.

These commands are add, list, delete, and edit. These generic commands differ from Panel to Panel.

For example, if you are in the Expense List Panel, then:
add = addexpense

However, in the Aliases panel:
add = addalias

Table 1. List of all generic command configurations

Expense List

add addexpense
delete deleteexpense
list listexpense
edit edit expense

Budget List

add addbudget
list listbudget

Event List

add addevent
delete deleteevent
list listevent
edit editevent

Aliases

add addalias
list listalias
delete deletealias

Primary Budget

add addexpense
delete deleteexpense-primary
edit editexpense-primary

4.5. Natural language Datetime parsing

In MooLah, you can type all dates and times in natural language! You no longer have to remember what date it was a week ago; just type '1 week ago' into the appropriate parameter in the command line and MooLah will handle the rest! Datetime formats are parsed mostly by a third-party Natural Language Parser library, Natty, which supports human jargon. Please refer to http://natty.joestelmach.com/ for documentation and more information.

Natty naturally parses all datetime formats in the American format (e.g. MM/dd, MM-dd). In MooLah however, we have modified the parser such that all formats are parsed in the international format (e.g. dd/MM). So, the tryout page on Natty’s official website will parse dates differently in this aspect.

4.6.1. Adding an expense: addexpense

The bread and butter of any expense tracker: adding an expense! In order to begin tracking your expenses, you are going to need to enter some expenses to track.

This is the format:

addexpense d/<DESCRIPTION> p/<PRICE> c/<CATEGORY> [t/TIMESTAMP]
  • If you don’t specify the time, your expense will be added with its time being the current system time.

  • You cannot input an expense from the future. There’s a better way to do that, see here!

  • You should only input one of the following into the <CATEGORY> field: FOOD, TRAVEL, TRANSPORT, SHOPPING, UTILITIES, HEALTHCARE, ENTERTAINMENT, EDUCATION, OTHERS. These categories are case-insensitive.

Examples:

  • addexpense d/birthday p/40 c/Shopping t/10-10

  • addexpense d/Buffet c/Food p/250

  • addexpense d/Chicken rice p/2.50 c/Food t/yesterday noon

After typing in the command and entering it…​

addexpense before
Figure 4. Entering an addexpense command into the command box

Your new expense will appear in the list!

addexpense after
Figure 5. a new Food is added to the list.

A new Food expense is added.

Category Icons

food Food
transport Transport
education Education
travel Travel
utilities Utilities
shopping Shopping
healthcare Healthcare
entertainment Entertainment
others Others

4.6.2. Adding an expense from NUS canteens' menu : addmenuexpense

This is what makes MooLah special for NUS students. Shortcut your way to adding expenses for foods and drinks in NUS!

Currently, MooLah only supports just a handful of menu items, though. Head over to our "Menu Items List" section to see the supported menu items. A more comprehensive menu list is on its way in v2.0!

Format:

addmenuexpense m/<MENU_ITEM> [t/TIMESTAMP]

Example:

addmenuexpense m/deck chicken rice

This will add a new expense that corresponds to The Deck’s Chicken Rice and MooLah will automatically fill in the description, price, and category for you.

4.6.3. Listing all expenses : listexpense

You can list every single expense you have added into MooLah.

Format: listexpense

4.6.4. Updating an expense: editexpense

Made a mistake? You can edit expenses too.

Format:

editexpense <INDEX> [p/<PRICE>] [d/<DESCRIPTION>] [t/<TIMESTAMP>] [c/<CATEGORY>]

Example:

editexpense 2 p/2.30

Executing this command will change the PRICE of the second expense in the list to 2.30.

editexpense before
Figure 6. expense #2 has a price of $123.00
editexpense after
Figure 7. expense #2 has a price of $2.30 after executing the command
  • Edits the expense at the specified INDEX. The index refers to the index number shown in the currently displayed list.

editexpense during
  • The index must be a positive integer 1, 2, 3, …​

  • You cannot edit an expense to have a future timestamp!

  • You must provide at least one of the optional fields.

  • Existing values will be updated to the input values.

4.6.5. Locating expenses by name: findexpense

You can find expenses whose description contains any of the keywords you inputted.

Format:

findexpense <KEYWORD> [<MORE_KEYWORDS>]
  • The search is case insensitive. e.g "chicken" will match "Chicken"

  • The order of the keywords does not matter. e.g. "Puff Curry" will match "Curry Puff"

  • Only the description is searched.

  • Only full words will be matched. e.g. "chick" will not match "chicken"

  • Expenses matching at least one keyword will be returned (i.e. OR search). e.g. an expense with description "Chicken rice", and expense with description "Duck Rice" will both match "rice"

Examples:

  • findexpense rice
    will show you all expenses with rice in their description.

  • findexpense chicken taxi schoolfee
    will show you all expenses with either "chicken", "taxi", "schoolfee", or a combination of those in their description.

4.6.6. Deleting an expense: deleteexpense

You can also delete an expense from the expenses list in MooLah.

Format:

deleteexpense <INDEX>
  • Deletes the expense at the specified INDEX.

  • The index refers to the index number shown in the currently displayed list.

  • The index must be a positive integer 1, 2, 3, …​

Examples:

listexpense
delete 2

Deletes the 2nd expense in the list of expenses, shown after listexpense is executed.

listexpense
findexpense chicken
deleteexpense 1

Deletes the 1st expense in the results of the findexpense command.

Events are pretty similar to expenses, except that they denote potential expenses that may happen in the future. You should use this feature to keep track of future important events in your life that would require you to spend some money (e.g. your friends' birthdays).

At launch, MooLah will remind you of your upcoming events. While using MooLah, any transpired events also appear as popups, prompting you whether you wish to add these events as corresponding expenses.

TranspiredEventsPopup
Once an event has transpired, it is permanently deleted from MooLah and you cannot get it back! Undoing MooLah to a state where that event was still present would not restore the event.
MooLah checks for transpired events every 2 seconds, so you may experience a very slight delay when it comes to event popups!
A popup would also not appear if the transpired event has had its corresponding budget deleted.

4.7.1. Adding an event: addevent

Events share the same fields as expenses, so you add them in the same way, albeit with a different command word.

Format:

addevent d/<DESCRIPTION> p/<PRICE> c/<CATEGORY> t/<TIMESTAMP>
  • Events are potential future expenses, so the TIMESTAMP field is compulsory and must contain a future time.

  • You should only input one of the following into the CATEGORY field: FOOD, TRAVEL, TRANSPORT, SHOPPING, UTILITIES, HEALTHCARE, ENTERTAINMENT, EDUCATION, OTHERS. These categories are case-insensitive.

Examples:

  • addevent d/Brian birthday p/40 c/Shopping t/two weeks from now

  • addevent d/Family buffet c/Food p/250 t/31-12

  • addevent d/Bangkok plane tickets t/tomorrow p/200 c/Travel

4.7.2. Listing all events : listevent

You can list every single event currently tracked by MooLah.

Format:

listevent

4.7.3. Updating an event: editevent

You can edit events the same way you edit expenses.

Format:

editevent <INDEX> [p/<PRICE>] [d/<DESCRIPTION>] [t/<TIMESTAMP>] [c/<CATEGORY>]

Example:

listevent
editevent 2 p/300

This will update the price of the 2nd event in the current list to be 300.

  • Edits the event at the specified INDEX. The index refers to the index number shown in the currently displayed list.

  • The index must be a positive integer 1, 2, 3, …​

  • Unlike editing expenses, you can edit events to have past timestamps! This is to accommodate cases where your event happened earlier than expected.

  • You must provide at least one of the optional fields.

  • Existing values will be updated to the input values.

4.7.4. Deleting an event: deleteevent

You can also delete an event from the events list in MooLah.

Format:

deleteevent <INDEX>
  • Deletes the event at the specified INDEX.

  • The index refers to the index number shown in the currently displayed list.

  • The index must be a positive integer 1, 2, 3, …​

Examples:

listevent
delete 2

This will delete the 2nd event in the list of events, shown by listevent.

4.8. Let’s Do Budgeting

Feel a need to cut your spending? Try MooLah’s awesome budgeting feature! It can help you cultivate healthier saving habits and better financial management skills, in these following ways:

  • Each budget has a progress bar with a percentage (rounded to the nearest integer), which indicates how much you have spent as a proportion to the budget limit.

  • The color of the progress bar implies the following 4 status:

    • GREEN: 0% - 49% of the limit.

    • YELLOW: 50% - 89% of the limit (MooLah will notify you’re halfway through)

    • ORANGE: 90% - 100% of the limit. (MooLah will remind you of the approaching limit)

    • RED: > 100% of the limit. (MooLah will give a warning and advise you to cut down on your spending. However, the percentage will continue to update even if you exceed the budget, to give you a better idea of how much you have overspent.)

When the budget is exceeded too much (more than 10^7 times the budget limit), you will not be able to add any new expense — I hope that won’t happen ;)

4.8.1. Create a New Budget : addbudget

Want your expenses tracked under a recurring budget? Simple enough with this command: addbudget.

The concrete format is:

addbudget d/<DESCRIPTION> p/<AMOUNT> sd/<START_DATE> pr/<PERIOD>

For example, after typing:

addbudget d/school p/300 sd/01-10-2019 pr/month

You’ll see that a new budget school is created, and set to $300, recurring monthly, starting from 1 Oct 2019.

All expenses that do not have a budget will go under Default Budget, which is not deletable nor modifiable.
Each budget must have a unique (case-insensitive) name.
MooLah supports 4 types of budget period input: day, week, month, and year (all in lower case).
The year in <START_DATE> is optional, i.e. you can simply input 01-10 and the year will be automatically set to the current year.
The <START_DATE> can be any time in the past or future, the budget period will automatically normalize to the current period. For example, suppose today is 23-10-2019, when you type sd/01-07 pr/month, the resulting budget period will be 01-10-2019 to 31-10-2019, since that’s the period anchored by today’s date.
All budgets are recurring. Continuing from the example above, on 1 Nov 2019, you’ll see the budget’s period refreshed to 01-11-2019 to 30-11-2019, and all past expenses archived, giving you an empty budget panel to start with.
When you add an expense that’s not within the current budgeting period, the budget panel will stay at the current period. To see the expense you’ve just added, switch to that corresponding period first. See Section 4.8.8, “View Expenses in a Different Period: switchperiod

4.8.2. Switch Between Budgets : switchbudget

Now that you’ve successfully added a few different budgets, wonder how to toggle between them? Try this magical command: switchbudget, which switches the primary budget to any other budget in one click!

The concrete format is:

switchbudget d/<BUDGET_NAME>

For example, suppose you’re at primary budget school now. After typing:

switchbudget d/outside school

You will see that the primary budget panel is switched from school to outside school. Every expense you add from now on will be tracked under the outside school budget instead.

There is one, and only one, primary budget in MooLah at all times. Every expense you enter automatically goes to this current primary budget. If you wish to let an expense be tracked by a different budget, switch to that corresponding budget first, before you add the expense.
The <BUDGET_NAME> is case-insensitive.

4.8.3. List All Budgets: listbudget

To get an overview of all the budgets at hand, simply type:

listbudget

You’ll see a list of all budgets in MooLah.

The primary budget is marked with a red border.
To go back to primary budget panel, type view primary budget.

4.8.4. Edit a Budget: editbudget

A typo? On a second thought? No worries, you can easily modify your budget with editbudget.

The concrete format is:

listbudget (first go to list of budgets)
editbudget <INDEX> [d/<DESCRIPTION>] [p/<AMOUNT>] [sd/<START_DATE>] [pr/<PERIOD>]

For example, if the second budget shown in the list is school, recurring monthly, amount set as $300, refreshed on the 1st of each month, after typing:

listbudget
editbudget 2 d/school expenses p/400 sd/05-10

It will change to school expenses, capped at $400, refreshed on the 5th of each month.

You may choose to edit any of these 4 attributes of a budget: DESCRIPTION, AMOUNT, START_DATE and PERIOD, more than one at a time.

4.8.5. Delete a Budget (by Name) : deletebudget

Don’t want it any more? Use deletebudget to say bye to your budget!

The concrete format is:

deletebudget d/<BUDGET_NAME>

For example, after typing:

deletebudget d/school

The budget with the name school will be deleted.

The Default Budget cannot be deleted or modified. It archives all expenses without a proper budget defined by you.
After a budget is deleted, its expenses will be transferred to the Default Budget.

4.8.6. Delete a Budget (by Index) : deletebudget-id

Budget names are too long? Don’t worry, there’s an easier way to delete them: deletebudget-id.

The concrete format is:

listbudget (first go to list of budgets)
deletebudget-id <INDEX>

You’ll see the corresponding budget disappear from the list.

Regretted? Type undo to get it back ;D

4.8.7. Delete all budgets: clearbudget

Don’t feel like living on budgets any more? You can clear them all, just using this simple command: clearbudget.

4.8.8. View Expenses in a Different Period: switchperiod

Wanna see your archived expenses in the past? The command switchperiod is the time machine you need.

The concrete format is:

switchperiod t/<DATE>

For example, suppose you have a monthly budget school, refreshed on the 1st of each month; and suppose it is November now. After typing:

switchperiod t/01-05

You’ll see all expenses tracked under school from 1 May to 31 May this year.

The time machine can only travel back in time! That is, you will only be able to switch to periods before or equal to the current period. If the date you enter is in a future period, you’ll need to input again.
Only expenses tracked under the current budget are shown.
To switch back to the current period, type switchperiod t/now.

4.8.9. Edit Expenses Inside a Budget: editexpense-primary

When you are staring at the primary budget panel, and suddenly want to modify an expense…​ Rather than switch back to the general expense list, there’s a quicker way to do it: you can edit it directly from this budget panel! The trick is: editexpense-primary.

The concrete format is:

editexpense-primary <INDEX> [d/<DESCRIPTION>] [p/<PRICE>] [c/<CATEGORY>] [t/<TIMESTAMP>]

The INDEX depends on the current budget’s expenses, instead of the general expense list.

Editing an expense from a budget has the same effect as editing it from the general expense list. That is, this expense will also be updated in the general expense list.

4.8.10. Delete expense inside a budget: deleteexpense-primary

Similarly to editing expense inside a budget, you can delete an expense directly from the budget panel: deleteexpense-primary.

The concrete format is:

deleteexpense-primary <INDEX>

The INDEX depends on the current budget’s expenses, instead of the general expense list.

Deleting an expense from a budget has the same effect as deleting it from the general expense list. That is, this expense will also disappear from the general expense list.

4.9. Making inputs quick and easy.

Do you have trouble remembering commands and what arguments they require? MooLah provides several features which will help you remember them and make your life much easier!

4.9.1. Creating a shortcut: alias

If you find yourself entering the same thing over and over, MooLah allows you to type less by assigning this command to an alias. This will allow you to type this alias in place of the original long command.

To assign an alias, use the the addalias command with the following format:

addalias a/<ALIAS_NAME> i/<INPUT>

There are two kinds of alias you can make, aliases which act as a standalone command, or an alias which accepts arguments.

Variation 1: Standalone

You can store an entire command using an alias, and then use this alias in place of that command. For example:

addalias a/chicken i/ addexpense d/ chicken rice p/2.30 c/food

This saves the command addexpense d/ chicken Rice p/2.30 c/food to chicken. Subsequently, you may use this alias in place of using the full command.

Variation 2: with arguments

You may also save an incomplete input to an alias. For example:

addalias a/ addfood i/ addexpense c/Food

Subsequently, entering the following:

addfood d/chickenrice p/2.30

is equivalent to entering:

addexpense c/Food d/chickenrice p/2.30
  • Alias names can only contain alphanumeric characters.

  • Alias names cannot be a command word used by a built-in command, e.g. you may not save a command to an alias named "addexpense".
    For the list of built-in command words, see: Section 6, “Command Summary”.

  • Only one input may be saved to each alias name. Saving an input to an alias name which already exists will overwrite the existing input if it exists.

  • Repeated prefixes are not allowed! 'a/' and 'i/' may only be used once.

4.9.2. Listing the shortcuts you have saved: listalias

To list all of the aliases you have saved, you can the the listalias command. Alternatively, you may use the view command by typing view Aliases. Either of these will bring you to the User Defined Aliases panel where you can see the list of aliases you have created.

aliases
Figure 8. User Defined Aliases panel

The user defined aliases showing some valid aliases.

4.9.3. Deleting the shortcuts you no longer want to use: deletealias

To delete an alias you no longer wish to use, you may use the deletealias command.

This is the format:

deletealias <ALIAS_NAME>

This will delete the Alias with the name you specified. For example:

addalias a/hello i/helloworld
deletealias hello

This will delete the hello alias from your saved aliases.

4.9.4. Autocomplete and Suggestions

If you find yourself forgetting the syntax for some commands, enable the suggestion feature. This will enable MooLah to suggest valid commands, as well as prefixes when you already have a command word entered.

Enable
To enable the suggestion feature, press the TAB key. This will enable the suggestion feature! You will see that the command box has a green border. This indicates that the feature is enabled.

Disable
To disable the suggestion feature, press the TAB key again. This will disable the suggestion feature! You will see that the command box no longer has a green border. This indicates that the feature is no longer enabled.

The suggestion menu will show you the command words which match your current input.

suggestions3
Figure 9. suggestions for command words beginning with "add"

The suggestion menu showing suggestions for built-in commands which begin with 'add' when the feature has been enabled

You can cycle through the choices using the UP and DOWN keys. To confirm your choice, push the ENTER or SPACE key! LEFT, RIGHT, and ESC can be used to close the menu without disabling suggestions.

When you have entered a valid command, MooLah will show you a list of prefixes that are supported by this command and that you have not yet entered.

suggestions2
Figure 10. suggestions for "addexpense" command

The suggestion menu showing the missing prefixes in the current input, "addexpense d/", along with what the prefix represents.

When the suggestion menu shows you the prefixes that you are missing, you may see these 3 tags:

  • missingprefixtag indicates that this prefix is mandatory and you have yet to include it.

  • allmissingprefixtag represents all the missing mandatory prefixes.

  • optionalprefixtag indicates that this prefix is missing, but is not compulsory to enter.

4.9.5. Syntax Highlighting

MooLah will highlight valid command words and prefixes, as well as the arguments that will be used with that argument.

When you are entering a command, MooLah will highlight command words which are supported built-in commands.

correctcommand
Figure 11. addexpense is valid and highlighted
wrongcommand
Figure 12. addmonkey is not built-in and not highlighted

After entering a valid command word, MooLah will also highlight the prefixes that are supported by this command. However, it will not validate them for you!

highlight1
Figure 13. Highlighting of prefixes and arguments for the add.
highlight wrong
Figure 14. Wrong arguments are also highlighted.

4.9.6. Input history

MooLah remembers what commands you have previously entered, and allows you to access them to use them again.

If you need to enter the same input multiple times but do not want to save it as an alias you may cycle through the history of successfully executed inputs within the current session.

Press UP to scroll through previously executed commands.
Press DOWN to go back the more recent commands.

For example, if you entered these commands previously.

> addexpense d/chickenrice p/12.3 c/food
> addexpense d/chickenrice p/12.3 c/food
> add d/chicken rice p/2.30 c/food

Pressing the UP key to quickly enter the previous input.

highlight1
Figure 15. the last input which was successfully executed will be entered into the command box.
When the suggestion menu is open, the UP and DOWN keys will cycle through the suggestions instead!

4.10. Viewing Statistics

Like most of the expense commands, statistics of your expenses can be generated concerning to the primary budget you’re residing on. Read further for the rest of the commands covered under the Statistics section.

Notes that apply to all statistics features

  • For any input that consists of date and time, only the date information will be considered.

  • Expenses to be included in the statistics generated include those on the start dates and end dates itself.

  • The period of the budget plays a significant role in determining the output of the statistics features especially those that allow optional parameters. Hence, it may be helpful to be familiar with editing the period of a budget.

  • Even though the Default Budget can contain expenses and has a valid budget period, it is not recommended to type this command when in that budget. It is after all a placeholder budget that is meant to hold expenses not associated to any budgets when starting out, which also implies it doesn’t support editing any of its attributes, especially period. Also, the budget period is set to a large interval by design, so the output might not make sense.

  • For commands that use [sd/<START_DATE>] [ed/<END_DATE>] prefixes, END_DATE will be checked to be not before START_DATE.

4.10.1. Summary Statistics: statsbasic

This command allows you to have a basic summary of the money spent from their categorical expenses in a given period of their current budget.

The visual output of the statistics shown is a pie chart, with each piece representing the combined expenditure of all expenses under the category, taken as a percentage of the total expenditure in the budget the command was called.

Format: statsbasic [sd/<START_DATE>] [ed/<END_DATE>]

Note

  • The success message for this command is "Pie Chart calculated!"

  • When there are no expenses in the current window of the current budget, a successful statsbasic can still be called. However, the same success message "Pie Chart calculated!" is still seen on the result display, but now with a blank screen in the StatsPanel.

  • Categories where no tracked expenses fall under will not be reflected in the Statistics Panel.

Tips:

  • There is no need to specify all the parameters if the outcomes of the example usage scenarios below fit your needs

  • If START_DATE is specified but END_DATE is empty, the period of the current budget will be considered as the unit of time and statistics is calculated till one unit of time after START_DATE.

  • If START_DATE is empty but END_DATE is specified, the period of the current budget will be considered as the unit of time and statistics is calculated starting from one unit of time before END_DATE.

  • If both START_DATE and END_DATE are empty, statistics will be calculated using the start date and end date of the current window of the budget, seen on the top right of the budget progress bar.

Example of configurations:

statsbasic
statsbasic sd/tmr
statsbasic sd/11-11-2018 ed/12-12-2018

Step-by-step guide: For example, MooLah is currently at the "Outside School" budget, and shown below is the view of the current window of the Budget from start of 18 Oct to the end of 24 Oct. There are exactly 4 expenses as shown in the example.

OutsideSchoolWindow

To generate the pie chart for the expenses for this window.

  1. Type statsbasic into the command box and press Enter to execute it.

  2. The result display will display the message "Pie Chart calculated!".

  3. The screen will be switched into the Statistics Panel where the Pie Chart will be generated as shown below.

PieChart

4.10.2. Comparison Statistics: statscompare

This command allows you to have a side-to-side comparison of the money spent from their categorical expenses in 2 periods of their current budget. In this comparison, we provide you with data of both the similarities and differences in these 2 periods.

The visual output of the statistics shown is a table view, with 5 columns, consisting of a category column, and 2 pairs of frequency-total expenditure columns. The cells in the first pair of columns, denoted as "similarity columns" represents the frequency and total expenditure in any existing overlapping interval between the 2 periods, while the cells in the second pair of columns, denoted as the "difference columns" represents the difference in frequency and difference in total expenditure.

Format: statscompare sd1/<START_DATE_1> sd2/<START_DATE_2>

Note

  • The success message for this command is "Statistics Comparison Calculated!"

  • The cells in the "similarity columns" denote only non-negative values. This is because it shows the frequency and total expenditure common to both periods.

  • The cells in the "difference columns" may contain negative values. This is because the values for differences in frequency and differences in total expenditure for each category is calculated using the formula second period - first period.

  • The end dates for both start dates specified by the user are constructed using the period that the current budget is using.

Example of configurations:

statscompare sd1/12-12 sd2/ 1 month ago
statscompare sd2/ today sd1/tmr
statscompare sd2/ 23-09-2019 sd1/1 year ago

Example with expected output: Test case: Create a new budget, one possible way is addbudget d/school p/3.00 sd/28-10 pr/day. then enter statscompare sd1/12-12 sd2/ 1 month ago

Expected: A success message of "Statistics Comparison Calculated!" appears with the the title "Statistics Summary: Comparing 12-12-2019 to 12-12-2019 with 12-10-2019 to 12-10-2019" but all entries reflect 0 for frequency and 0.00 for amount.

4.10.3. Growth Statistics : statstrend

This command allows you to see the growth of the money spent from your categorical expenses in fixed units of time between the interval that you’re interested in finding out

The visual output of the statistics shown is in the form of plotted trend lines.

Currently 2 modes of usage can be selected.

The first one is a category mode where each individual trend lines represents one categories and every plotted point on a line represents the total expenditure starting from its stated date, till before the stated date of the next point.

The second mode is a budget mode where only 2 trend lines can be observed. The first trend line represents the budget limit where every plotted point represents the budget limit set starting from its stated date, till before the stated date of the next point.

The second trend line represents the total expenditure for all expenses regardless of category, where every plotted point represents the total expenditure starting from its stated date, till before the stated date of the next point.

Format: statstrend [sd/<START_DATE>] [ed/<END_DATE>] mode/MODE

Note - mode/ takes in only "mode" and "category" and is case-insensitive

  • The success message for this command is "Statistics Trend Calculated!"

  • The categories that do not have any expenses in any of the time intervals will not be reflected as trend lines in the Statistics Panel.

  • The first plotted point that would be observed should be the start date of the window of the current budget closest to the start date of analysis. If the two happen to be the same, the start date of the window of the budget should be included as a point in the trend line

  • Due to the possible differences in amounts, some points may not be plotted.

  • At any time, only a maximum of 32 points starting from the first valid point will be shown

Tips:

  • There is no need to specify all the parameters if the outcomes of the example usage scenarios below fit your needs. The analysis comes in the form of interval construction followed by the searching of the nearest possible window to be included. The following describes how the interval is constructed with different configurations

  • If START_DATE is specified but END_DATE is empty, the end date of analysis is constructed till 32 unit of time after START_DATE.

  • If START_DATE is empty but END_DATE is specified, the start date of analysis is constructed from 32 unit of time before END_DATE.

  • If both START_DATE and END_DATE are empty, the start date of analysis is constructed from 16 units of time before the start date of the current window of the current budget and the end date of analysis is constructed from 16 units after the start date of the current window of the current budget.

Example of configurations:

statstrend mode/category
statstrend sd/tmr mode/category
statstrend sd/11-11-2018 ed/12-12-2018 mode/category

Example with expected output:

Test case: Create a new budget, one possible way is addbudget d/school p/3.00 sd/28-10 pr/day. Next, add an expense to the empty budget with addexpense d/ chicken rice p/2.50 c/food t/28-10 and type statstrend mode/category sd/28-10

Expected: A success message of "Statistics Trend Calculated!" appears with the title "Periodic trendline from 28-10-2019 to 29-11-2019 in the unit of days", 1 trend line for food is observed, with the first plotted point of the line being the highest non-zero point at y-axis = 2.50

4.11. Exiting the program : exit

Exits the program.
Format: exit

4.12. Saving the data

MooLah data are saved in the hard disk automatically after any command that changes the data.
There is no need to save manually.

4.13. Encrypting data files [coming in v2.0]

Hide sensitive data in you data files

4.14. Email notification [coming in v2.0]

Send email notifications to remind you of upcoming events

4.15. Input expenses using speech [coming in v2.0]

Add expenses and execute other commands by talking to MooLah

4.16. Input expenses by scanning a receipt [coming in v2.0]

Add expenses and by taking a picture of your receipt

4.17. Splitting a shared bill [coming in v2.0]

Did you pay a bill for your friends? Let us breakdown for you who pays for who.

4.18. Budget planner [coming in v2.0]

Plan how to allocate your money.

4.19. Generate a saving plan [coming in v2.0]

Have something you want to buy? Let us help you generate a good saving plan!

4.21. Calculate your taxes [coming in v2.0]

Calculate how much taxes you need to pay

4.22. Currency Conversion [coming in v2.0]

Change all your expenses to be displayed in a different currency!

4.23. Privacy [coming in v2.0]

Hide sensitive information

4.24. Income tracking [coming in v2.0]

Incorporating you income as well as expenses

4.25. Predictions [coming in v2.0]

Predict possible expenses and inputs based on your habits

4.27. Even better command-line [coming in v2.0]

Dynamic input validation and highlighting of incorrect arguments

4.29. Recurring expenses [coming in v2.0]

Set an expense to recur daily, week, monthly, and more!

5. FAQ

Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous MooLah folder.

6. Command Summary

General commands:

  • Help : help

  • Exit the app : exit

  • Undo : undo

  • Redo : redo


All about expenses:

  • Add an expense (undoable) :
    addexpense d/<DESCRIPTION> p/<PRICE> c/<CATEGORY> [t/<TIME>]
    e.g. addexpense d/Chicken Rice p/2.50 t/15-09-2019 1230 c/Food

  • Add menu-item expense (undoable) :
    addmenuexpense m/<MENU_ITEM> [t/<TIME>]
    e.g. addmenuexpense m/deck chicken rice

  • List all expenses :
    listexpense

  • Edit an expense (undoable) :
    editexpense <INDEX> [d/<DESCRIPTION>] [p/<PRICE>] [c/<CATEGORY>] [t/<TIME>]
    e.g. editexpense 1 p/2.50 t/15-09-2019 1230 c/Food

  • Delete an expense (undoable) :
    deleteexpense <INDEX>

  • Find an expense (undoable) :
    findexpense <KEYWORD> [<MORE_KEYWORD>]

  • Clear all expenses and budgets (undoable) :
    clearmoolah


All about events:

  • Add an event (undoable) : addevent d/<DESCRIPTION> p/<PRICE> c/<CATEGORY> t/<TIME>
    e.g. addevent d/Family buffet p/50 t/1 week from now c/Food

  • List all events : listevent

  • Edit an event (undoable) : editexpense <INDEX> [d/<DESCRIPTION>] [p/<PRICE>] [c/<CATEGORY>] [t/<TIME>]
    e.g. editexpense 1 p/2.50 c/Food

  • Delete an event (undoable) : deleteevent <INDEX>


All about Budgeting:

  • Create a new budget (undoable) : addbudget d/<DESCRIPTION> p/<AMOUNT> sd/<START_DATE> pr/<PERIOD>
    e.g. budget d/school p/300 sd/01-10-2019 pr/month

  • Switch between budgets (undoable) : switchbudget d/DESCRIPTION
    e.g. switchbudget d/outside school

  • List all budgets : listbudget

  • Edit a budget (undoable) : editbudget <INDEX> [d/<DESCRIPTION>] [p/<AMOUNT>] sd/<START_DATE> pr/<PERIOD>
    e.g. editbudget 2 d/school expenses p/400 sd/05-10 pr/week

  • Delete a budget by name (undoable) : deletebudget d/<DESCRIPTION>
    e.g. deletebudget d/school

  • Delete a budget by index (undoable) : deletebudget-id <INDEX>
    e.g. deletebudget-id 2

  • Clear all budgets : clearbudget (undoable)

  • View expenses in a different period (undoable) : switchperiod t/<DATE>
    e.g. switchperiod t/01-05

  • Edit expense inside a budget (undoable) : editexpense-primary <INDEX> [d/<DESCRIPTION>] [p/<PRICE>] [c/<CATEGORY>] [t/<TIMESTAMP>]
    e.g. editexpense-primary 1 d/chicken

  • Delete expense inside a budget (undoable) : deleteexpense-primary <INDEX>
    e.g. deleteexpense-primary 2


Viewing statistics:

  • Summary statistics : statsbasic [sd/<START_DATE>] [ed/<END_DATE>]
    e.g. statsbasic sd/11-11-2018 ed/12-12-2018

  • Comparison statistics : statscompare sd1/<START_DATE_1> sd2/<START_DATE_2>
    e.g. statscompare sd1/01-01-2019 sd2/01-02-2019

  • Growth statistics : statstrend [sd/START_DATE] [ed/END_DATE] mode/MODE
    e.g. statstrend sd/11-11-2018 ed/12-12-2018 mode/category


Everything alias:

  • Add alias (undoable) : addalias a/<ALIAS_NAME> i/<INPUT>
    e.g. addalias a/chicken rice i/ add d/ Chicken Rice p/2.50 c/Food

  • See all aliases : listalias

  • Delete an alias (undoable): deletealias <DESCRIPTION>

This is the list of menu items that are supported by MooLah as of v1.4. More menu items are on its way in v2.0!

Table 2. List of menu items supported
Menu Item Price

Deck Chicken Rice

2.50

Finefood Western Combo Set Meal

7.50

YIH Nutella Waffle

1.50

Deck Ice Milo

1.50

E2 Fried Fish Fillet

3.50