# FUJ Management System Welcome to the **FUJ Management System**, a streamlined solution for managing Ultimate Frisbee club finances, attendance, and member payments. This system automates the tedious parts of club management, keeping your ledger clean and your reconciliation painless. ## 🚀 Mission The project's goal is to minimize manual entry and potential human error in club management by: 1. **Automating Bank Synchronization**: Periodically fetching transactions from Fio bank. 2. **Smart Inference**: Using heuristics to match bank transactions to members and payment periods. 3. **Visual Reconciliation**: Providing a clear, real-time web dashboard for managers to track who has paid and who is in debt. ## ✨ Key Features - **Seamless Bank Integration**: Synchronize transactions directly from the Fio bank API into a Google Spreadsheet. - **Intelligent Matching**: Automatic detection of member names and payment periods from transaction messages using diacritic-insensitive Czech text processing. - **Dynamic Dashboard**: A Flask-powered web interface displaying monthly fees, payment status (OK, Partial, Unpaid), and total balances. - **Manual Overrides**: Support for fee exceptions and manual payment matching when automation needs a human touch. - **QR Payment Generation**: Integrated QR code generation to make paying outstanding fees trivial for members. ## 🛠 Tech Stack - **Backend**: Python 3.12+ (managed with `uv`) - **Web Framework**: Flask with Jinja2 templates - **Data Storage**: Google Sheets (used as a collaborative database) - **APIs**: Fio Bank API, Google Sheets API v4 - **Containerization**: Docker / OCI Images - **Automation**: `Makefile` based workflow --- ## 📂 Documentation Guide - [Architecture](architecture.md): High-level system design and data flow. - [User Guide](user-guide.md): How to operate the system as a club manager. - [Support Scripts](scripts.md): Detailed reference for CLI tools. - [Deployment](deployment.md): Technical setup and infrastructure instructions.