Calculate on-call compensation based on OpsGenie API data
Project description
On-Call Compensation Calculator
This tool calculates compensation for on-call shifts based on data from OpsGenie API or CSV files, following specific compensation rules for different time periods and special cases.
Features
- Calculate on-call compensation with standard rates (5.56 € per hour outside working hours)
- Apply special rates for weekend short shifts (< 5 hours: 27.80 €) and night shifts (< 2 hours: 11.12 €)
- Consider individual working hours, time zones, and holidays
- Handle daylight saving time transitions
- Generate detailed reports and compensation summaries
- Create visualizations of daily compensation amounts
- 24.12. + 31.12 are considered 1/2 a workday, unless the downloaded Calendar data suggest a holiday.
- Creates an XSLX File if requested
--export-excel - Has a separate module for check for 24x7 compliance:
uv run ./check_oncall_rules.py shifts.csv - Custom Holidays per user (in user_profiles.json) are supported:
"country_code": "AT",
"custom_holidays": [
"2024-06-16",
"2024-10-31",
"2024-12-13"
]
Installation
- Make sure you have Python 3.12 or later installed
- Clone this repository
- Install dependencies:
git clone https://github.com/pyveci/minuto.git
cd minuto
uv venv --python 3.12 --seed .venv
source .venv/bin/activate
uv pip install -e .
uv pip install build
Configuration
Environment Variables
You can configure the tool using environment variables in a .env file:
# OpsGenie API configuration
OPSGENIE_API_TOKEN=your-api-token-here
OPSGENIE_SCHEDULE_ID=your-schedule-id-here
OPSGENIE_START_DATE=2025-01-01
OPSGENIE_END_DATE=2025-05-09
# File paths
OPSGENIE_CSV_FILE=shifts.csv
OPSGENIE_USER_PROFILES=user_profiles.json
OPSGENIE_OUTPUT_PLOT=compensation_chart.png
OPSGENIE_SAVE_CSV=shifts.csv
User Profiles
User profiles are stored in a JSON file and contain information about:
- User's email
- Time zone
- Working days (0-6, where 0 is Monday)
- Working hours
- Country and region for holiday calculation
- Custom holidays
Usage
The tool provides these main commands:
1. Fetch Data from OpsGenie API
Retrieve on-call shift data directly from the OpsGenie API:
uv run main.py opsgenie --api-token YOUR_TOKEN --schedule-id YOUR_SCHEDULE_ID \
--start-date 2025-01-01 --end-date 2025-05-09 \
--save-csv shifts.csv --user-profiles profiles.json
Or using environment variables:
# After setting up your .env file
uv run main.py opsgenie
2. Process Data from CSV File
If you already have on-call data in a CSV file:
uv run main.py csv shifts.csv --user-profiles profiles.json --output-plot compensation_chart.png
3. Create User Profiles
Generate default user profiles from existing on-call data:
uv run main.py profiles shifts.csv --output user_profiles.json
4. Download Holiday Calendars
Download holiday calendars for specific countries:
uv run main.py calendars --country AT --country FR --country ES --country BG
You can also download all supported calendars at once:
uv run main.py calendars --all
Workflow Examples
Full Workflow with OpsGenie API
- Fetch data from OpsGenie and save to CSV:
uv run main.py opsgenie \
--api-token YOUR_TOKEN \
--schedule-id YOUR_SCHEDULE_ID \
--start-date 2025-01-01 \
--end-date 2025-05-09 \
--save-csv shifts.csv
- Generate user profiles:
uv run main.py profiles shifts.csv --output user_profiles.json
-
Edit the user profiles to adjust timezones, working hours, etc.
-
Calculate compensation with the updated profiles:
uv run main.py csv shifts.csv --user-profiles user_profiles.json --output-plot chart.png
Using Environment Variables
- Create a
.envfile with your configuration:
OPSGENIE_API_TOKEN=your-token
OPSGENIE_SCHEDULE_ID=your-schedule-id
OPSGENIE_START_DATE=2025-01-01
OPSGENIE_END_DATE=2025-05-09
OPSGENIE_SAVE_CSV=shifts.csv
- Fetch data and save to CSV:
uv run main.py opsgenie
- Create and adjust user profiles:
uv run main.py profiles shifts.csv
# Edit user_profiles.json to adjust settings
- Run the compensation calculation:
uv run main.py csv shifts.csv
Report Format
The tool generates a detailed compensation report showing:
=== DAILY COMPENSATION SUMMARY ===
User StartDay StartDate Start EndDate End Hours Amount (€) Pauschale
...
=== USER TOTALS ===
User Total Hours Total Amount (€)
...
=== GRAND TOTAL ===
Total compensation amount: XXX.XX €
CSV Format
The CSV file should have the following columns:
start: Start time of the shift (ISO 8601 format)end: End time of the shift (ISO 8601 format)hours: Duration of the shift in hoursuser: Email of the user who was on call
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file minuto-0.0.0.tar.gz.
File metadata
- Download URL: minuto-0.0.0.tar.gz
- Upload date:
- Size: 24.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c93de67e2b6d2ffbca28ab015c3d0f31b63dd551c2bfbf568125b4e0b89143f
|
|
| MD5 |
7876f6c16605bad53628f3de071fc29f
|
|
| BLAKE2b-256 |
52cb78cdd42b722ef2b3416660c5168fa3053ed4fa3360b9bc8f5a3aa041976c
|
File details
Details for the file minuto-0.0.0-py3-none-any.whl.
File metadata
- Download URL: minuto-0.0.0-py3-none-any.whl
- Upload date:
- Size: 23.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1101f39476f6cb0da202a8768cc68d7690093622af97b58d0afcdf0af80fb8d1
|
|
| MD5 |
c02c3c1a6642e5adad7b727bfe0d4001
|
|
| BLAKE2b-256 |
508239d8fd3a38fd9e365d599eea09ca7c6fac80918d9ff08bfc28467ed543c1
|