# Budgeting functional requirements
[Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.](https://www.notion.so/aragon/Finance-budgeting-b6acb2ed561a420292742706e7d3f16d)
## Key journeys
* *Set and manage (editing and removing) accounting period* (Accounting periods are the equivalent of financial quarters in traditional organizations. Their length can be set depending on how the organization wants to use them. Every token is accounted on its own for budgeting and period financial statements.)
* *Set and manage (editing and removing) recurring payments* (A payment can be created to happen only once or it can be a recurring payment that will be performed according to a certain time schedule.)
* *Set and manage (editing and removing) budgets* (Budgets give the ability to limit how much units of a token can be spent per Accounting period. Budgets are set in a token per token basis. By default no token has a budget, which means unlimited spending is allowed.)
## Payments attributes
A *payment* is created with the following parameters:
* Token: Address of token for payment.
* Receiver: Address that will receive payment.
* Amount: units of token that are payed every time the payment is due.
* Initial payment time: timestamp for when the first payment is done.
* Interval: number of seconds that need to pass between payment transactions.
* Maximum repeats: maximum instances a payment can be executed.
*Note:* A payment can have a past initial payment time, which could cause many instances of the recurring payment to be executed at payment creation time.
## Other considerations
* *Disable payments:* At any time, a payment can be disabled by an authorized entity. If a payment hasn't been fully executed until that time and it is disabled, the recipient won't be able to execute it until it is enabled again.
* *Handle payments failure:* A payment execution can fail in case the organization is out of budget for the payment token for that particular accounting period, or the organization doesn't have enough token balance.
*Note:* Payment executions do not expire. There is an attack vector in which by not executing a payment in some time, a budget can be impacted when executed. In case this is happening, payment can be executed by another allowed entity or it could be disabled. ::Needs further explanation?!::
* *Spending visualizations / analytics*
* Spending by accounting period
* Spending by token
## Luke’s proposal: Cross-apps finances transaction log and budgeting capability
We want to define a budget for a specific address (eg the projects app, or the allocations app), so that only a certain amount of funds can be used for a specific period.
(Note: It seems wrong to try and implement budging capabilities in each app that could need it (eg projects implements budgeting for funding issues, token manager implements budgeting for issuance, finance app implements budgeting for token transfers).
### User story
::I would like to be able to do all of my budgeting/throttling in one place across all applications.::
### Related issue [#777](https://github.com/aragon/aragon/issues/777#issuecomment-491721929)
Another alternative is to bake-in a constraints module as part of the "core" apps, or bundled into the ACL, that tracks:
* Specified token balances over periods of time (e.g. your token balance at the end of a period cannot be less than 90% of the starting balance)
* This sounds less useful than tracking spending amounts
* Specified maximum spending of a token over a period of time.
* Would require some standardized interface in the apps, e.g. a financialAction(address token) modifier
* Would be difficult for a user to know if an app implemented the interfaces correctly, and likely easy to spoof for a frontend trying to detect this
* Specified maximum number of calls to an app and their specific roles
* Could be baked into apps as part of their auth() modifier
### Related issue [#776](https://github.com/aragon/aragon/issues/776)
* The transaction log displayed in finance should show all incoming and outgoing transfers for watched tokens in its log, even if they were not triggered via the finance app directly.