- PVSM.RU - https://www.pvsm.ru -

На Хабре есть серия статей, касающаяся заблуждений программистов о, казалось бы, простых вещах: о времени [1], почтовых адресах [2], именах [3] и даже дверях. Я недавно пообщался с ребятами, пилящими медицинский софт, и решил собрать набор таких же заблуждений, только применительно к врачебному делу. А чтобы было чуть интереснее, собрал это в виде истории, которой позавидует любой индийский фильм или турецкий сериал.
Итак, перед нами молодой джун Игорь (здесь и далее все имена и фамилии вымышлены), который работает в компании, разрабатывающей софт для больниц. Его только что отправили разгребать легаси-код для ПО, установленного во множестве родильных домов. Одновременно в больницу поступила Елена Соколова, благополучно беременная двойней - будущий кармический спутник Игоря. Но не в романтическом смысле - просто благодаря Елене наш Игорь пройдет через множество Edge-случаев...
Елене повезло: несмотря на то, что роды пришлись на Новый Год, персонал был сосредоточен и крайне аккуратен (ну и, разумеется, трезв). Родилось два мальчика, вот только один родился в 23:59 31 декабря одного года, а второй - в 01 минуту 1 января следующего года. Мама была счастлива и настояла, чтобы даты рождения у близнецов были фактические. А у Игоря тут же упала валидация базы - потому что не бывает такого, чтобы у близнецов были разные года рождения.

Дальше Игорь выяснил еще одну интересную особенность: поскольку имя ребенка может появляться далеко не сразу (в России дается месяц на получение свидетельства о рождении), сам роддом формирует справку "Истории развития новорождённого", где имя вообще не фигурирует и заполняется она на данных матери. Однако многие медицинские информационные системы (МИС) имеют поле "имя" (пусть и имеющее флаг временного), которое надо как-то заполнять.
На первых порах персонал выкручивается простым "Новорожденный Соколовой" и правит данные, как только родственники приносят документы. Но иногда отмечание может затянуться (или оформить документы просто некому) и изначальная запись так и висит в базе. Всего Игорь насчитал более 20 таких записей.

Кстати, возможны случаи, когда ребёнок поступает как найдёныш - в этом случае законодательно предусмотрен отдельный документ: "Об обнаружении ребенка", где фиксируются время, место и обстоятельства нахождения. И отдельно форма "Документ, подтверждающий возраст и пол ребёнка". Заметьте, пол - отдельной бумажкой. Потому что иногда и это под вопросом и не факт, что это сразу удается установить. Имя в итоге назначает орган опеки.
Но это крайний случай. Куда интереснее промежуточный: в соседней палате с Еленой лежит женщина, которую привезли после аварии - без сознания, без документов, но беременную на последнем сроке. Персонал принимает решение о спасении плода, проводит кесарево и фиксирует факт рождения нового человека. Ребёнок есть, мать биологически известна, юридически - нет. В системе факт родов зафиксирован, но регистрация использует временные данные, пока мать не придет в себя, или пока полиция не установит личность. Т.е. "mother_id" есть, но он временный.
А еще есть интересный нюанс, связанный с недоношенностью: педиатры считают возраст недоношенных детей иначе: не от даты рождения, а от предполагаемой даты доношенных родов. Родился на 26-й неделе вместо 40-й - значит, в свои четыре месяца физиологически развит как двухмесячный. Это называется корригированный возраст. Часть медицинских информационных систем это не учитывает и хранит только одну дату рождения (что, как бы, естественно), считая нормативы по росту и весу от неё - и честно выдает алармы там, где тревоги нет.
Ну и финальное: в некоторых азиатских странах возраст считается [4] от предполагаемой даты зачатия, а Южная Корея до 2023 года вообще считала, что ребенок рождается годовалым, и это напрочь ломало какую-либо попытку синхронизации с международными базами.
Проходит несколько лет. Елена подает документы в садик и выясняется, что поскольку ее близнецы имеют разные года рождения, гос.системы относит их в разные наборы.

