- People registering as users
- User have different roles depending to the projects they have joined
- Users need profiles. Actions within a project are depend on information in the profile and given project role
- History of amounts donated (if not decided to donate 'anonymously')
- money received (as project members, reimbursements or salaries)
- auto-generate yearly overview over donations for tax purposes (in different languages) as downloadable PDF
- Projects have at least one member
- Members can have different roles/permissions within the project
- Within a project a budget tree can be installed. The available overall funds are the maximum which can be allocated within a budget.
- Budgets consist of different spending groups (e.g. travel expenses, organising events, server costs, personell costs...); how a project organizes its budget is up to the project
- available funds can be moved within a project to other budget groups as long as the project member has the permission for that tree
- each budget contains and tracks transactions; team members can submit expense requests by picking a budget category that they are eligible for
- budgeting categories can be temporary and have an expiration date (after which you cannot submit any expenses against it any more)
- each budget can be set up to receive incoming transactions, too
- for example, a project might want to set up a budget category "Paypal donations" to track incoming Paypal donations
- a project might want to create separate budget groups for different subprojects, bounties, etc
- A project can give/move funds to other projects within the platform
- statistics over each budget category can be public or only shown to certain members
- budget including transactions should be downloadable in well-known formats (CSV, accounting software standards)
- "shopping cart" to pick publicly available "money sinks" (public budget groups of project)
- individual donation code generated based on selection of projects
- Donations from different sources (bank wire transfer, PayPal, Bitpay, Stripe and others) need to be mapped to projects regardless of the origin
- Name, Email and address of donor will only be shown to the CCT admin staff as long as the donor does not explicitly consent to giving email and name to the project
- Incoming donation shall have a payment code generated by the donation website or widget.
- Incoming donations without a payment code should be assigned to the correct project if possible.
- Donors will receive a donors receipt according to German tax law. The creation needs to be automated.
- Legally, donations will be generic donations to CCT, with a preference towards the project. This allows projects to move money around freely within CCT.
- each transaction needs to be not only tracked within the projects "own custom budgets", but also mapped to official accounting categories
- All incoming and outgoing money need to be reflected within the Accounting
- Shifting money between projects needs to be reflected within the accounting
- automated matching to official accounting categories will be shown to project managers; they can suggest a different category, but only CCT admins can change actual assigment
- Grants are handled similarly to commitments outlined above
- Money from grants can be budgeted (moved within a project) but not be transfered to other projects
- budgeting needs to be confirmed by CCT admin and ideally locked down if grant contract imposes certain restrictions
- Users can be reimubursed by a project for travel costs and other expenses
- reimbursements are filed against a budget category and ask for information based on type of reimbursement (travel expenses require a different set of information than other types of reimbursements)
- There may be a budget prior to the reimbursement of a user. In this case only the ammount budgeted can be reimbursed. Budget allocated for reimbursement has a valid to date. It can only be allocated after this date. Money not taken from an allocated reimbursement budget after the reimbursement took place will be allocated back to the available funds.
- The user requesting reimbursement needs to upload all necessary documents and some short explanation. The form can not be modified.
- digital scans/good photos of receipts will be enough
- Project members with necessary permission will see the request for reimbursement and accept, decline or edit and return for resubmission with comments.
- especially with new projects, acceptance will need to be "moderated" (verified) by CCT admins
- Accepted reimbursement will move the money from the project budget to the user budget
- User can request payout, set up automatic payout interval or threshold, or donate the money to any project within the system
- a project can also decide to sell services, merchandise, or "moral licenses"
- a company might prefer to "buy" a license instead of donating
- allow project to generate bills
- eventually, the CCT will offer to sell certain good for projects and handle logistics (stickers, shirts, etc.)
- bill reference number -> incoming payment automatically internally assigned to "commercial activity" accounting category
- need to take taxes into account
- likely it's easier to interface with some existing billing system
- The CCT needs to be able to enter engagements on behalf of the project (rent of office space, servers, etc).
- at the begining, this will probably be handled and tracked manually
- Contract details need to be provided by the project in advance
- Purpose of the contract (e.g. rent for office space, server rent, ...)
- Begining of contract
- End of contract
- Latest date it can be renewed or cancelled before a new period starts.
- How long in advance does it need to be cancelled
- a contract binds money based on the above properties
- monitor active contracts
- warn project managers if contract is up for renewal but there is not enough money allocated to it in the budget
- cancel contracts in time if budget is not sufficient
- The moment the CCT engages in a contract for a project the money will be reserved and cannot be re-allocated by anyone except CCT admins.