169 lines
6.7 KiB
C#
169 lines
6.7 KiB
C#
using System.Diagnostics.Eventing.Reader;
|
|
using System.Globalization;
|
|
using System.Text.Json.Nodes;
|
|
using TarifasANEEL.Services;
|
|
using TarifasANEEL.Utilities;
|
|
|
|
namespace TarifasANEEL.Models
|
|
{
|
|
public class Tarifa
|
|
{
|
|
private const string DISTRIBUTOR_KEY = "NumCPFCNPJ";
|
|
private const string SUBGROUP_KEY = "DscSubGrupoTarifario";
|
|
private const string MODALITY_KEY = "DscModalidadeTarifaria";
|
|
|
|
public required int ID_dist { get; set; }
|
|
public required string Grupo { get; set; }
|
|
public required string Perfil { get; set; }
|
|
public required string Ciclo { get; set; }
|
|
public DateTime? DatInicioVigencia { get; set;}
|
|
public DateTime? DatFimVigencia { get; set;}
|
|
public double Energia_P { get; set;}
|
|
public double Energia_FP { get; set;}
|
|
public double Enc_P { get; set;}
|
|
public double Enc_FP { get; set;}
|
|
public double Dem_P { get; set;}
|
|
public double Dem_FP { get; set;}
|
|
public double ER_P { get; set;}
|
|
public double ER_FP { get; set;}
|
|
public double Megaflex { get; set;}
|
|
public double Covid_P { get; set;}
|
|
public double Covid_FP { get; set;}
|
|
public double Desc_Rural { get; set;}
|
|
public double EH_P { get; set;}
|
|
public double EH_FP { get; set;}
|
|
|
|
public static Tarifa FromRecord(JsonNode record)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(record);
|
|
|
|
return new Tarifa
|
|
{
|
|
ID_dist = DatabaseService.GetDistribuidoraId(record[DISTRIBUTOR_KEY]?.ToString() ?? ""),
|
|
Grupo = record[SUBGROUP_KEY]?.ToString() ?? "",
|
|
Perfil = TarifaHelper.BuildProfileName(record, record[MODALITY_KEY]?.ToString() ?? ""),
|
|
Ciclo = TarifaHelper.ParseResolution(record),
|
|
DatInicioVigencia = DateTime.Parse(record[nameof(DatInicioVigencia)]?.ToString()!),
|
|
DatFimVigencia = DateTime.Parse(record[nameof(DatFimVigencia)]?.ToString()!)
|
|
};
|
|
}
|
|
|
|
public void UpdateComponentValue(JsonNode record)
|
|
{
|
|
int test = 0;
|
|
var subgroupSuffix = Grupo[0].ToString();
|
|
|
|
var component = record["DscComponenteTarifario"]?.ToString() ?? "";
|
|
var unit = record["DscUnidade"]?.ToString() ?? "";
|
|
var rawpeak = record["DscPostoTarifario"]?.ToString() ?? "";
|
|
var modality = record["DscModalidadeTarifaria"]?.ToString().ToUpper() ?? "";
|
|
|
|
|
|
var value = double.TryParse(record["VlrComponenteTarifario"]?.ToString(), out var parsedValue)
|
|
? parsedValue
|
|
: 0;
|
|
|
|
var peakSuffix = rawpeak[0].ToString();
|
|
|
|
switch ((subgroupSuffix, modality, component, unit, peakSuffix))
|
|
{
|
|
// Group A cases
|
|
case ("A", "GERAÇÃO", "TUSD", "R$/kW", "N"):
|
|
Dem_P = Dem_FP = value;
|
|
break;
|
|
|
|
case ("A", "CONVENCIONAL", "TE", "R$/MWh", var peak):
|
|
switch (peak)
|
|
{
|
|
case "N": Energia_P = Energia_FP = value; break;
|
|
case "F": Energia_FP = value; break;
|
|
case "P": Energia_P = value; break;
|
|
}
|
|
break;
|
|
|
|
case ("A", "CONVENCIONAL", "TUSD", "R$/MWh", "N"):
|
|
Enc_P = Enc_FP = value;
|
|
break;
|
|
|
|
case ("A", "AZUL", "TE", "R$/MWh", var peak) when peak is "F" or "P":
|
|
if (peak == "F") Energia_FP = value;
|
|
else Energia_P = value;
|
|
break;
|
|
|
|
case ("A", "AZUL", "TUSD", "R$/MWh", var peak) when peak is "F" or "P":
|
|
if (peak == "F") Enc_FP = value;
|
|
else Enc_P = value;
|
|
break;
|
|
|
|
case ("A", "AZUL", "TUSD", "R$/kW", var peak) when peak is "F" or "P":
|
|
if (peak == "F") Dem_FP = value;
|
|
else Dem_P = value;
|
|
break;
|
|
|
|
case ("A", "VERDE", "TE", "R$/MWh", var peak) when peak is "F" or "P":
|
|
if (peak == "P") Energia_P = value;
|
|
else Energia_FP = value;
|
|
break;
|
|
|
|
case ("A", "VERDE", "TUSD", "R$/kW", "N"):
|
|
Dem_FP = value;
|
|
Dem_P = 0;
|
|
break;
|
|
|
|
case ("A", "VERDE", "TUSD", "R$/MWh", var peak) when peak is "F" or "P":
|
|
if (peak == "P") Enc_P = value;
|
|
else Enc_FP = value;
|
|
break;
|
|
|
|
// Group B cases
|
|
case ("B", "CONVENCIONAL" or "PRÉ-PAGAMENTO", var comp, "R$/MWh", "N"):
|
|
if (comp == "TUSD") Enc_P = Enc_FP = value;
|
|
else if (comp == "TE") Energia_P = Energia_FP = value;
|
|
break;
|
|
|
|
case ("B", "BRANCA", var comp, "R$/MWh", var peak):
|
|
if (comp == "TE")
|
|
if (peak == "P") Energia_P = value;
|
|
else Energia_FP += value;
|
|
else if (comp == "TUSD")
|
|
if (peak == "P") Enc_P = value;
|
|
else Enc_FP += value;
|
|
break;
|
|
|
|
case ("B", "GERAÇÃO", "TUSD", "R$/kW", "N"):
|
|
Dem_P = Dem_FP = value;
|
|
break;
|
|
default:
|
|
if ((component == "TE" && unit == "R$/kW" && value != 0) ||
|
|
!((subgroupSuffix == "A" || subgroupSuffix == "B") &&
|
|
(modality is "GERAÇÃO" or "CONVENCIONAL" or "AZUL" or "VERDE" or "BRANCA" or "PRÉ-PAGAMENTO" or "DISTRIBUIÇÃO" or "ENERGIA SUPRIMENTO")))
|
|
{
|
|
test++;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (test > 0) { Console.WriteLine("Sem lógica:\t{0}",string.Join("\t",new string[] { ID_dist.ToString(), Ciclo, Grupo, Perfil, component, peakSuffix, unit, value.ToString("C", CultureInfo.CreateSpecificCulture("pt-BR")) })); }
|
|
}
|
|
|
|
public bool HasAllEmptyValues()
|
|
{
|
|
// Adjust this method based on your Tarifa properties
|
|
return Energia_P == 0 &&
|
|
Energia_FP == 0 &&
|
|
Enc_P == 0 &&
|
|
Enc_FP == 0 &&
|
|
Dem_P == 0 &&
|
|
Dem_FP == 0 &&
|
|
ER_P == 0 &&
|
|
ER_FP == 0 &&
|
|
Megaflex == 0 &&
|
|
Covid_P == 0 &&
|
|
Covid_FP == 0 &&
|
|
Desc_Rural == 0 &&
|
|
EH_P == 0 &&
|
|
EH_FP == 0;
|
|
}
|
|
}
|
|
}
|