..

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:

  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

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