Пытаясь исправить ситуацию, Елена подает документы на "младшего" близнеца, чтобы отвести его в сад со старшим. Проблема начинается, как только Елене потребовалось указать количество детей. И разбираться с этим кейсом снова пришлось Игорю - он как раз "удачно" сменил место работы.
Итак, выясняется, что банальное поле "количество детей" может сильно разниться от того, в каком случае или какая организация формируется запрос. Чтобы было понятнее, давайте сильнее погрузимся в биографию Елены:
Вышла замуж в 21 год. Сменив фамилию с «Мамаевой» на «Королёву».
Во время замужества у неё случился выкидыш.
После длительного обсуждения Елена с мужем решилась на усыновление ребенка.
К сожалению, это не спасло брак и привело к разводу. Приемный ребенок остался с Еленой.
В 28 лет Елена встретила другого хорошего человека и вышла замуж повторно, взяв фамилию Соколовой.
В 29 Елене удалось забеременеть и родить ту самую двойню из первой части.
А теперь представим себя на месте Игоря. Какое количество детей должна указывать система в графе "количество детей"?
Учитывать ли выкидыши? В мед.карточке - да, в опросе работодателя, явно нет. Отдельная тема - мертворожденные. Т.е. с определенной недели беременности, плод уже считается человеком. При таком печальном случае [5], по просьбе родителей выдается документ, подтверждающий факт государственной регистрации рождения мертвого ребенка, но не выдается свидетельство о смерти. В итоге в БД ребенок как бы родился, но не умер, и свидетельства о рождении у него нет.
Учитывать ли приемных? Юридически - да. А для мед.карточки, т.е биологически, вероятно, что нет.
А если женщина была суррогатной матерью или у нее были отобраны родительские права? Юридически - нет, биологически - да.
Дополним это фактом смены фамилии, чем еще сильнее затрудним Игорю консолидацию информации.
Пока Елена разбиралась с документами близнецов, ее приемный сын, появившийся в первом браке, пошел в школу. Тут выяснилась еще одна интересная особенность - электронные дневники часто бывают привязаны к двум учеткам - женской (мать) и мужской (отец). Как только первый муж Елены, желающий сохранить отношение с ребенком, захотел тоже видеть его оценки - система его не пустила, т.к. второго "отца" в ней быть не может. В ряде систем существует вариант с типом учетки "опекун", но они либо замещают типы "отец/мать" либо имеют меньшие права чем "настоящие родители". В итоге отцу пришлось договариваться с новым мужем Елены, который уступил свое право "системного отцовства" и узнавал об успеваемости через аккаунт Елены.

Кстати, по поводу количества родителей - в Канаде у ребенка законодательно может быть 3 родителя. Причем, это скорее результат судебных решений и присутствует на уровне отдельных провинций и юрисдикций (в Штатах такое разрешено в Калифорнии). Представляете, как веселились программисты, добавляя эту опцию в базы и валидаторы?
Прошли годы. Игорь снова сменил место работы, вернувшись в разработку МИС. И снова он столкнулся с Еленой, точнее с ее первым мужем, который окончательно разочаровался в женщинах и сменил пол (да, эти кейсы все еще отдают индийским кино).

Несмотря на то, что с 2023-го года в нашей стране медицински такие переходы не делаются, остается целая группа людей, сделавших их ранее или приехавшая в страну после изменений. Соответственно, они могут иметь заболевания, физически невозможные для новых гендеров. И условный доктор не может выбрать в МИС для "женщины" диагноз типа "гиперплазия предстательной железы", потому что такое невозможно на уровне системы.
Вообще, тема смены пола – это совершеннейшая засада для программистов. В европейских странах и США регулярно возникают скандалы с рассылкой приглашений на обследование всем женщинам и не приходящие людям сменившим пол на женский. потому что в системе фигурирует биологический пол, а поле «юридический гендер» поддерживается далеко не всеми МИС. И там, в юридическом гендере, может быть такое многообразие, что настроить корректную логику оповещений – та еще задача со звездочкой.
Но вернемся к Елене. Её приемный сын достиг 18-летия и получил «взрослую» медицинскую карту. Бонусом он получил запись о наследственных болезнях от приемных родителей, потому что юридически именно они закреплены как его родственники и именно их карты метчатся (если вообще метчатся).
И если ранее в его карте в графе «отец» и «мать» болезни могли числиться как неизвестные, то сейчас они наследуются от юридических родителей. Соответственно, скоринг наследственных заболеваний не выдает никаких алармов или выдает ложные.
Елена Соколова, урожденная Дейнерис Мамаева, бывшая Королёва - мать двоих биологических детей (один из которых юридически родился в другом году), одного приёмного (чьи наследственные болезни в базе числятся за людьми, не имеющими отношения к нему биологически) и всяческие осложнения в мед. истории - стоит в очереди в ЗАГС.
Игорь, который к этому моменту успел поработать в трех компаниях, разгрести четыре легаси-системы и выучить наизусть ФЗ «Об актах гражданского состояния», сидит в соседнем здании и не знает, что именно сейчас он снова проигрывает. Потому что Елена (барабанная дробь!) задумала сменить имя.
До встречи в новом сезоне…
p.s. как уже говорилось выше, этот текст сформирован на основе рассказов коллег-программистов, разрабатывающих медицинский софт в разных странах и юрисдикциях. Как автор, я буду благодарен, если вы, как разработчики такого софта, укажете на возможные неточности в комментариях или наоборот - расскажете о своих edge-случаях.
Размещайте облачную инфраструктуру и масштабируйте сервисы с надежным облачным провайдером Beget.
Эксклюзивно для читателей Хабра мы даем бонус 10% при первом пополнении.
Автор: beget_com
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/453856
Ссылки в тексте:
[1] о времени: https://habr.com/ru/articles/703360/
[2] почтовых адресах: https://habr.com/ru/articles/691088/
[3] именах: https://habr.com/ru/articles/431866/
[4] возраст считается: https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B0%D0%B7%D0%B8%D0%B0%D1%82%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D1%87%D1%91%D1%82_%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%B0
[5] печальном случае: https://www.consultant.ru/document/cons_doc_LAW_16758/2c46187954293c8c055d7297dd99877b78efd237/
[6] Воспользоваться: https://beget.com/ru?habr_promo&utm_source=habr&utm_campaign=habr_cashback&utm_content=site_beget_main
[7] Источник: https://habr.com/ru/companies/beget/articles/1051252/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1051252
Нажмите здесь для печати.