# Electricity Bill Compliance Validator ## Overview This application validates electricity bills according to ANEEL Resolution 1000/2021 (REN 1000/2021). It ensures that bills issued by electricity distributors comply with all regulatory requirements, tariff calculations, and consumer rights. ## Regulatory Compliance This validator implements the rules defined in [ANEEL Resolution 1000/2021](https://www2.aneel.gov.br/cedoc/ren20211000.html), which establishes the General Conditions for Electricity Supply. The validation covers all aspects of billing as defined in Chapter VIII of the resolution. ## Features - ✅ Basic Validation - ✅ Consumption Calculation - ✅ Demand Charges - ✅ Reactive Energy - ✅ Seasonal Tariffs - ✅ Public Lighting - ✅ ICMS Tax - ✅ Municipal Taxes - ✅ Flag System - ✅ Subsidies and Discounts - ✅ Additional Charges - ✅ Payment Terms - ✅ Emergency Situations (Art. 350-354) ## Input The system accepts a `BillComplianceRequest` containing: - Bill identification (SmartCode) - Distributor information - Consumer group and subgroup - Reading dates and values - Consumption details - Tariff components (TUSD, TE) - Charges and adjustments - Tax amounts - Payment information Example: ```csharp var request = new BillComplianceRequest { SmartCode = "123456789", DistributorName = "ENERGY_DIST", ConsumerGroup = "B1", Subgroup = "RESIDENTIAL", ConsumptionAmount = 150.5m, TUSDAmount = 100.25m, TEAmount = 80.15m, // ... other properties }; ``` ## Output The system returns a `ValidationResult` containing: - Validation status (IsValid) - Rule name that was validated - Detailed message explaining any violations Example: ```csharp { "IsValid": false, "RuleName": "Consumption Validation", "Message": "Consumption amount doesn't match readings difference" } ``` ## Validation Rules Each validation rule implements the `IValidationRule` interface and follows a specific priority order: 1. **Basic Validation** (Priority: 1) - Validates fundamental bill information - Checks data consistency 2. **Consumption Validation** (Priority: 2) - Verifies reading periods - Validates consumption calculations - Checks peak/off-peak totals 3. **Tariff Component Validation** (Priority: 3) - Validates TUSD and TE calculations - Checks power factor adjustments 4. **Seasonal Tariff Validation** (Priority: 4) - Applies to rural/irrigation consumers - Validates dry/wet season multipliers 5. **Flag System Validation** (Priority: 5) - Validates flag colors and values - Checks exemptions 6. **Subsidy Validation** (Priority: 6) - Validates discount eligibility - Checks consumption ranges - Calculates correct discount amounts 7. **Additional Charges Validation** (Priority: 8) - Validates mandatory charges - Checks justifications - Enforces maximum limits 8. **Payment Terms Validation** (Priority: 9) - Validates due dates - Calculates late fees - Checks partial payment eligibility ## Dependencies The system relies on an `IDistributorRepository` to fetch: - Tariff information - Subsidy rules - Additional charge configurations - Payment terms - Seasonal tariff parameters ## Error Handling - All validation errors are clearly documented - Tolerance of 0.01 for decimal comparisons - Detailed error messages for troubleshooting ## Usage Example ```csharp var validator = new BillComplianceValidator(distributorRepository); var result = await validator.ValidateAsync(billRequest); if (!result.IsValid) { Console.WriteLine($"Validation failed: {result.Message}"); } ``` ## Best Practices - All monetary values are handled as decimal - Date comparisons account for time zones - Consumer groups are case-insensitive - Validation rules are independent and maintainable ## Contributing When adding new validation rules: 1. Implement IValidationRule interface 2. Define appropriate priority 3. Add corresponding model classes 4. Update repository interfaces ## Regulatory Updates This validator is based on ANEEL Resolution 1000/2021. When regulatory updates occur: 1. Review affected validation rules 2. Update calculation parameters 3. Modify validation logic as needed 4. Update documentation ```