Пример #1
0
        // Constructor takes SEF file name as argument.  Creates ediDocument object.
        public PetSmart852(string sSefPathFile)
        {
            // Create the top-level application object "ediDocument".
            oEdiDoc = new ediDocument();

            // This makes certain that Framework EDI only uses the SEF file provided, and that it does not use its
            // built -in Standard Reference table to translate the EDI document
            oSchemas = (ediSchemas)oEdiDoc.GetSchemas();
            oSchemas.EnableStandardReference = false;

            // The FORWARD-ONLY cursor increases the performance of processing the EDI document
            oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardOnly;

            // Load SEF file
            oEdiDoc.LoadSchema(sSefPathFile, SchemaTypeIDConstants.Schema_Standard_Exchange_Format);

            oConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["EdiDb"].ConnectionString);
            oConnection.Open();

            oDaInterchange = new SqlDataAdapter();
            oDaFuncGroup   = new SqlDataAdapter();
            oDaHeader      = new SqlDataAdapter();
            oDaDetail      = new SqlDataAdapter();
            oProdActivity  = new SqlDataAdapter();
        }
Пример #2
0
        protected void AcknowledgeInboundEDIFiles()
        {
            try
            {
                ediDocument oEdiDoc = null;
                ediDataSegment oSegment = null;
                ediAcknowledgment oAck = null;
                ediSchemas oSchemas = null;
                string sSegmentID;
                string sLoopSection;
                int nArea;
                string sPrevEdiFile = "";
                bool bInbound997True = false;
                //  string sPath = AppDomain.CurrentDomain.BaseDirectory;
                SafeAndEdiFilePath objSafeAndEdiFilePath = new SafeAndEdiFilePath();
                EdiFilesPaths EdiFilePath = objSafeAndEdiFilePath.GetFilesAndPaths();

                // string sPath = @"" + ConfigurationManager.AppSettings["AppPath"] + @"\";
                string sPath = EdiFilePath.sPath;
                SqlConnection oConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["EdiDb"].ConnectionString);

                string sInboundPath = EdiFilePath.sInboundPath;//sPath + ConfigurationManager.AppSettings["EDI_Inbound"] + @"\";
                string sOutboundPath = EdiFilePath.sOutboundPath;//sPath + ConfigurationManager.AppSettings["EDI_Outbound"] + @"\";
                string sAcceptPath = EdiFilePath.sAcceptPath;//sPath + ConfigurationManager.AppSettings["EDI_Accepted"] + @"\";
                string sRejectPath = EdiFilePath.sRejectPath;//sPath + ConfigurationManager.AppSettings["EDI_Rejected"] + @"\";
                string s997Path = EdiFilePath.s997Path;//sPath + ConfigurationManager.AppSettings["EDI_997"] + @"\";
                string sSefPath = EdiFilePath.sSefPath;//sPath + ConfigurationManager.AppSettings["Seffolder"] + @"\";
                string sEdiDonePath = EdiFilePath.sEdiDonePath;//sPath + ConfigurationManager.AppSettings["EDI_DONE"] + @"\";

                int nFileCount = 0;

                string[] sEdiPathFiles = Directory.GetFiles(sInboundPath);

                if (sEdiPathFiles.Length == 0)
                {
                    //MessageBox.Show("There are no files in the EDI_Inbound folder.");
                    LogLibrary.WriteErrorLog(" on AcknowledgeInboundEDIFiles" + "There are no files in the EDI_Inbound folder.");
                }
                else
                {
                    System.Windows.Forms.Cursor Cursor = System.Windows.Forms.Cursors.WaitCursor;

                    oConnection.Open();

                    string sSql = "select * from [Config] ";
                    SqlDataAdapter oDaConfig = new SqlDataAdapter(sSql, oConnection);
                    DataSet oConfigDs = new DataSet("dsConfig");
                    oDaConfig.Fill(oConfigDs, "dsConfig");
                    DataRow oConfigRow = oConfigDs.Tables["dsConfig"].Rows[0];

                    string sSenderIdQlfr = oConfigRow["SenderIdQlfr"].ToString();
                    string sSenderId = oConfigRow["SenderId"].ToString();
                    string sReceiverIdQlfr = oConfigRow["ReceiverIdQlfr"].ToString();
                    string sReceiverId = oConfigRow["ReceiverId"].ToString();
                    string sControlNumber = oConfigRow["ControlNumber"].ToString();
                    string sAcknowledgmentRequested = oConfigRow["AcknowledgmentRequested"].ToString();
                    string sUsageIndicator = oConfigRow["UsageIndicator"].ToString();
                    string sComponentElementSeparator = oConfigRow["ComponentElementSeparator"].ToString();

                    Int32 nControlNumber = Convert.ToInt32(sControlNumber);

                    ediDocument.Set(ref oEdiDoc, new ediDocument());

                    //By default, FREDI uses the  universal coordinated time (UTC), however you can change it to local time
                    oEdiDoc.set_Option(DocumentOptionIDConstants.OptDocument_UseLocalTime, 1);

                    // Disabling the internal standard reference library to makes sure that 
                    // FREDI uses only the SEF file provided
                    ediSchemas.Set(ref oSchemas, (ediSchemas)oEdiDoc.GetSchemas());
                    oSchemas.EnableStandardReference = false;

                    // This makes certain that the EDI file must use the same version SEF file, otherwise the process will stop.
                    oSchemas.set_Option(SchemasOptionIDConstants.OptSchemas_VersionRestrict, 1);

                    // By setting the cursor type to ForwardOnly, FREDI does not load the entire file into memory, which
                    // improves performance when processing larger EDI files.
                    oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardOnly;

                    // If an acknowledgment file has to be generated, an acknowledgment object must be created, and its 
                    // property must be enabled before loading the EDI file.
                    oAck = (ediAcknowledgment)oEdiDoc.GetAcknowledgment();
                    oAck.EnableFunctionalAcknowledgment = true;

                    // Load all SEF files from SEF folder.  FREDI will automaticall select the appropriate one.
                    string[] sSefPathFiles = Directory.GetFiles(sSefPath);
                    foreach (string sSefPathFile in sSefPathFiles)
                    {
                        oEdiDoc.LoadSchema(sSefPathFile, 0);

                    } // foreach

                    string sDestTempFile = "dest_temp.txt";

                    using (Stream destStream = File.OpenWrite(sDestTempFile))
                    {
                        foreach (string sEdiPathFile in sEdiPathFiles)
                        {
                            nFileCount = nFileCount + 1;

                            string sEdiFile = Path.GetFileName(sEdiPathFile);
                            DateTime dtEdiFileCreation = File.GetCreationTime(sEdiPathFile);
                            string sEdiFileTranSetNo = "";
                            string sInbound997GroupContolNo = "";
                            string sInbound997TranSetNo = "";
                            string sInbound997Ack501 = "";
                            // Loads EDI file and the corresponding SEF file
                            oEdiDoc.LoadEdi(sEdiPathFile);
                            // This loop will generate a 997 EDI file if the inbound file is itslef not a 997
                            // Gets the first data segment in the EDI files
                            ediDataSegment.Set(ref oSegment, (ediDataSegment)oEdiDoc.FirstDataSegment);  //oSegment = (ediDataSegment) oEdiDoc.FirstDataSegment
                            // This loop iterates though the EDI file (850 or 997) a segment at a time
                            while (oSegment != null)
                            {
                                // A segment is identified by its Area number, Loop section and segment id.
                                sSegmentID = oSegment.ID;
                                sLoopSection = oSegment.LoopSection;
                                nArea = oSegment.Area;

                                if (nArea == 1)
                                {
                                    if (sLoopSection == "")
                                    {
                                        if (sSegmentID == "ST")
                                        {
                                            sEdiFileTranSetNo = oSegment.get_DataElementValue(1);

                                            if (sEdiFileTranSetNo == "997")
                                            {
                                                bInbound997True = true;
                                            }
                                            else
                                            {
                                                bInbound997True = false;
                                            }
                                        }
                                        else if (sSegmentID == "AK1")
                                        {
                                            sInbound997GroupContolNo = oSegment.get_DataElementValue(2);

                                        } // sSegmentID
                                    }
                                    else if (sLoopSection == "AK2")
                                    {
                                        if (sSegmentID == "AK2")
                                        {
                                            sInbound997TranSetNo = oSegment.get_DataElementValue(2);
                                        }
                                        else if (sSegmentID == "AK5")
                                        {
                                            sInbound997Ack501 = oSegment.get_DataElementValue(1);

                                        } // sSegmentID

                                    } // sLoopSection

                                } // nArea

                                //get next data segment
                                ediDataSegment.Set(ref oSegment, (ediDataSegment)oSegment.Next());  //oSegment = (ediDataSegment) oSegment.Next();
                            }

                            // This reads the 997 object that was generated in the above loop to tell us 
                            // if the EDI file received should be accpeted or rejected.  (This does not translate an inbound 997 EDI file.)
                            if (!bInbound997True) // if not an inbound 997 file
                            {
                                // Checks the 997 acknowledgment file just created.
                                // The 997 file is an EDI file, so the logic to read the 997 Functional Acknowledgemnt file is similar
                                // to translating any other EDI file.

                                // Gets the first segment of the 997 acknowledgment file
                                ediDataSegment.Set(ref oSegment, (ediDataSegment)oAck.GetFirst997DataSegment());    //oSegment = (ediDataSegment) oAck.GetFirst997DataSegment();

                                bool bFileAccepted = true;

                                while (oSegment != null)
                                {
                                    nArea = oSegment.Area;
                                    sLoopSection = oSegment.LoopSection;
                                    sSegmentID = oSegment.ID;

                                    if (nArea == 1)
                                    {
                                        if (sLoopSection == "")
                                        {
                                            if (sSegmentID == "AK9")
                                            {
                                                if (oSegment.get_DataElementValue(1, 0) == "R")
                                                {
                                                    bFileAccepted = false;
                                                }
                                            }
                                        }   // sLoopSection == ""
                                    }   //nArea == 1

                                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oSegment.Next());  //oSegment = (ediDataSegment) oSegment.Next();
                                }   //oSegment != null

                                if (bFileAccepted)
                                {
                                    // All accepted EDI files are sent to the ACCEPTED folder and in their corresponding subfolders.
                                    File.Copy(sInboundPath + sEdiFile, sAcceptPath + "\\" + sEdiFileTranSetNo + "\\" + sEdiFileTranSetNo + "_" + dtEdiFileCreation.ToString("yyyyMMddHHmmss") + "_" + sEdiFile, true);

                                }
                                else
                                {
                                    File.Copy(sInboundPath + sEdiFile, sRejectPath + sEdiFileTranSetNo + "_" + dtEdiFileCreation.ToString("yyyyMMddHHmmss") + "_" + sEdiFile, true);
                                    InsertRejectedFile(sEdiFile, sRejectPath, "EDI_Rejected", sEdiFileTranSetNo, dtEdiFileCreation.ToString("yyyyMMddHHmmss"));
                                }

                                // Combine all EDI files.  This file will be read to create one 997 acknowledgment file for all incoming EDI files. 
                                using (Stream ediStream = File.OpenRead(sInboundPath + sEdiFile))
                                {
                                    ediStream.CopyTo(destStream);
                                }

                            } // if !bInbound997True 
                            else
                            {

                                File.Copy(sInboundPath + sEdiFile, s997Path + sEdiFileTranSetNo + "_" + dtEdiFileCreation.ToString("yyyyMMddHHmmss") + "_" + sEdiFile, true);

                            } // if bInbound997True 

                            if (File.Exists(sInboundPath + sPrevEdiFile))
                            {
                                File.Delete(sInboundPath + sPrevEdiFile);
                            }

                            sPrevEdiFile = sEdiFile;

                        } // foreach sEdiPathFile

                    } // using

                    // dispose old ack
                    oAck.Dispose();

                    // instantiate new ack for combined 997
                    oAck = (ediAcknowledgment)oEdiDoc.GetAcknowledgment();
                    oAck.EnableFunctionalAcknowledgment = true;

                    string sIsaControlNoBuff = "000000000" + sControlNumber.Trim();
                    string sIsaControlNo = sIsaControlNoBuff.Substring(sIsaControlNoBuff.Length - 9);

                    // Set the starting point of the control numbers in the acknowledgment
                    oAck.set_Property(AcknowledgmentPropertyIDConstants.PropertyAck_StartInterchangeControlNum, sIsaControlNo);
                    oAck.set_Property(AcknowledgmentPropertyIDConstants.PropertyAck_StartGroupControlNum, sControlNumber);
                    oAck.set_Property(AcknowledgmentPropertyIDConstants.PropertyAck_StartTransactionSetControlNum, 1);

                    oAck.set_Option(AcknowledgmentOptionIDConstants.OptAcknowledgment_ReportToSingleInterchange, 1);
                    oAck.set_Option(AcknowledgmentOptionIDConstants.OptAcknowledgment_ShowReportingLevel, 0);

                    //create combined acknowledgment
                    oEdiDoc.LoadEdi(sDestTempFile);

                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oEdiDoc.FirstDataSegment);

                    while (oSegment != null)
                    {
                        ediDataSegment.Set(ref oSegment, oSegment.Next());

                    }
                    oAck.Save(sOutboundPath + "997_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".X12");

                    //increment Interchange control number
                    sControlNumber = (Convert.ToInt32(sControlNumber) + 1).ToString();
                    sSql = @"UPDATE [Config] SET ControlNumber = @ControlNumber";
                    oDaConfig.UpdateCommand = new SqlCommand(sSql, oConnection);
                    oDaConfig.UpdateCommand.Parameters.AddWithValue("@ControlNumber", sControlNumber);
                    oDaConfig.UpdateCommand.ExecuteNonQuery();

                    oConnection.Close();

                    //Close oEdiDoc to release EDI file
                    oEdiDoc.Close();

                    File.Delete(sDestTempFile);

                    Cursor = System.Windows.Forms.Cursors.Default;

                    if (File.Exists(sInboundPath + sPrevEdiFile))
                    {
                        File.Delete(sInboundPath + sPrevEdiFile);
                    }
                    //tblMessage.Style.Add("display", "block");
                    //lblMessage.Text = "Done. " + nFileCount.ToString() + " file(s) received.";
                } // if sEdiPathFiles.Length
            }
            catch (Exception ex)
            {
                throw ex;
                LogLibrary.WriteErrorLog("Error = " + ex.Message);
            }
        }
Пример #3
0
        public static int Parse(Edi834DataAccess dbAccess,string content)
        {
            Extras.Logging log = new Extras.Logging();
            //string sEdiFile = ""; ;
            ediDocument oEdiDoc = null;
            //ediSchema oSchema = null;
            ediSchemas oSchemas = null;
            //ediInterchange oInterchange = null;
            //ediGroup oGroup = null;
            //ediTransactionSet oTransactionset = null;
            ediDataSegment oSegment = null;
            //ediAcknowledgment oAck = null;
               // ediWarning oWarning = null;
              //  ediWarnings oWarnings = null;
              //  Int32 nWarningsCount;
            string sPath = AppDomain.CurrentDomain.BaseDirectory;
            string sSefFile = "834_005010X220A1.SemRef.SEF";
            ediAcknowledgment oAck = null;

            //string sValue;
            //string sHlEntity = "";
            //string sNm1Entity = "";
            //string sQlfr;

            //CREATES EDIDOC OBJECT
            oEdiDoc = new ediDocument();
            oEdiDoc.EventNotify += new EventNotifyDelegate(oEdiDoc_EventNotify);
            //THIS MAKES CERTAIN THAT FREDI ONLY USES THE SEF FILE PROVIDED, AND THAT IT DOES
            //NOT USE ITS BUILT-IN STANDARD REFERENCE TABLE TO TRANSLATE THE EDI FILE.
            oSchemas = (ediSchemas)oEdiDoc.GetSchemas();
            oSchemas.EnableStandardReference = false;

            oAck = (ediAcknowledgment)oEdiDoc.GetAcknowledgment();
            oAck.EnableInterchangeAcknowledgment = true;

            //THIS OPTIONS STOPS FREDI FROM KEEPING ALL THE SEGMENTS IN MEMORY
            oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardOnly;

            //LOADS THE SEF FILE
            oEdiDoc.LoadSchema(sPath + sSefFile, SchemaTypeIDConstants.Schema_Standard_Exchange_Format);

            //LOADS THE EDI FILE
            oEdiDoc.LoadEdiString(content);

            //GETS THE FIRST DATA SEGMENT

            ediDataSegment.Set(ref oSegment, (ediDataSegment)oEdiDoc.FirstDataSegment);

            MsgHeader msg_header=null;
             MsgTrailer msg_trailer =null;
             Int64 msg_HeaderID = 0;
             Int64 msg_transID = 0;
            TransactionHeader trans_Header = null;
            TransactionTrailer trans_Trailer = null;
            Member.HealthCoverage health_coverage=null;
            Member.MemberReport member_report=null;
            Member msg_Member = null;
            while (oSegment != null)
            {
                sSegmentID = oSegment.ID;
                sLoopSection = oSegment.LoopSection;
                nArea = oSegment.Area;
               // Debug.WriteLine("segment id ="+ sSegmentID+"\t section ="+sLoopSection+" \t nArea= "+nArea+"\r\t");

                if (nArea == 0)
                {
                    if (sLoopSection == "")
                    {
                        if (sSegmentID == "ISA")
                        {
                            if (msg_header == null)
                                msg_header = new MsgHeader();
                            msg_header.InterchangeControlHeader=oSegment.get_DataElementValue(1, 0);
                            msg_header.AuthorizationInformation = oSegment.get_DataElementValue(2, 0);
                            msg_header.SecurityInformationQualifier = oSegment.get_DataElementValue(3, 0);
                            msg_header.SecurityInformation = oSegment.get_DataElementValue(4, 0);
                            msg_header.InterchangeIDQualifier_1 = oSegment.get_DataElementValue(5, 0);
                            msg_header.InterchangeSenderID = oSegment.get_DataElementValue(6, 0);
                            msg_header.InterchangeIDQualifier_2 = oSegment.get_DataElementValue(7, 0);
                            msg_header.InterchangeReceiverID = oSegment.get_DataElementValue(8, 0);
                            msg_header.IntegerchangeDate = oSegment.get_DataElementValue(9, 0);
                            msg_header.IntegerchangeTime = oSegment.get_DataElementValue(10, 0);
                            msg_header.RepetitionSeperator = oSegment.get_DataElementValue(11, 0);
                            msg_header.InterchangeControlVersionNumber = oSegment.get_DataElementValue(12, 0);
                            msg_header.InterchangeControlNumber_header = oSegment.get_DataElementValue(13, 0);
                            msg_header.AcknowledgementRequest = oSegment.get_DataElementValue(14, 0);
                            msg_header.UsageIdentifier = oSegment.get_DataElementValue(15, 0);
                            msg_header.ComponentElementSeparator = oSegment.get_DataElementValue(16, 0);

                        }
                        else if (sSegmentID == "GS")
                        {
                            if (msg_header == null)
                                msg_header = new MsgHeader();
                            msg_header.FunctionalGroupHeader_header=oSegment.get_DataElementValue(1,0);
                            msg_header.ApplicationSendersCode=oSegment.get_DataElementValue(2,0);
                            msg_header.ApplicationReceiversCode=oSegment.get_DataElementValue(3,0);
                            msg_header.Date=oSegment.get_DataElementValue(4,0);
                            msg_header.Time=oSegment.get_DataElementValue(5,0);
                            msg_header.GroupControlNumber_header=oSegment.get_DataElementValue(6,0);
                            msg_header.ResponsibleAgencyCode=oSegment.get_DataElementValue(7,0);
                            msg_header.IndustryIndentifierCode=oSegment.get_DataElementValue(8,0);
                            dbAccess.InsertNewMessageHeader(msg_header);        //insert it into the database;
                            msg_header = null;
                            msg_HeaderID = dbAccess.getHeaderID();              //get the header id;

                        }
                        else if (sSegmentID == "GE")
                        {
                            if (msg_trailer == null)
                                msg_trailer = new MsgTrailer();
                            msg_trailer.FunctionalGroupHeader_trailer = oSegment.get_DataElementValue(1, 0);
                            msg_trailer.GroupControlNumber_trailer = oSegment.get_DataElementValue(2, 0);
                        }
                        else if (sSegmentID == "IEA")
                        {
                            msg_trailer.InterchangeControlTrailer = oSegment.get_DataElementValue(1, 0);
                            msg_trailer.InterchangeControlNumber_trailer = oSegment.get_DataElementValue(2, 0);
                            dbAccess.insertNewMessageTrailer(msg_trailer,msg_HeaderID);
                            msg_trailer = null;
                        }
                        else
                        {
                            Debug.WriteLine("segment id ="+ sSegmentID+"\t section ="+sLoopSection+" \t nArea= "+nArea+" is  not  be recorded");
                        }
                    }
                }
                else if (nArea == 1)
                {
                    if (trans_Header == null)
                        trans_Header = new TransactionHeader();
                    if (sLoopSection == "")
                    {
                        if (sSegmentID == "ST")
                        {
                            trans_Header.HeaderID = msg_HeaderID;
                            trans_Header.TransactionSetIdentifier = oSegment.get_DataElementValue(1, 0);
                            trans_Header.TranscationSetControlNumber = oSegment.get_DataElementValue(2, 0);
                            trans_Header.ImplementationConventionReference = oSegment.get_DataElementValue(3, 0);
                        }
                        else if (sSegmentID == "BGN")
                        {
                            if (trans_Header == null)
                        trans_Header = new TransactionHeader();
                            trans_Header.TransactionSetPurposeCode = oSegment.get_DataElementValue(1, 0);
                            trans_Header.ReferenceIdentification_BS = oSegment.get_DataElementValue(2, 0);
                            trans_Header.Date = oSegment.get_DataElementValue(3, 0);
                            trans_Header.Time = oSegment.get_DataElementValue(4, 0);
                            trans_Header.ActionCode = oSegment.get_DataElementValue(5, 0);
                        }
                        else if (sSegmentID == "REF")
                        {if (trans_Header == null)
                        trans_Header = new TransactionHeader();
                            trans_Header.ReferenceIdentificationQualifier = oSegment.get_DataElementValue(1, 0);
                            trans_Header.ReferenceIdentification = oSegment.get_DataElementValue(2, 0);
                        }
                        else if(sSegmentID=="DTP")
                        {
                            //LOOP
                            EDIModel.TransactionHeader.FileDate file_date;
                            file_date.Date_TimeQualifier=oSegment.get_DataElementValue(1,0);
                            file_date.DateTimePeriodFormatQualifier=oSegment.get_DataElementValue(2,0);
                            file_date.DateTimePeriod=oSegment.get_DataElementValue(3,0);
                            trans_Header.FileEffectiveDate.AddLast(file_date);
                        }
                        else if (sSegmentID == "QTY")
                        {
                            EDIModel.TransactionHeader.TransactionSets trans_set;
                            trans_set.QuantityQualifier = oSegment.get_DataElementValue(1, 0);
                            trans_set.Quantity = oSegment.get_DataElementValue(2, 0);
                            trans_Header.TransactionSetControlTotals.AddLast(trans_set);

                        }

                    }
                    else if (sLoopSection == "N1")
                    {
                        if (sSegmentID == "N1" )
                        {
                            string EntityIdentifier = oSegment.get_DataElementValue(1, 0);
                            if (EntityIdentifier == "P5")
                            {
                                trans_Header.EntityIdentifierCode_Sponsor = oSegment.get_DataElementValue(1, 0);
                                trans_Header.Name_Sponsor = oSegment.get_DataElementValue(2, 0);
                                trans_Header.IdentificationCodeQualifier_Sponsor = oSegment.get_DataElementValue(3, 0);
                                //optional
                                trans_Header.IdentificationCode_Sponsor = oSegment.get_DataElementValue(4, 0);

                            }
                            else if (EntityIdentifier =="IN")
                            {
                                trans_Header.EntityIdentifierCode_Payer= oSegment.get_DataElementValue(1, 0);
                                trans_Header.Name_Payer = oSegment.get_DataElementValue(2, 0);
                                trans_Header.IdentificationCodeQualifier_Payer = oSegment.get_DataElementValue(3, 0);
                                trans_Header.IdentificationCode_Payer = oSegment.get_DataElementValue(4, 0);

                            }
                            else
                            {
                                //LOOP
                                EDIModel.TransactionHeader.TPABroker tpa_broker;
                                tpa_broker.EntityIdentityCode = oSegment.get_DataElementValue(1, 0);
                                tpa_broker.Name_TPA_Broker = oSegment.get_DataElementValue(2, 0);
                                tpa_broker.IdentificationCodeQualifier_TPA_Broker = oSegment.get_DataElementValue(3, 0);
                                tpa_broker.IdentificationCode_TPA_Broker = oSegment.get_DataElementValue(4, 0);
                                trans_Header.TPABrokerAccount.AddLast(tpa_broker);
                            }
                        }
                    }
                }

                else if (nArea == 2)
                {
                    if (trans_Header != null)
                    {
                        dbAccess.insertNewTransaction(trans_Header);    //insert the header into database
                        msg_transID = dbAccess.getTransactionID();
                        dbAccess.insertNewTransaction_FileDate(trans_Header.FileEffectiveDate, msg_transID);
                        dbAccess.insertNewTransaction_Sets(trans_Header.TransactionSetControlTotals, msg_transID);
                        dbAccess.insertNewTransaction_TPABroker(trans_Header.TPABrokerAccount, msg_transID);
                        trans_Header = null;
                    }
                    if (sLoopSection == "INS")
                    {
                        if (sSegmentID == "INS")
                        {
                            //Start to import the memeber information;
                            msg_Member = null;
                            msg_Member = new Member();
                            msg_Member.Yes_No_Condition = oSegment.get_DataElementValue(1, 0);
                            msg_Member.IndividualRelationshipCode = oSegment.get_DataElementValue(2, 0);
                            msg_Member.MaintenanceTypeCode_MLD = oSegment.get_DataElementValue(3, 0);
                            //Optional
                            msg_Member.MaintenanceReasonCode = oSegment.get_DataElementValue(4, 0);
                            msg_Member.BenefitStatusCode = oSegment.get_DataElementValue(5, 0);
                            //Optional
                            msg_Member.EmploymentStatusCode = oSegment.get_DataElementValue(8, 0);
                        }
                        else if (sSegmentID == "REF")
                        {
                            string SubscriberNumber = oSegment.get_DataElementValue(1, 0);
                            if (SubscriberNumber == "0F")
                            {
                                msg_Member.SubscriberNumber = oSegment.get_DataElementValue(1, 0);
                                //Optional
                                msg_Member.ReferenceNumber = oSegment.get_DataElementValue(2, 0);
                            }
                            else if (SubscriberNumber == "1L")
                            {
                                msg_Member.MemberPolicyNumber = oSegment.get_DataElementValue(1, 0);
                                msg_Member.ReferenceIdentification_MPM = oSegment.get_DataElementValue(2, 0);
                            }
                            else
                            {
                                //LOOP
                                EDIModel.Member.MemberIdentification member_Identification;
                                member_Identification.MemberIdentificationNumber = oSegment.get_DataElementValue(1, 0);
                                member_Identification.ReferenceIdentification = oSegment.get_DataElementValue(2, 0);
                                msg_Member.MemberIdentificationNumber.AddLast(member_Identification);
                            }
                        }
                        else if (sSegmentID == "DTP")
                        {
                            EDIModel.Member.MemberDate member_level_date;
                            //optional
                            member_level_date.Date_Time_Qualifier = oSegment.get_DataElementValue(1, 0);
                            //optional
                            member_level_date.Date_Time_Format = oSegment.get_DataElementValue(2, 0);
                            //optional
                            member_level_date.Date_Time_Period = oSegment.get_DataElementValue(3, 0);
                            msg_Member.MemberLevelDate.AddLast(member_level_date);
                        }
                        else if (sSegmentID == "LS")
                        {
                            msg_Member.LoopIdentifierCode = oSegment.get_DataElementValue(1, 0);
                        }
                        else if (sSegmentID == "LE")
                        {
                            msg_Member.LoopIdentifierCode = oSegment.get_DataElementValue(1, 0);

                        }

                    }
                    else if (sLoopSection == "")
                    {
                        if (sSegmentID == "SE")
                        {
                            //Insert into database;
                            if (health_coverage != null)
                            {
                                msg_Member.HealthCoverages.AddLast(health_coverage);
                                health_coverage = null;
                            }
                            if (member_report != null)
                            {
                                msg_Member.MemberReportingCategories.AddLast(member_report);
                                member_report = null;
                            }
                            dbAccess.insertNewMember(msg_Member, msg_transID);// insert the member into the database

                            if (trans_Trailer == null)
                                trans_Trailer = new TransactionTrailer();
                            trans_Trailer.NumberOfIncludedSegments = oSegment.get_DataElementValue(1, 0);
                            trans_Trailer.TransactionSetControlNumber = oSegment.get_DataElementValue(2, 0);
                            dbAccess.insertNewTransactionTrailer(trans_Trailer, msg_transID);
                            trans_Trailer = null;

                        }
                    }
                    else if (sLoopSection == "INS;NM1")
                    {
                        if (sSegmentID == "NM1")
                        {
                            msg_Member.EntityIdentifierCode_Member = oSegment.get_DataElementValue(1, 0);
                            msg_Member.EntityTypeQualifier_Member = oSegment.get_DataElementValue(2, 0);
                            msg_Member.NameLast = oSegment.get_DataElementValue(3, 0);
                            msg_Member.NameFirst = oSegment.get_DataElementValue(4, 0);
                            //optional
                            msg_Member.NameMiddle = oSegment.get_DataElementValue(5, 0);
                            msg_Member.IdentificationCodeQualifier = oSegment.get_DataElementValue(8, 0);
                            //optional
                            msg_Member.IdentificationCode = oSegment.get_DataElementValue(9, 0);
                        }
                        else if (sSegmentID == "PER")
                        {
                            msg_Member.ContactFunctionCode = oSegment.get_DataElementValue(1, 0);
                            //keep empty if not given
                            msg_Member.CommunicationNumberQualifier_1 = oSegment.get_DataElementValue(3, 0);
                            msg_Member.CommunicationNumber_1 = oSegment.get_DataElementValue(4, 0);
                            msg_Member.CommunicationNumberQualifier_2 = oSegment.get_DataElementValue(5, 0);
                            msg_Member.CommunicationNumber_2 = oSegment.get_DataElementValue(6, 0);
                            msg_Member.CommunicationNumberQualifier_3 = oSegment.get_DataElementValue(7, 0);
                            msg_Member.CommunicationNumber_3 = oSegment.get_DataElementValue(8, 0);
                        }
                        else if (sSegmentID == "N3")
                        {
                            //Keep Empty if not Given
                            msg_Member.AddressLine_1 = oSegment.get_DataElementValue(1, 0);
                            //optional
                            msg_Member.AddressLine_2 = oSegment.get_DataElementValue(2, 0);
                        }
                        else if (sSegmentID == "N4")
                        {
                            msg_Member.City = oSegment.get_DataElementValue(1, 0);
                            msg_Member.State = oSegment.get_DataElementValue(2, 0);
                            msg_Member.PostalCode = oSegment.get_DataElementValue(3, 0);
                            //Optional
                            msg_Member.LocationQualifier = oSegment.get_DataElementValue(5, 0);
                            //optional
                            msg_Member.LocationIdentifier = oSegment.get_DataElementValue(6, 0);
                        }
                        else if (sSegmentID == "DMG")
                        {
                            msg_Member.Date_Time_FormatQualifier_MD = oSegment.get_DataElementValue(1, 0);
                            msg_Member.Date_Time_Period_MD = oSegment.get_DataElementValue(2, 0);
                            msg_Member.GenderCode = oSegment.get_DataElementValue(3, 0);
                            //optional
                            msg_Member.MaritalStatusCode = oSegment.get_DataElementValue(4, 0);
                            msg_Member.CompositeRaceOrEthnicityInformation = oSegment.get_DataElementValue(5, 0);
                        }
                        else if (sSegmentID == "HLH")
                        {
                            //optional
                            msg_Member.HealthRelatedCode = oSegment.get_DataElementValue(1, 0);
                        }
                    }
                    else if (sLoopSection == "INS;HD")
                    {
                        if (sSegmentID == "HD")
                        {
                            //LOOP Class
                            if (health_coverage == null)
                                health_coverage = new Member.HealthCoverage();
                            else
                            {
                                msg_Member.HealthCoverages.AddLast(health_coverage);
                                health_coverage = new Member.HealthCoverage();
                            }
                            health_coverage.MaintenanceTypeCode = oSegment.get_DataElementValue(1, 0);
                            health_coverage.InsuranceLineCode = oSegment.get_DataElementValue(3, 0);
                            //should set to be empty
                            health_coverage.PlanCoverageDescription = oSegment.get_DataElementValue(4, 0);
                        }
                        else if (sSegmentID == "DTP")
                        {
                            EDIModel.Member.HealthCoverage_Dates health_date;
                            health_date.Date_Time_Qualifier = oSegment.get_DataElementValue(1, 0);
                            health_date.Date_Time_FormatQualifier_HCD = oSegment.get_DataElementValue(2, 0);
                            health_date.Date_Time_Period_HCD = oSegment.get_DataElementValue(3, 0);
                            health_coverage.HealthCoverageDates.AddLast(health_date);
                        }
                        else if (sSegmentID == "REF")
                        {
                            EDIModel.Member.HealthPolicyNum policy_num;
                            policy_num.ReferenceIdentificationQualifier = oSegment.get_DataElementValue(1, 0);
                            policy_num.ReferenceIdentification = oSegment.get_DataElementValue(2, 0);
                            health_coverage.PolicyNumber.AddLast(policy_num);
                        }
                    }
                    else if (sLoopSection == "INS;LX")
                    {
                        if (sSegmentID == "LX")
                        {
                            if (member_report == null)
                                member_report = new Member.MemberReport();
                            else
                            {
                                msg_Member.MemberReportingCategories.AddLast(member_report);
                                member_report = new Member.MemberReport();
                            }
                            member_report.AssignedNumber = oSegment.get_DataElementValue(1, 0);
                        }
                    }
                    else if (sLoopSection == "INS;LX;N1")
                    {
                        if (sSegmentID == "N1")
                        {
                            member_report.EntityIdentifierCode = oSegment.get_DataElementValue(1, 0);
                            member_report.Name = oSegment.get_DataElementValue(2, 0);
                        }
                        else if (sSegmentID == "REF")
                        {
                            member_report.ReferenceIdentificationQualifier = oSegment.get_DataElementValue(1, 0);
                            member_report.ReferenceIdentification = oSegment.get_DataElementValue(2, 0);
                        }
                    }
                }
             ediDataSegment.Set(ref oSegment, (ediDataSegment)oSegment.Next());
            }
            //dbAccess.getHeaderTrailerID();
            //Console.ReadKey();
            string sFileName = "TA1_834_X220A1_" +
                    System.DateTime.Now.Year.ToString() +
                    System.DateTime.Now.Month.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Day.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Hour.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Minute.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Second.ToString().PadLeft(2, '0') + ".txt";
            oAck.Save(DIR_TA1_OUT+ sFileName);
            oSchemas.Dispose();
            oEdiDoc.Dispose();
            return 0;
        }
Пример #4
0
        public static int Run()
        {
            dbAccess = new Edi834DataAccess();
            Extras.Logging log = new Extras.Logging();

            string sEdiFile = ""; ;
            ediDocument oEdiDoc = null;
            ediSchema oSchema = null;
            ediSchemas oSchemas = null;
            ediInterchange oInterchange = null;
            ediGroup oGroup = null;
            ediTransactionSet oTransactionset = null;
            ediDataSegment oSegment = null;
            //  ediAcknowledgment oAck = null;
            // ediWarning oWarning = null;
            //  ediWarnings oWarnings = null;
            string sPath = AppDomain.CurrentDomain.BaseDirectory;
            string sSefFile = "834_005010X220A1.SemRef.SEF";
            string InterchangeControlNumber = "0000000000"; //For temp testing purpose
            DataTable dt = dbAccess.GetEnrollmentData();
            string sDate = DateTime.Now.ToString("yyyyMMdd");
            string sTime = DateTime.Now.ToString("HHmm");
            try
            {

                string fileLastName = ""; // Used to ensure that no more than 1 edi message is generated a second when batching (which we never seem to do; but this prepares us)

                // This ensures that the batch file names are unique by making sure that only one file name is generated per second
                // However, the performance hit on ImportSchemas seems to limit it as well
                while (fileLastName == (sEdiFile = "834_X220A1_" +
                    System.DateTime.Now.Year.ToString() +
                    System.DateTime.Now.Month.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Day.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Hour.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Minute.ToString().PadLeft(2, '0') +
                    System.DateTime.Now.Second.ToString().PadLeft(2, '0') + ".txt"))
                {
                    System.Threading.Thread.Sleep(100);
                }
                fileLastName = sEdiFile;

                // Create the new EDI_SndMsg Record
                //InterchangeControlNumber = dbAccess.AddMsg(oFacility.FacilityID, "", sEdiFile, 0);

                #region Create Edi document
                oEdiDoc = new ediDocument();

                // Change the cursor type from dynamic to forward to improve speed performance
                oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardWrite;

                // Disable the internal standard reference library to be memory effecient
                oSchemas = oEdiDoc.GetSchemas();
                oSchemas.EnableStandardReference = false;

                // Load the SEF file
                oSchema = oEdiDoc.ImportSchema(sPath + sSefFile, 0);

                // Set termintors
                oEdiDoc.SegmentTerminator = "~";
                oEdiDoc.ElementTerminator = "*";
                oEdiDoc.CompositeTerminator = ":";
                #endregion Create Edi document

                #region Create File Header
                // ISA Interchange Control Header Segment
                ediInterchange.Set(ref oInterchange, (ediInterchange)oEdiDoc.CreateInterchange("X", "005010")); // 5010 Change
                ediDataSegment.Set(ref oSegment, (ediDataSegment)oInterchange.GetDataSegmentHeader());
                oSegment.set_DataElementValue(1, 0, Valence.ISASegment.InfoQualifier);     //Authorization Information Qualifier
                oSegment.set_DataElementValue(2, 0, "          ");     //Authorization Information
                oSegment.set_DataElementValue(3, 0, Valence.ISASegment.InfoQualifier);     //Security Information Qualifier
                oSegment.set_DataElementValue(4, 0, "          ");     //Security Information
                oSegment.set_DataElementValue(5, 0, Valence.ISASegment.InterchangeIDQualifier);     //Interchange ID Qualifier
                oSegment.set_DataElementValue(6, 0, "582335921".PadRight(15, ' '));     //Interchange Sender ID
                oSegment.set_DataElementValue(7, 0, Valence.ISASegment.InterchangeIDQualifier);     //Interchange ID Qualifier
                oSegment.set_DataElementValue(8, 0, "582335921".PadRight(15, ' '));     //Interchange Receiver ID
                oSegment.set_DataElementValue(9, 0, sDate.Substring(2));     //Interchange Date
                oSegment.set_DataElementValue(10, 0, sTime);     //Interchange Time
                oSegment.set_DataElementValue(11, 0, "^");     //Interchange Control Standards Identifier
                oSegment.set_DataElementValue(12, 0, "00501");     //Interchange Control Version Number // 5010 Change
                oSegment.set_DataElementValue(13, 0, InterchangeControlNumber);     //Interchange Control Number
                oSegment.set_DataElementValue(14, 0, "1");     //Acknowledgment Requested
                //oSegment.set_DataElementValue(15, 0, InstaMed.ISASegment.Environment.Testing);     //Usage Indicator
                //oSegment.set_DataElementValue(15, 0, InstaMed.ISASegment.Environment.Production);     //Usage Indicator
                oSegment.set_DataElementValue(15, 0, ConfigurationManager.AppSettings["Environment"]);     //Usage Indicator
                oSegment.set_DataElementValue(16, 0, ":");     //Component Element Separator

                // GS Functional Group Header Segment
                ediGroup.Set(ref oGroup, (ediGroup)oInterchange.CreateGroup("005010X220A1"));// 5010 Change
                ediDataSegment.Set(ref oSegment, (ediDataSegment)oGroup.GetDataSegmentHeader());
                oSegment.set_DataElementValue(1, 0, Valence.GSSegment.FunctionalIdentifierCode);     //Functional Identifier Code
                oSegment.set_DataElementValue(2, 0, "582335921");     //Application Sender's Code
                oSegment.set_DataElementValue(3, 0, "582335921");     //Application Receiver's Code
                oSegment.set_DataElementValue(4, 0, sDate);     //Date
                oSegment.set_DataElementValue(5, 0, sTime);     //Time
                oSegment.set_DataElementValue(6, 0, Valence.GSSegment.GroupControlNumber);     //Group Control Number
                oSegment.set_DataElementValue(7, 0, "X");     //Responsible Agency Code
                oSegment.set_DataElementValue(8, 0, "005010X220A1");     //Version / Release / Industry Identifier Code // 5010 Change
                #endregion Create File Header

                int count=0;
                foreach (DataRow dr in dt.Rows)
                {
                    if (!validateData(dr))
                        continue;
                    #region LOOP ID - 2000 Member Level Detail
                    Member oMember = setupMember(dr);
                    if (oMember == null) // Status = General error/invaid claim
                    {
                        //dbAccess.UpdateClaimStatus(Convert.ToInt32(dsClaims.Tables[0].Rows[iClaim]["EDIClaimID"].ToString()), cCLAIMSTATUS_ERRORGENERAL, InterchangeControlNumber);
                        log.writeToAppLog("INVALID CLAIM", "Updating status to errored.  Enrollment is missing required fields.\t\n" + dr["PolicyID"] + "\t" + dr["LastName"] + "\t" + dr["FirstName"] + "\t" + dr["MiddleName"] + "\t" + dr["SSN"] + "\t" + dr["Phone"] + "\t" + dr["Address"] + "\t" + dr["City"] + "\t" + dr["State"] + "\t" + dr["Zip"] + "\t" + dr[" DOB"] + "\t" + dr["Gender"] + "\t" + dr["PlanName"] + "\t" + dr["StartDate"] + "\r\n", "", "");
                        continue;
                    }

                    ediTransactionSet.Set(ref oTransactionset, (ediTransactionSet)oGroup.CreateTransactionSet("834"));
                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.GetDataSegmentHeader());
                    oSegment.set_DataElementValue(1, 0, "834");     //Transaction Set Identifier Code
                    count++;
                    oSegment.set_DataElementValue(2, 0,count+"" );     //Transaction Set Control Number
                    oSegment.set_DataElementValue(3, 0, "005010X220A1");
                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("BGN"));
                    oSegment.set_DataElementValue(1, 0, "00");     //"00"-Original
                    oSegment.set_DataElementValue(2, 0, "12345"); //An ID for this transaction set, need to be generated
                    oSegment.set_DataElementValue(3, 0, sDate);
                    oSegment.set_DataElementValue(4, 0, sTime);
                    oSegment.set_DataElementValue(5, 0, "CT");//Time Zone
                    oSegment.set_DataElementValue(8, 0, ConfigurationManager.AppSettings["ActionCode"]); //2-Change, 4-Verify, RX-Replace

                    //ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("REF"));
                    //oSegment.set_DataElementValue(1, 0, "38");
                    //oSegment.set_DataElementValue(2, 0, "ALL");

                    #region LOOP ID - 1000A Sponsor Name
                    //N1 Plan Sponsor
                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("N1\\N1"));
                    oSegment.set_DataElementValue(1, 0, "P5"); //P5-Plan Sponsor
                    oSegment.set_DataElementValue(2, 0, "Alliant Health Plans");//Free-form Name
                    oSegment.set_DataElementValue(3, 0, "FI");          //Frderal Tax ID
                    oSegment.set_DataElementValue(4, 0, "582335921");
                    #endregion

                    #region LOOP ID - 1000B Payer Name
                    //N1 Plan Sponsor
                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("N1\\N1"));
                    oSegment.set_DataElementValue(1, 0, "IN"); //IN-Insurer
                    oSegment.set_DataElementValue(2, 0, "PHR");
                    oSegment.set_DataElementValue(3, 0, "FI");//Frderal Tax ID
                    oSegment.set_DataElementValue(4, 0, "582335921");
                    #endregion

                    #region LOOP ID - 1000C Broker Name
                    //ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("N1\\N1"));
                    //oSegment.set_DataElementValue(1, 0, "BO"); //BO-Broker
                    //oSegment.set_DataElementValue(2, 0, ""); //Broker Name
                    //oSegment.set_DataElementValue(1, 0, "94"); //94-National Producer Number (NPN)
                    //oSegment.set_DataElementValue(2, 0, ""); //Broker NPN
                    #endregion

                    //// HL Counters for loops
                    //int nHlCounter = 1;
                    //int nHlSubscriberParent = 1;
                    //int nHlDependentParent = 0;

                    //Subscriber
                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\INS"));
                    oSegment.set_DataElementValue(1, 0, oMember.Yes_No_Condition);
                    oSegment.set_DataElementValue(2, 0, oMember.IndividualRelationshipCode);  //18-Self
                    oSegment.set_DataElementValue(3, 0, oMember.MaintenanceTypeCode_MLD);//021-Addition
                    /*INS03 Maintainance Type
                    001 = Change (change existing record)
                    021 = Addition (used to add subscriber or dependent)
                    024 = Cancellation or Termination
                    025 = Reinstatement
                    030 = Audit or Compare (BGN08 = 4 or RX)*/
                    oSegment.set_DataElementValue(4, 0,oMember.MaintenanceReasonCode); //Maintainance Reason, leave blank
                    oSegment.set_DataElementValue(5, 0, oMember.BenefitStatusCode);
                    /*INS05 Benefit Status Code
                    A = Active
                    C = Cobra
                    S = Surviving Insured
                    T = Tax Equity and Fiscal Responsibility Act (TEFRA)
                    */
                    oSegment.set_DataElementValue(8, 0, oMember.EmploymentStatusCode);  //FT- Full-time

                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\REF"));
                    oSegment.set_DataElementValue(1, 0, oMember.SubscriberNumber);      //OF-Subscriber Number
                    oSegment.set_DataElementValue(2, 0, oMember.ReferenceNumber);

                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\REF"));
                    oSegment.set_DataElementValue(1, 0, oMember.MemberPolicyNumber);      //1L-Group
                    oSegment.set_DataElementValue(2, 0, oMember.ReferenceIdentification_MPM);

                    foreach(EDIModel.Member.MemberIdentification identification in oMember.MemberIdentificationNumber)
                    {
                        ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\REF"));
                        oSegment.set_DataElementValue(1, 0, identification.MemberIdentificationNumber);      //23-Person Code
                        oSegment.set_DataElementValue(2, 0, identification.ReferenceIdentification);      //Reference Identification
                    }

                    #region LOOP ID - 2100A Member Name
                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\NM1\\NM1"));
                    oSegment.set_DataElementValue(1, 0, oMember.EntityIdentifierCode_Member);      //IL-Insured or Subscriber
                    oSegment.set_DataElementValue(2, 0,oMember.EntityTypeQualifier_Member);       //1 -Person
                    oSegment.set_DataElementValue(3, 0, oMember.NameLast);        //indiviual last name
                    oSegment.set_DataElementValue(4, 0, oMember.NameFirst);
                    oSegment.set_DataElementValue(5, 0, oMember.NameMiddle);
                    oSegment.set_DataElementValue(8, 0, oMember.IdentificationCodeQualifier);          //34-Social Security Number
                    oSegment.set_DataElementValue(9, 0, oMember.IdentificationCode);

                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\NM1\\PER"));
                    oSegment.set_DataElementValue(1, 0, oMember.ContactFunctionCode);          //IP -Insured Party
                    oSegment.set_DataElementValue(3, 0, oMember.CommunicationNumberQualifier_1);          //Telephone
                    oSegment.set_DataElementValue(4, 0, oMember.CommunicationNumber_1);
                    oSegment.set_DataElementValue(5, 0, oMember.CommunicationNumberQualifier_2);
                    oSegment.set_DataElementValue(6, 0, oMember.CommunicationNumber_2);
                    //oSegment.set_DataElementValue(5, 0, "TE");          //Communication  Number Qualifier TE - Telephone

                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\NM1\\N3"));
                    oSegment.set_DataElementValue(1, 0, oMember.AddressLine_1);
                    oSegment.set_DataElementValue(2, 0, oMember.AddressLine_2);

                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\NM1\\N4"));
                    oSegment.set_DataElementValue(1, 0, oMember.City);
                    oSegment.set_DataElementValue(2, 0, oMember.State);
                    oSegment.set_DataElementValue(3, 0, oMember.PostalCode);

                    ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\NM1\\DMG"));
                    oSegment.set_DataElementValue(1, 0, oMember.Date_Time_FormatQualifier_MD);          //D8 - Date Expressed in Format CCYYMMDD
                    oSegment.set_DataElementValue(2, 0, oMember.Date_Time_Period_MD);
                    oSegment.set_DataElementValue(3, 0, oMember.GenderCode);

                    #endregion LOOP 2100a

                     #region LOOP ID - 2300 Health Coverage

                    foreach (Member.HealthCoverage hc in oMember.HealthCoverages )
                    {
                        ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\HD\\HD"));
                        oSegment.set_DataElementValue(1, 0,hc.MaintenanceTypeCode );     //021- Addition
                        oSegment.set_DataElementValue(3, 0, hc.InsuranceLineCode);         //HLT -Health
                        oSegment.set_DataElementValue(4, 0, hc.PlanCoverageDescription);
                      //  oSegment.set_DataElementValue(5, 0, "IND");         //IND- Individual

                        foreach(Member.HealthCoverage_Dates  date in hc.HealthCoverageDates)
                        {
                            ediDataSegment.Set(ref oSegment, (ediDataSegment)oTransactionset.CreateDataSegment("INS\\HD\\DTP"));
                            oSegment.set_DataElementValue(1, 0, date.Date_Time_Qualifier);         //348-Benefit Begin
                            oSegment.set_DataElementValue(2, 0, date.Date_Time_FormatQualifier_HCD);
                            oSegment.set_DataElementValue(3, 0, date.Date_Time_Period_HCD);
                        }
                    }
                    #endregion LOOP 2300

                    #endregion LOOP 2000
                }

                oEdiDoc.Save(DIR_Valence_Out + sEdiFile);

                oEdiDoc.Dispose();
            }//try

            catch (Exception ex)
            {
                log.writeToAppLog("ERROR", ex.ToString() + "r\n", "", "");
                throw new Exception(ex.ToString());

            }
            return 0; // return Total Number of Claims
        }