Я ищу несколько предложений о лучших подходах к обработке сценария с чтением файла в C #; конкретный сценарий - это то, с чем большинство людей не были бы знакомы, если бы вы не занимались здравоохранением, поэтому я сначала дам краткое объяснение.
Я работаю в плане медицинского обслуживания, и мы получаем жалобы от врачей несколькими способами (EDI, бумага и т. Д.). Бумажная форма для стандартных медицинских требований - это форма "HCFA" или "CMS 1500". Некоторые из наших врачей по контракту используют программное обеспечение, которое позволяет генерировать свои претензии и сохранять их в «макете» HCFA, но в текстовом файле (так что вы можете подумать, что это бумажная форма, но без фона / коробок / и т.д. ). Я приложил изображение фиктивного файла претензий, в котором показано, как это будет выглядеть.
Информация о претензии в настоящее время извлекается из текстовых файлов и преобразуется в XML. Весь процесс работает нормально, но я бы хотел сделать его лучше и проще в обслуживании. Существует одна серьезная проблема, которая относится к сценарию: каждый кабинет врача может предоставить нам эти текстовые файлы в несколько разных форматах. Это означает, что у доктора A может быть имя пациента в строке 10, начиная с символа 3, в то время как доктор B может отправить файл, имя которого начинается в строке 11 с символа 4, и так далее. Да, то, что мы должны делать, - это применение стандартной схемы, которой должны придерживаться все врачи, которые желают представить таким образом. Однако руководство заявило, что мы (разработчики) должны сами использовать разные возможности и что мы не можем просить их сделать что-то особенное, поскольку они хотят поддерживать хорошие отношения.
В настоящее время существует «таблица сопоставления», в которой по одному ряду для каждого кабинета врача. В таблице есть столбцы для каждого поля (например, имя пациента, идентификационный номер участника, дата рождения и т. Д.). Каждый из них получает значение на основе первого файла, который мы получили от доктора (мы вручную настроили карту). Таким образом, столбец PATIENT_NAME может быть определен в таблице сопоставления как «10,3,25», что означает, что имя начинается со строки 10, с символа 3, и может иметь длину до 25 символов. Это был болезненный процесс, как с точки зрения (а) создания карты для каждого врача - это утомительно, так и (б) ремонтопригодности, так как иногда они внезапно меняют свой макет, а затем нам приходится заново отображать все для этого врача .
Файл читается построчно, и каждая строка добавляется к
List<string>
Как только это будет сделано, мы сделаем следующее, где мы получим данные карты, прочитаем список строк файла и получим значения полей (напомним, что каждое сопоставленное поле имеет значение типа «10,3,25» ( без кавычек)):
ClaimMap M = ClaimMap.GetMapForDoctor(17);
List<HCFA_Claim> ClaimSet = new List<HCFA_Claim>();
foreach (List<string> cl in Claims) //Claims is List<List<string>>, where we have a List<string> for each claim in the text file (it can have more than one, and the file is split up into separate claims earlier in the process)
{
HCFA_Claim c = new HCFA_Claim();
c.Patient = new Patient();
c.Patient.FullName = cl[Int32.Parse(M.Name.Split(',')[0]) - 1].Substring(Int32.Parse(M.Name.Split(',')[1]) - 1, Int32.Parse(M.Name.Split(',')[2])).Trim();
//...and so on...
ClaimSet.Add(c);
}
Извините, что это так долго ... но я чувствовал, что некоторые предпосылки / объяснения были необходимы. Есть ли лучшие / более творческие способы сделать что-то подобное?