Releases: afsmaira/vacationExtender
🎉 v1.0.0 - First Major Release!
Official Release: This version marks the stability of the Vacation Extender core API and Web App. The project is now considered production-ready. 🚀
✨ New Features
- Corpus Christi Holiday (Brazil): Added option to automatically calculate and include Corpus Christi (60 days after Easter) for Brazilian calendars.
- "Start Month" Constraint: New flexibility allowing users to restrict vacation start dates to specific months, while allowing them to end in subsequent months.
- Legal & Privacy: Added comprehensive Terms of Use and Privacy Policy accessible directly within the app sidebar.
🐛 Bug Fixes
- Localization: Fixed month name display issues to correctly adhere to the selected language (EN/PT).
🎨 Improvements
- UI Overhaul: Sidebar reorganized into logical sections (Basic Info, Rules, Calendar) for better usability.
- Documentation: Included
TERMS_PT.mdandTERMS_EN.mdfor legal compliance.
v0.3.0 — Intelligent Pruning & Advanced Constraint Validation
This release focuses on enhancing the robustness of the Dynamic Programming engine and the efficiency of the vacation search algorithm by introducing advanced pruning techniques to ensure 100% accurate results.
✨ New Features & Improvements
🧠 Intelligent Pruning (Pigeonhole Principle)
The optimization engine now utilizes the Pigeonhole Principle to discard impossible paths early in the process. If the number of remaining mandatory months or dates exceeds the number of available vacation periods, the algorithm stops processing that branch, significantly saving memory and CPU time.
🛠️ _run_optimal Engine Refactoring
- Centralized Logic: Introduced the
_check_validprivate method, eliminating code redundancy and ensuring all business rules (must_be,start_days,end_days,months) are validated consistently across both DP branches (inheritance and inclusion). - Enhanced Lazy Validation: Improved temporal verification logic. The algorithm now allows paths to "grow" toward future requirements without premature discarding, while guaranteeing full integrity in the final output.
💻 Technical Changes
- Complexity Reduction: Optimized the main DP loop by reducing duplicate conditional blocks.
- Data Robustness: Added integrity checks for empty paths and handled potential edge-case errors in sequence validations.
📝 How to Update
Update to the latest version via pip:
pip install --upgrade vacation-extenderv0.2.0 - Advanced Constraints & UI Enhancements ⚓🌴
This release introduces powerful new ways to customize your vacation planning, allowing you to anchor your holiday periods to specific dates and ensure mandatory days are always included.
🚀 New Features
- Anchor Constraints (
must_start_on&must_end_on): You can now force vacation periods to start or end on specific dates. Perfect for when you have already booked flights or have a specific event to attend. - Mandatory Vacation Days (
must_be_vacation): Specify a list of dates that must be part of your vacation plan. The algorithm will prioritize paths that include these dates. - Dynamic Search Expansion: The internal solver now automatically increases its search depth (
top_n) when strict constraints are applied, ensuring that valid solutions are found even in highly restricted scenarios.
💻 UI & UX Improvements
- Advanced Anchors Section: A new organized section in the Streamlit interface to manage fixed dates.
- Multi-language Support: Full UI support for both English 🇺🇸 and Portuguese 🇧🇷, including detailed tooltips for all parameters.
- Real-time Validation: Added warnings in the UI when the number of fixed anchors exceeds the maximum allowed vacation periods.
🛠 Bug Fixes
- Date Comparison Engine: Fixed a critical
TypeError(getset_descriptor) occurring when comparing customCalendarDayobjects with standarddatetime.dateobjects. - Logic Refinement: Fixed a typo in the
Break.__contains__method that occasionally caused validation filters to skip valid blocks.
📖 Documentation
- Added a comprehensive
CHANGELOG.mdfollowing Keep a Changelog standards. - Updated
README.mdwith the new configuration parameters and usage examples.
Full Changelog: v0.1.1...v0.2.0
v0.1.0 - Initial Release: The Journey Begins! 🚀
We are excited to announce the first stable release of VacationExtender! 🌴
This tool was designed for everyone who wants to make the most out of their yearly leave by strategically connecting public holidays with minimum PTO (Paid Time Off) days.
✨ Key Features
- Smart Holiday Detection: Automatic identification of public holidays for multiple countries and years using the
holidayslibrary. - Optimization Algorithms: * Greedy Approach: A fast, heuristic-based method for quick suggestions.
- Dynamic Programming (DP): A rigorous mathematical approach to find the absolute best combinations for your entire year.
- Flexible Configuration: Fully customizable through
TOMLfiles or dictionary payloads, allowing you to define your total PTO budget, minimum gaps between vacations, and more. - Detailed ROI Insights: Generates a comprehensive analysis showing exactly how many days you "gain" for every day of PTO spent.
🛠 Technical Stack
- Language: Python 3.x
- Core Engine: Custom Dynamic Programming algorithm.
- Data: Integrated with the
holidaysPython package. - Interface: Prepared for Streamlit integration and CLI usage.
Why use VacationExtender?
Planning vacations manually across a whole year is a complex puzzle. This initial version provides the engine to solve that puzzle for you, ensuring you never miss a "bridge" (ponte) opportunity again.