|
| 1 | +# Release Notes |
| 2 | + |
| 3 | +## Version 1.0.0 (2026-03-30) |
| 4 | + |
| 5 | +### 🎉 Initial Release |
| 6 | + |
| 7 | +First stable release of the JMBG Python library for validating and parsing Serbian unique master citizen numbers (JMBG - Jedinstveni Matični Broj Građana). |
| 8 | + |
| 9 | +### ✨ Features |
| 10 | + |
| 11 | +- **JMBG Validation**: Comprehensive validation with multiple checks |
| 12 | + - Length validation (13 digits) |
| 13 | + - Format validation (numeric only) |
| 14 | + - Date validation (including leap year support) |
| 15 | + - Region code validation |
| 16 | + - Checksum validation (modulo 11 algorithm) |
| 17 | + |
| 18 | +- **Information Extraction**: |
| 19 | + - Birth date parsing |
| 20 | + - Age calculation |
| 21 | + - Gender determination (male/female) |
| 22 | + - Region and country information |
| 23 | + - Access to all JMBG components (day, month, year, region, unique number, checksum) |
| 24 | + |
| 25 | +- **Supported Regions**: |
| 26 | + - Serbia (71-79): Belgrade, Kragujevac, Niš, etc. |
| 27 | + - Serbia/Vojvodina (80-89): Novi Sad, Subotica, Pančevo, etc. |
| 28 | + - Serbia/Kosovo (91-96): Priština, Peć, Prizren, etc. |
| 29 | + - Bosnia and Herzegovina (10-19) |
| 30 | + - Montenegro (21-29) |
| 31 | + - Croatia (30-39) |
| 32 | + - Macedonia (41-49) |
| 33 | + - Slovenia (50) |
| 34 | + |
| 35 | +- **Convenient API**: |
| 36 | + - `Jmbg` class for parsing and accessing JMBG data |
| 37 | + - `valid()` function for quick validation |
| 38 | + - `parse()` function for parsing |
| 39 | + - Type hints for better IDE support |
| 40 | + - Custom `JmbgError` exception with descriptive error messages |
| 41 | + |
| 42 | +- **Additional Features**: |
| 43 | + - Adult status check (`is_adult()` - 18+ years) |
| 44 | + - String representation and formatting |
| 45 | + - Equality comparison and hashing support |
| 46 | + - No external dependencies |
| 47 | + |
| 48 | +### 📚 Documentation |
| 49 | + |
| 50 | +- Comprehensive README with examples |
| 51 | +- Complete API documentation in docstrings |
| 52 | +- Usage examples for common scenarios |
| 53 | +- MIT License |
| 54 | + |
| 55 | +### 🧪 Testing |
| 56 | + |
| 57 | +- Full test suite with 23 unit tests |
| 58 | +- 100% test coverage for core functionality |
| 59 | +- Tests for edge cases (leap years, boundary unique numbers, etc.) |
| 60 | + |
| 61 | +### 📦 Package Information |
| 62 | + |
| 63 | +- **Package Name**: `jmbg-labs` |
| 64 | +- **Python Support**: Python 3.8+ |
| 65 | +- **License**: MIT |
| 66 | +- **Repository**: https://github.com/jmbg-labs/python |
| 67 | + |
| 68 | +### 🚀 Installation |
| 69 | + |
| 70 | +```bash |
| 71 | +pip install jmbg-labs |
| 72 | +``` |
| 73 | + |
| 74 | +### 💡 Quick Start |
| 75 | + |
| 76 | +```python |
| 77 | +from jmbg import Jmbg, valid |
| 78 | + |
| 79 | +# Validate JMBG |
| 80 | +if valid('0710003730015'): |
| 81 | + jmbg = Jmbg('0710003730015') |
| 82 | + print(f"Age: {jmbg.get_age()}") |
| 83 | + print(f"Gender: {'Male' if jmbg.is_male() else 'Female'}") |
| 84 | + print(f"Region: {jmbg.region_text}") |
| 85 | +``` |
| 86 | + |
| 87 | +### 🙏 Credits |
| 88 | + |
| 89 | +Developed by [JMBG Labs](https://github.com/jmbg-labs) |
| 90 | + |
| 91 | +--- |
| 92 | + |
| 93 | +## Upcoming Features |
| 94 | + |
| 95 | +Future releases may include: |
| 96 | + |
| 97 | +- Additional validation options |
| 98 | +- Export to different formats (JSON, dict) |
| 99 | +- Bulk validation utilities |
| 100 | +- Performance optimizations |
| 101 | +- Extended region information |
| 102 | + |
| 103 | +--- |
| 104 | + |
| 105 | +For full documentation, visit the [GitHub repository](https://github.com/jmbg-labs/python). |
0 commit comments