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, 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:
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:
{
"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:
-
Basic Validation (Priority: 1)
- Validates fundamental bill information
- Checks data consistency
-
Consumption Validation (Priority: 2)
- Verifies reading periods
- Validates consumption calculations
- Checks peak/off-peak totals
-
Tariff Component Validation (Priority: 3)
- Validates TUSD and TE calculations
- Checks power factor adjustments
-
Seasonal Tariff Validation (Priority: 4)
- Applies to rural/irrigation consumers
- Validates dry/wet season multipliers
-
Flag System Validation (Priority: 5)
- Validates flag colors and values
- Checks exemptions
-
Subsidy Validation (Priority: 6)
- Validates discount eligibility
- Checks consumption ranges
- Calculates correct discount amounts
-
Additional Charges Validation (Priority: 8)
- Validates mandatory charges
- Checks justifications
- Enforces maximum limits
-
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
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:
- Implement IValidationRule interface
- Define appropriate priority
- Add corresponding model classes
- Update repository interfaces
Regulatory Updates
This validator is based on ANEEL Resolution 1000/2021. When regulatory updates occur:
- Review affected validation rules
- Update calculation parameters
- Modify validation logic as needed
- Update documentation