Metadata-Version: 2.4
Name: lease-management-system
Version: 0.0.2
Summary: A Python library for lease management calculations and business logic
Home-page: https://github.com/yourusername/lease-management-system
Author: Your Name
Author-email: kavyamunnangi5 <kavyamunnangi5@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/yourusername/lease-management-system
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: author
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python

# Lease Management System Library

A Python library for lease management calculations and business logic.

## Features

- Lease expiry calculations
- Rent due date calculations
- Prorated rent calculations
- Late fee calculations
- Lease validation
- Notification message formatting
- ID generation

## Installation

```bash
pip install lease-management-system
```

## Quick Start

```python
from lease_management import LeaseCalculator

# Generate IDs
lease_id = LeaseCalculator.generate_lease_id()
property_id = LeaseCalculator.generate_property_id()

# Calculate days until expiry
days = LeaseCalculator.calculate_days_until_expiry('2026-12-31')
print(f"Days until expiry: {days}")

# Check if lease expiring soon (within 30 days)
is_expiring = LeaseCalculator.is_lease_expiring_soon('2026-05-10', days_threshold=30)

# Calculate total rent
total = LeaseCalculator.calculate_total_rent(monthly_rent=1500, months=12)
print(f"Total rent: ${total}")

# Validate lease dates
validation = LeaseCalculator.validate_lease_dates('2026-01-01', '2026-12-31')
if validation['valid']:
    print("Dates are valid")
else:
    print(f"Error: {validation['error']}")

# Filter expiring leases
leases = [
    {'lease_id': '1', 'lease_end_date': '2026-05-10'},
    {'lease_id': '2', 'lease_end_date': '2026-12-31'}
]
expiring = LeaseCalculator.filter_expiring_leases(leases, days_threshold=30)

# Format notification message
message = LeaseCalculator.format_notification_message(
    tenant_name='John Doe',
    notification_type='lease_expiry',
    lease_data={
        'property_id': 'prop-123',
        'lease_end_date': '2026-05-10',
        'rent_amount': '1500'
    }
)
print(message['subject'])
print(message['message'])
```

## API Reference

### ID Generation

- `generate_lease_id()` - Generate unique lease ID
- `generate_property_id()` - Generate unique property ID
- `generate_tenant_id()` - Generate unique tenant ID

### Date Calculations

- `calculate_days_until_expiry(lease_end_date)` - Days until lease expires
- `calculate_days_until_rent_due(rent_due_date)` - Days until rent is due
- `calculate_lease_duration_months(start_date, end_date)` - Lease duration in months

### Validation

- `validate_lease_dates(start_date, end_date)` - Validate lease dates
- `is_lease_expiring_soon(lease_end_date, days_threshold)` - Check if expiring soon
- `is_rent_due_soon(rent_due_date, days_threshold)` - Check if rent due soon

### Financial Calculations

- `calculate_total_rent(monthly_rent, months)` - Total rent for period
- `calculate_prorated_rent(monthly_rent, days_in_month, days_occupied)` - Prorated rent
- `calculate_late_fee(rent_amount, days_late, daily_rate)` - Late fee calculation

### Filtering

- `filter_expiring_leases(leases, days_threshold)` - Filter leases expiring soon
- `filter_rent_due_soon(leases, days_threshold)` - Filter leases with rent due soon

### Notifications

- `format_notification_message(tenant_name, notification_type, lease_data)` - Format notification

## Use Cases

### Check Expiring Leases

```python
from lease_management import LeaseCalculator

leases = get_all_leases()  # Your data source
expiring = LeaseCalculator.filter_expiring_leases(leases, days_threshold=30)

for lease in expiring:
    days = LeaseCalculator.calculate_days_until_expiry(lease['lease_end_date'])
    print(f"Lease {lease['lease_id']} expires in {days} days")
```

### Calculate Rent

```python
# Full month rent
monthly_rent = 1500
months = 12
total = LeaseCalculator.calculate_total_rent(monthly_rent, months)

# Prorated rent for partial month
prorated = LeaseCalculator.calculate_prorated_rent(
    monthly_rent=1500,
    days_in_month=30,
    days_occupied=15
)
```

### Generate Notifications

```python
lease_data = {
    'property_id': 'prop-123',
    'lease_end_date': '2026-05-10',
    'rent_amount': '1500'
}

message = LeaseCalculator.format_notification_message(
    tenant_name='John Doe',
    notification_type='lease_expiry',
    lease_data=lease_data
)

# Send via your notification system
send_email(to=tenant_email, subject=message['subject'], body=message['message'])
```

## License

MIT
