Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add reimbursements #3712

Open
DeD1rk opened this issue Jun 4, 2024 · 3 comments · May be fixed by #3860
Open

Add reimbursements #3712

DeD1rk opened this issue Jun 4, 2024 · 3 comments · May be fixed by #3860
Assignees
Labels
app:moneybirdsynchronization Issues regarding the Moneybird synchronization board Need to involve the board feature Issues regarding a complete new feature request-for-comments Author wants to have other people respond for their opinion

Comments

@DeD1rk
Copy link
Member

DeD1rk commented Jun 4, 2024

This is very similar to the example issue we made for the Technicie workshop. It seems like an actual good idea for the real concrexit as well.

What?

Within Thalia, members often need to request reimbursements from the treasurer:

When a committee spends money to organize something that will be funded by Thalia, the committee fills in a paper form, attaches the receipt from a payment they made, and hands the filled in form to the treasurer. The treasurer then checks whether the reimbursement form is correct, and approves it. Then, Thalia transfers money back to the committee(member) that spent some money.

Here is the form that is currently used: https://thalia.nu/association/documents/document/58/.

I think it would be great if people can submit their reimbursement requests online.

Why?

Printing out the form, and filling it in on paper is tedious. You need to print, which is a pain on campus, and most students don't have printers in their room. It's also not practical for the treasurer to keep the books on paper.
So if we can do it on Thalia's website, that would make many peoples' lives a little bit easier.

The next thing that makes this more valuable, is that we may be able to automate processing them on moneybird a little bit more. The current process is:

  1. Treasurer receives a form on paper.
  2. On moneybird, they make a purchase invoice, with:
  • The person who paid for it as contact.
  • The date from the receipt
  • The amounts on one or multiple invoice rules. Each rule gets an amount, VAT rate and ledger account.
  1. They make a payment to reimburse the requester.
  2. Once the payment shows up in moneybird, they link the purchase invoice document to the payment.

Assuming that we already get digital versions of the reimbursement request, we can automate this partially as follows:

  1. The treasurer approves the reimbursement requests (perhaps in batch) on the website.
  2. Then, the website creates typeless documents on moneybird.
  • The reference contains a unique id of the reimbursement request on concrexit, and a short topic.
  • The date is taken from the request (has to be provided by the requester).
  • The requester is set as contact.
  • The website uploads the attachment pdf or picture (maybe be want to support multiple?).
  1. The typeless document with attachments then shows up on moneybird in the 'incoming' tab, where the treasurer can fill in the document type. Moneybird automatically tries to determine the invoice rules, but this is for the treasurer to check and correct.

Now, the attachments are visible on moneybird which means the treasurer doesn't need to look in the paper book to check things.

How?

Deviating slightly from the tutorial variant of this issue, I think for our real implementation it would be better to stay entirely within the admin. People without any permissions have no business making reimbursement requests, so keeping active member stuff in the admin is a slightly better separation of concerns IMO.

So:

  • We add a reimbursements app.
  • Add a ReimbursementRequest model with the necessary fields. We add either a status (awaiting review, appproved, processed) or only is_approved field. One (pdf or image) document can and must be attached. Maybe we also want to support multiple attachments.
  • Allow only people with 'create reimbursementrequest' permission to create a reimbursement request.
  • Allow people with something like a review reimbursement permission to approve the request or maybe to otherwise change its status.
  • Keep track of who created and approved a reimbursement.
  • Notify the creator by email when the status changes.
  • Maybe email the treasurer periodically or when a request is created too?
  • In the admin, normal users see only the requests made by themselves. Users with the review reimbursement permission see all requests.
  • The admin of course should have filters by status, search by name of the creator, etc.
  • The treasurer can use an action to bulk approve requests.
  • Once approved:
    • We push a typeless document to moneybird as described above.
    • Maybe we also monitor it from moneybird every night to check whether it's been processed there and use that to edit the status on concrexit? This is very optional though.

@nvoers @JobDoesburg what do you guys think about this? And just to be sure, do you agree this would be good enough to be able to get rid of the paper form entirely?

@DeD1rk DeD1rk added board Need to involve the board feature Issues regarding a complete new feature request-for-comments Author wants to have other people respond for their opinion app:moneybirdsynchronization Issues regarding the Moneybird synchronization labels Jun 4, 2024
@JobDoesburg
Copy link
Contributor

Yes I love it. I would't necessarily introduce a permission to create a reimbursement request, and I wouldnt include it in the Django admin. I would say the django admin is just for the treasurer to review/approve the reimbursement. Create a regular frontend view for regular users

Notice that people should have an active bank account (but not necessarily with a mandate) if they want to create a reimbursement!

@JobDoesburg
Copy link
Contributor

Also, a general comments/remarks field will be required.

@W-M-T
Copy link

W-M-T commented Jun 11, 2024

Yes I love it. I would't necessarily introduce a permission to create a reimbursement request, and I wouldnt include it in the Django admin. I would say the django admin is just for the treasurer to review/approve the reimbursement. Create a regular frontend view for regular users

Notice that people should have an active bank account (but not necessarily with a mandate) if they want to create a reimbursement!

Not sure if I should read this as "bank accounts linked to the requestor's account"? At least in the use case of the educacie it's fairly common to request reimbursements not for your own bank account but e.g. a teacher who spent money for an event, so I think it would be best to have the bank account be a field in the form instead of taking it directly from the user account.

@DeD1rk DeD1rk linked a pull request Dec 4, 2024 that will close this issue
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
app:moneybirdsynchronization Issues regarding the Moneybird synchronization board Need to involve the board feature Issues regarding a complete new feature request-for-comments Author wants to have other people respond for their opinion
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants