public async Task PreProcessIndicators(SaveRequest request, Load load, User user, Edition edition, Notification notification)
List<IndicatorsLoadTemp> values = new List<IndicatorsLoadTemp>();
var file = new StreamReader(new MemoryStream(request.File.Data), System.Text.Encoding.UTF8, true);
var firstLine = file.ReadLine();
ValidateSeparator(firstLine, 1, load.Id);
while (!file.EndOfStream)
var line = file.ReadLine();
ValidateSeparator(line, lineNumber, load.Id);
var lineValues = line.Split(';');
List<Int32> CityAndProvince = new List<Int32>();
values.Add(new IndicatorsLoadTemp
Reference = ValidateInt(lineValues[0], lineNumber, "REFERENCIA", load.Id, false),
IBGECode = ValidateMandatoryField(lineValues[1].ToString(), lineNumber, "CODIBGE", load.Id, 7),
IDPRT = ValidateDecimal(lineValues[2], lineNumber, "ID.PRT", load.Id, true),
ARICMS = ValidateDecimal(lineValues[3], lineNumber, "AR.ICMS", load.Id, true),
ARISS = ValidateDecimal(lineValues[4], lineNumber, "AR.ISS", load.Id, true),
ARTO = ValidateDecimal(lineValues[5], lineNumber, "AR.TO", load.Id, true),
EMPPN = ValidateDecimal(lineValues[6], lineNumber, "EMP.PN", load.Id, true),
EMPTO = ValidateDecimal(lineValues[7], lineNumber, "EMP.TO", load.Id, true),
IDGINI = ValidateDecimal(lineValues[8], lineNumber, "ID.GINI", load.Id, true),
IDPRR = ValidateDecimal(lineValues[9], lineNumber, "ID.PRR", load.Id, true),
IDPRU = ValidateDecimal(lineValues[10], lineNumber, "ID.PRU", load.Id, true),
IDVFIRJAN = ValidateDecimal(lineValues[11], lineNumber, "IDV.FIRJAN", load.Id, true),
IDVIDH = ValidateDecimal(lineValues[12], lineNumber, "IDV.IDH", load.Id, true),
LGAGEDES = ValidateDecimal(lineValues[13], lineNumber, "LG.AGE.DES", load.Id, true),
LGDESB = ValidateDecimal(lineValues[14], lineNumber, "LG.DESB", load.Id, true),
LGEMPIND = ValidateDecimal(lineValues[15], lineNumber, "LG.EMP.IND", load.Id, true),
LGIMP = ValidateDecimal(lineValues[16], lineNumber, "LG.IMP", load.Id, true),
LGUPC = ValidateDecimal(lineValues[17], lineNumber, "LG.UPC", load.Id, true),
MSMPETO = ValidateDecimal(lineValues[18], lineNumber, "MS.MPE.TO", load.Id, true),
MSTOTO = ValidateDecimal(lineValues[19], lineNumber, "MS.TO.TO", load.Id, true),
NEMPETO = ValidateDecimal(lineValues[20], lineNumber, "NE.MPE.TO", load.Id, true),
NETOTO = ValidateDecimal(lineValues[21], lineNumber, "NE.TO.TO", load.Id, true),
PDIADES = ValidateDecimal(lineValues[22], lineNumber, "PDI.A.DES", load.Id, true),
PDICPUB = ValidateDecimal(lineValues[23], lineNumber, "PDI.C.PUB", load.Id, true),
PDIIMP = ValidateDecimal(lineValues[24], lineNumber, "PDI.IMP", load.Id, true),
PDIRSMP = ValidateDecimal(lineValues[25], lineNumber, "PDI.R.SMP", load.Id, true),
PDISEMP = ValidateDecimal(lineValues[26], lineNumber, "PDI.S.EMP", load.Id, true),
PIBM = ValidateDecimal(lineValues[27], lineNumber, "PIB.M", load.Id, true),
PIPMEIBF = ValidateDecimal(lineValues[28], lineNumber, "PIP.MEIBF", load.Id, true),
PIPPBF = ValidateDecimal(lineValues[29], lineNumber, "PIP.PBF", load.Id, true),
SNMEI = ValidateDecimal(lineValues[30], lineNumber, "SN.MEI", load.Id, true),
SNOSN = ValidateDecimal(lineValues[31], lineNumber, "SN.OSN", load.Id, true),
VAAGRO = ValidateDecimal(lineValues[32], lineNumber, "VA.AGRO", load.Id, true),
VAINDU = ValidateDecimal(lineValues[33], lineNumber, "VA.INDU", load.Id, true),
VASAUD = ValidateDecimal(lineValues[34], lineNumber, "VA.SAUD", load.Id, true),
VASRV = ValidateDecimal(lineValues[35], lineNumber, "VA.SRV", load.Id, true),
AttachmentId = Convert.ToInt16(load.AttachmentId),
CityId = GetCityOrProvinceId(lineValues[1].ToString(), 1, load.Id, lineNumber, "CODIBGE", false),
ProvinceId = GetCityOrProvinceId(lineValues[1].ToString(), 2, load.Id, lineNumber, "CODIBGE", false),
RegisterUnexpectedError(load);
throw new Exception(ex.Message);
if (_loadError.Count == 0)
foreach (IndicatorsLoadTemp loadLine in values)
Context.IndicatorsLoadTemp.Add(loadLine);
foreach (LoadError error in _loadError)
Context.LoadError.Add(error);
load.LoadStatusId = GetNextStatus(load.LoadStatusId);
_notificationMessageService.GeneratePreProcessingNotification(user, edition, notification, request.LoadTypeId);
RegisterUnexpectedError(load);
throw new Exception(ex.Message);