private static void ParseHeaderData(Eob obj, string[] HeaderData)
 {
     obj.LineItems = new List <LineItem>();
     if (HeaderData.Length == SecondLabelRules.headerColumnCount)
     {
         obj.CheckNo       = HeaderData[0];
         obj.PaitentId     = HeaderData[1];
         obj.Name          = HeaderData[2];
         obj.ChargeAmt     = HeaderData[3];
         obj.PaymentAmt    = HeaderData[4];
         obj.AccountNumber = HeaderData[5];
         obj.Status        = HeaderData[6];
         obj.Payer         = HeaderData[7];
     }
     else
     {
         var Data = HeaderData[2].Split(new char[] { ' ' });;
         obj.CheckNo       = HeaderData[0];
         obj.PaitentId     = HeaderData[1];
         obj.Name          = Data[0] + ' ' + Data[1];
         obj.ChargeAmt     = Data[2];
         obj.PaymentAmt    = HeaderData[3];
         obj.AccountNumber = HeaderData[4];
         obj.Status        = HeaderData[5];
         obj.Payer         = HeaderData[6];
     }
 }
        public static List <Eob> SecondLabelParsing(List <KeyValuePair <int, List <string> > > keyValuePairs)
        {
            Regex regex = new Regex("[ ]{2,}", RegexOptions.None);

            var FinalEobList = new List <Eob>();

            keyValuePairs.ForEach(x =>
            {
                List <KeyValuePair <int, List <string> > > LineItems = new List <KeyValuePair <int, List <string> > >();                // Header Data Parsing Start

                var blockData = x.Value;
                blockData.RemoveAt(0);
                var HeaderDataBlock = blockData[0];
                var objHeader       = new Eob();
                var FirstLineData   = regex.Replace(HeaderDataBlock, "*");
                var HeaderData      = FirstLineData.Split(new char[] { '*' });
                ParseHeaderData(objHeader, HeaderData);

                //Header Data Parsing End

                //Line Item start
                List <string> LineItem = new List <string>();
                int LineItemblockCount = 0;
                blockData.ForEach(p =>
                {
                    if (p.Contains(SecondLabelRules.startToken))
                    {
                        SecondLabelRules.LineItemStart = true;
                    }

                    if (SecondLabelRules.LineItemStart && !SecondLabelRules.LineItemEnd)
                    {
                        LineItem.Add(p);
                    }
                    if (p.Contains(SecondLabelRules.endToken))
                    {
                        SecondLabelRules.LineItemEnd = true;
                    }
                    if (SecondLabelRules.LineItemStart && SecondLabelRules.LineItemEnd)
                    {
                        LineItemblockCount = LineItemblockCount + 1;
                        LineItems.Add(new KeyValuePair <int, List <string> >(LineItemblockCount, LineItem));
                        SecondLabelRules.LineItemStart = false;
                        SecondLabelRules.LineItemEnd   = false;
                        LineItem = new List <string>();
                    }
                });
                ParseLineData(objHeader, LineItems);
                FinalEobList.Add(objHeader);
            });

            return(FinalEobList);
        }
        private static void ParseLineData(Eob obj, List <KeyValuePair <int, List <string> > > keyValuePairs)
        {
            Regex regex = new Regex("[ ]{2,}", RegexOptions.None);

            keyValuePairs.ForEach(x =>
            {
                var blockData = x.Value;
                blockData.RemoveAt(0);
                var LineDataBlock = regex.Replace(blockData[0], "*");
                var LineData      = LineDataBlock.Split(new char[] { '*' });
                var objLineItem   = new LineItem();

                if (LineData.Length > SecondLabelRules.LineColumnCount)
                {
                    var Data = LineData[1].Split(new char[] { ' ' });;

                    objLineItem.CheckNo = obj.CheckNo;
                    objLineItem.Name    = obj.Name;
                    objLineItem.Status  = obj.Status;
                    objLineItem.Payer   = obj.Payer;

                    objLineItem.SvcDate     = Data[0];
                    objLineItem.CPT         = Data[1];
                    objLineItem.ChargeAmt   = LineData[2];
                    objLineItem.PaymentAmt  = LineData[3];
                    objLineItem.TotalAdjAmt = LineData[4];
                    objLineItem.Remarks     = LineData[5];
                    obj.LineItems.Add(objLineItem);
                }

                blockData.RemoveRange(0, 2);
                List <string> description   = new List <string>();
                decimal Cobligatition       = 0;
                decimal PatientResposbility = 0;

                foreach (string p in blockData)
                {
                    var data = p.TrimStart().TrimEnd();

                    if (data.Contains(SecondLabelRules.midToken))
                    {
                        var data1 = regex.Replace(data, "*");
                        var Data  = data1.Split(new char[] { '*' });
                        if (Data.Length > 0)
                        {
                            if (Cobligatition == 0)
                            {
                                Cobligatition = Convert.ToDecimal(Data[1]);
                            }
                        }
                    }
                    if (data.Contains(SecondLabelRules.endToken))
                    {
                        var data1 = regex.Replace(data, "*");
                        var Data  = data1.Split(new char[] { '*' });
                        if (Data.Length > 0)
                        {
                            PatientResposbility += Convert.ToDecimal(Data[1]);
                        }
                    }
                    description.Add(data);
                }

                var tempAllowedAmt                = Convert.ToDecimal(objLineItem.ChargeAmt) - Cobligatition;
                objLineItem.AllowedAmount         = tempAllowedAmt.ToString();
                var PatientRsponsibility          = tempAllowedAmt - Convert.ToDecimal(objLineItem.PaymentAmt);
                objLineItem.PatientRsponsibility  = PatientRsponsibility.ToString();
                objLineItem.AdjustmentDescription = string.Join(System.Environment.NewLine, description);
                Cobligatition = 0;
            });
        }