Member Management System
From Interlock Rochester Wiki
The following is a proposed system and does not yet exist.
 Primary Objectives
The Member Management System shall:
- Be the primary and authoritative repository for member information, including basic information (name, email, etc), membership level, metadata (keyfob IDs, officership record, completed safety training, etc), member financial accounting, and automatic payment methods.
- Maintain clear and intuitive access controls for creating, reading, updating, and deleting records by groups (the member themselves, other members, the Board of Directors, the general public, etc).
- In the event of an actual emergency, a mechanism should be available for members and first responders to quickly retrieve another member's emergency profile (i.e. the friend/partner/relative listed as an emergency contact, medical alert, etc). This should produce a very noisy audit trail.
- Use open-source software.
- Be open-source software.
- Be maintainable and portable.
- Employ best current practices for securing data in transit and at rest.
- Use double-entry accounting for all transactions
- Handle, store, or process absolutely no:
- Credit card numbers: instead, use a credit card processor with a "vault" for storing cards
- Bank account information
- Unnecessary member information (e.g. social security numbers)
- Interface with payment processing and accounting systems
 Stretch goals
- Badges for achievements (Rochester Maker Faire 2014 Participant, Great Cleanup of March 2015, etc)
- Interface with access control system for logging and/or authorized key updates
- Document archiving: signed member agreements, etc.
- Self-service member creation using the Membership Application Form
- Induction workflow tracking...
- View and update personal information
- View membership level and status
- View balance due
- Create a one-time payment using PayPal, Stripe (credit card), Stripe (bitcoin)
- Set up or terminate automatic payments via Stripe (credit card)
- View transaction history
- Record an offline payment for a member via cash, check, etc
- Record adjustments to a member's account for reimbursement, swear jar, etc
- Set up or terminate automatic payments on behalf of other members
- Create new members
- View accounts receivable report
- Update a member's membership level
- Update a member's keyfob ID
- Record the issue/return of a physical key
- Django: Ryan knows Python and has done Django before. Everyone else can learn it. :-)
- Docker for containerization
- MySQL: would prefer PostgreSQL, but already rocking the boat enough with a non-PHP codebase...