Accounting

This page will explain how to use TaskFalcon to track the financial aspects of a project and how to use TaskFalcon for billing clients.

Account

This top-level section creates a new account in your TaskFalcon file. Accounts are required for tracking payments and booked efforts.

You can have multiple accounts and each account can have multiple sub-accounts. The options for a sub-account and those for a top-level account are the same.

While you can use as many accounts and sub accounts as you like, each booking or payment needs to be assigned to exactly one account.

Examples

project: 
  name: Account Test
  start: 2020-06-01

accounts:
  - account: acc-1                    # Unique identifier
    name: My first account            # Account name
    sub-accounts:
      - account: sub-1                # Similar to tasks, the fully qualified name
        name: My first sub account    # for this sub-account would be "acc-1.sub-1"

Each task that is supposed to contribute to an account needs to declare the account to be used.

tasks:
  - task: T1
    account: acc-1
    chargeonstart: 1000.00 # Charges $1000.00 to the account “acc-1” when the task starts

Roles

When charging resources on an account, each resource needs to declare a role, which is used for billing. The role contains the hourly rate which is used to charge the account. A resource may work in different roles depending on the task.

Roles have to be defined as part of the account configuration.

accounts:
  - account: acc-1
    roles:
    - role: senior            # Unique identifier of the role within the account
      name: Senior Engineer   # Name of the role
      rate: 120.00            # Rate per hour. This example charges a resource with $120 per hour
    - role: consultant
      name: Consultant
      rate: 150.00

Currently, TaskFalcon only supports billing with an exact accuracy down to each minute a resource has worked on a task. Options like charging money for each started period of time (e.g. charging $20 for each started 15 minutes of work) may be supported in the future.

Example

accounts:
  - account: acc-1
    roles:
    - role: role-1
      rate: 120.00 # Charges a resource with $120 per hour

tasks:
  - task: T1
    account: acc-1
    assign: R1
    role: role-1          # You can assign a role to a task. This means that each resource working on 
                          # this task will be billed with this role

  - task: T2
    account: acc-1
    assign: R1:role-1     # You can assign roles for each individual ressources when using
                          # the format <Resource>:<Role> in an assignment

Hint: If you have groups of tasks, you can set an account/role for the group, which will be used for all sub-tasks unless a sub-task explicitly uses different values.


Payments

Payments add manual charges to an account. They are part of the account configuration or an update.

The format of a payment is: <date: YYYY-MM-DD> <amount> <comment>

accounts:
  - account: acc-1
    name: Test account
    payments:
      - 2020-07-01  1000.00  Initial payment
      - 2020-07-03    50.00  Some fees

Updates

As usual, all the settings you can make on the top level accounts and/or roles, you can also make in updates.

Especially if you want to change the billing rates during a project, you should consider using updates. If you just change the rate you’ve defined as part of your account definition, this rate will be applied to all tasks and resources in the past too, which might affect your overall project balance.

accounts:
  - account: acc-1
    roles:
    - role: role-1
      rate: 120.00

tasks:
  ...

updates:
  - update: 2022-01-01
    account: acc-1
    roles:
    - role: role-1
      rate: 120.00

Updating nested accounts

Similar to nested tasks in updates, for accounts you also need to use fully qualified account names:

accounts:
  - account: Top-Account-1        # fully qualified name is "Top-Account-1"
    subaccounts:
      - account: Sub-Account-1    # fully qualified name is "Top-Account-1.Sub-Account-1"
        ...
    subaccounts:
      - account: Sub-Account-2    # fully qualified name is "Top-Account-1.Sub-Account-2"
        ...

  - account: Top-Account-2        # fully qualified name is "Top-Account-2"
    subaccounts:
      - account: Sub-Account-1    # fully qualified name is "Top-Account-2.Sub-Account-1"
        ...
    subaccounts:
      - account: Sub-Account-2    # fully qualified name is "Top-Account-2.Sub-Account-2"
        ...

updates:
  - update: 2022-01-01
    account: Top-Account-2.Sub-Account-1   # Using the fully qualified account name for this update
    ...

Full example

# File: accounts.yaml
project:
  start: 2020-06-01

resources:
  - resource: bs
    name: Bart Simpson
  - resource: ls
    name: Lisa Simpson

accounts:
  - account: prj
    name: Customer Project
    roles:
      - role: dev
        name: Developer
        rate: 100

      - role: con
        name: Consultant
        rate: 150

      - role: sup
        name: Supporter
        rate: 75

    subaccounts:
      - account: con
        name: Consulting
        payments:
          - 2020-06-08 -6000.00 Customer paid first rate
      - account: dev
        name: Development
    
    payments:
      - 2020-06-08 -6000.00 Customer paid first rate

tasks:
  - task: Project Consulting
    efforts: 5d
    assign: ls:con
    account: prj.con

  - task: Project Development
    efforts: 10d
    assign: bs:dev
    depends: Project Consulting
    account: prj.dev
    chargeonstart: 2000.00   # Cost for hardware

  - task: Project Documentation
    efforts: 5d
    assign: ls:sup
    depends: Project Development
    account: prj.dev

updates:
  - update: 2020-06-15        # Halfway through the development, the rate per hour was increased
    accounts:
      - account: prj
        roles:
          - role: dev 
            rate: 125

To export the account balance to an Microsoft Excel sheet, you need to add the command line parameter -export-accounts-xlsx:

falcon -export-accounts-xlsx my-project-file.yaml

The following results were created using this command:

falcon -show-efforts -show-effortsleft -show-done -show-closed-tasks -today 2020-06-24 -export-charts gantt-with-resources -export-accounts-xlsx accounts.yaml

Result:

Accounts-Result

Spreadsheet:

Accounts-Spreadsheet