Cellmate is a desktop application for processing and comparing HR data (attendance, overtime, and optional drive records) from Excel workbooks. It extracts data by company code, applies templates, and generates comparison reports.
- Attendance Processing: Extract and compare employee attendance records by company code (PM, PTM, TMP).
- Overtime Tracking: Extract overtime hours and compare against HRIS data.
- Optional Drive (OPTDRV): Process optional drive records.
- Template Management: Save, load, and manage reusable extraction templates.
- Multi-Sheet Support: Automatically detect company codes from worksheet titles.
- Robust Date Parsing: Supports multiple date formats (ISO, DD/MM, month names, datetime strings).
- Safe Excel Saving: Fallback mechanism for handling problematic Excel external references.
cellmate/
├── main.py # Entry point
├── data/
│ └── templates.json # Default templates (bundled with app)
├── model/
│ ├── base_processor.py # Shared processing logic
│ ├── template_model.py # Template CRUD
│ ├── version.py # Centralized version management
│ ├── attendance/ # Attendance extraction/comparison
│ ├── overtime/ # Overtime extraction/comparison
│ ├── overtime_optdrv/ # Optional drive extraction/comparison
│ ├── helper/
│ │ ├── app_data.py # Platform-specific app-data paths
│ │ ├── date_utils.py # Date parsing & formatting
│ │ ├── export_file_formatter.py # Workbook header creation
│ │ ├── save_utils.py # Safe workbook saving
│ │ └── update_checker.py # Check for application updates
│ └── data_class/
│ └── settings.py # Settings dataclasses
├── ui/
│ ├── main_window.py # Main window UI
│ ├── page/ # Tab pages (Attendance, Overtime, etc.)
│ └── widget/ # Reusable UI widgets
├── view_model/
│ ├── template_view_model.py # Template ViewModel
│ └── attendance_view_model.py # Attendance ViewModel
├── venv/ # Python virtual environment
├── BUILD_INSTRUCTIONS.md # PyInstaller build commands
└── README.md # This file
- Python: 3.11 or higher
- OS: macOS, Windows, or Linux
- Dependencies (installed via
requirements.txt):openpyxl>=3.0— Excel file reading/writingPySide6>=6.0— GUI frameworkpandas>=2.0(optional) — data manipulation
git clone <repository-url>
cd cellmate# macOS / Linux
python3 -m venv venv
source venv/bin/activate
# Windows
python -m venv venv
venv\Scripts\activatepip install --upgrade pip
pip install -r requirements.txtIf requirements.txt doesn't exist, install manually:
pip install openpyxl PySide6python main.pyA window titled "Cellmate" should appear with tabs for Attendance, Overtime, Overtime OPTDRV, Templates, and App Info.
# macOS / Linux
source venv/bin/activate
python main.py
# Windows
venv\Scripts\activate
python main.py- On first run, the app automatically creates
templates.jsonin:- macOS:
~/Library/Application Support/Cellmate/templates.json - Windows:
C:\Users\<username>\AppData\Roaming\Cellmate\templates.json - Linux:
~/.local/share/Cellmate/templates.json
- macOS:
- The bundled default templates are copied to this location if it doesn't exist.
See BUILD_INSTRUCTIONS.md for detailed PyInstaller commands:
- macOS: Build
.appbundle or.dmginstaller - Windows: Build
.exe(one-dir or one-file)
Quick commands:
macOS:
pyinstaller --noconfirm --windowed --name Cellmate --add-data "data/templates.json:data" --collect-all PySide6 main.pyWindows:
pyinstaller --noconfirm --windowed --name Cellmate --add-data "data\\templates.json;data" --collect-all PySide6 main.py- Upload Excel workbook with attendance records
- Select a template or configure manually (employee ID column, date format, etc.)
- Extract: generates a new workbook with attendance by company code
- Compare: compares extracted data against HRIS export
- Upload overtime data workbook
- Select/configure template
- Extract and compare overtime hours
- Upload optional drive records
- Extract and compare
- View, create, edit, delete templates
- Export/import templates from JSON files
- View app version and information
Ensure all dependencies are installed:
pip install -r requirements.txtOr install individually:
pip install openpyxl PySide6Verify activation:
which python # macOS/Linux — should show .../venv/bin/python
where python # Windows — should show ...\venv\Scripts\python.exeCheck that data/templates.json exists in the project root (it should be in the repo).
- Ensure files are in
.xlsxformat (not.xlsor.xlsb). - For
.xlsbfiles, convert to.xlsxfirst using Excel or another tool.
- Create a new folder under
model/(e.g.,model/newfeature/) - Inherit from
BaseProcessorfor shared logic - Implement extractor and comparator classes
- Add corresponding ViewModel and UI page
- Wire into
MainWindow
The app supports multiple date formats via model/helper/date_utils.py:
- ISO:
2025-10-08,2025/10/08 - European:
08/10/2025,08-10-2025,08/10 - Month names:
26-Oct-2025,26 October 2025 - Datetime:
2025-11-26 00:00:00
Templates are stored in a user-writable platform-specific location (see First Launch above) via model/helper/app_data.py.
[Add license info if applicable]
For issues or questions, contact the development team or open an issue in the repository.