Связывание данных. Постановка задачи.
Дано:
1. Массив данных, введенный на основании прайс-листов, накладных и т. д. - ассортимент ("А").
2. Массив данных, описывающих лексредства (ЛС) на основании сведений, изложенных в официальных документах МЗ - Государственный Реестр (Р)
Задача: связать каждую строку "А" со строкой из "Р".
Почему это можно сделать в
принципе?
Предполагается, что перед
попаданием в торговую сеть все лекарства
проходят процесс регистрации и,
следовательно, должны быть описаны в "Р".
Отсекаем лишнее.
В "А" будут
не только ЛС, но и позиции, которых в
принципе не будет в "Р" - парафармацевтика,
медтехника и т.д. Их желательно
выбросить до начала привязки, используя
соответствующий признак.
В "Р" также есть
позиции, которых наверняка не будет в прайс-листах, например, препараты,
аннулированные более 10 лет тому назад.
Порядок цифр.
Ассортимент производителя - 200-400 позиций,
аптеки - 1000-3000 наименований, оптовика - до
4000-5000, интегратора прайс-листов - 10 000- 15 000 позиций.
В реестре цен - 5000 строк, в реестре
лексредств 12 500 упаковок со штрих-кодами, а
всего - около 140 000 упаковок.
Предположим, что в результате предварительной обработки в "А" остались только те позиции, которые должны быть в "Р", а из "Р" убрано все лишнее. Каковы возможные результаты поиска экспертом, который точно знает, что с недавних пор Аспирин Упса и Упсарин - это одно и то же?
1. Однозначная привязка (1:1). Строка из "А" точно привязывается к строке из "Р". Эта ситуация чаще всего будет встречаться для зарубежных препаратов.
2. Привязка 1:N, когда строке из "А" соответствует несколько строк из "Р". Информации не хватает. Чаще всего это будет для России из-за недостаточной информации по упаковке и, особенно, в случае отсутствия информации по заводу.
3. Привязка 1:0.5. Есть похожее , но что-то не совпадает по существенным признакам (в "А" N10, а "Р" только N20). Это может быть в случае выпуска препарата по временному разрешению, "серого" импорта, ошибок ввода в "А" или "Р" и т. д.
4. Привязка 1:0. Скорее всего в "Р" этой позиции быть не должно - биологически активная добавка, гомеопатия или результат деятельности производственного отдела аптеки. Или так ввели информацию в прайс-лист, что без коробки в руках не разберешься.
Предварительный анализ.
Найдем количество упаковок, которое предприятие может производить в соответствии с официальными документами МЗ.
Завод |
Позиций |
Дальхимфарм ОАО |
2005 |
Брынцалов-А ЗАО |
1509 |
Мосхимфармпрепараты |
1488 |
Новосибхимфарм ОАО |
1313 |
Верофарм ЗАО |
1287 |
Биосинтез ОАО (Пенза) |
1274 |
Акрихин ХФК ОАО |
1263 |
Синтез АКОМП |
1250 |
Фитофарм-НН |
1215 |
Пятигорская фармфабрика ГП |
1200 |
Табл.1 Количество позиций, разрешенных к производству для российских предприятий (первые 10 заводов)
Очевидно, что на практике реальная номенклатура существенно меньше. Оценить ее можно с помощью количества штрих-кодов, зарегистрированных предприятием. Для России ситуация такова.
Завод |
Штрих-кодов |
Дальхимфарм ОАО |
329 |
Биосинтез ОАО (Пенза) |
197 |
Мосхимфармпрепараты |
196 |
Синтез АКОМП |
180 |
Биохимик ОАО (Саранск) |
178 |
Щелковский витаминный завод ОАО |
157 |
Акрихин ХФК ОАО |
156 |
Новосибхимфарм ОАО |
141 |
АЙ СИ ЭН-Октябрь ОАО (Санкт-Петербург) |
126 |
Красногорсклексредства АО |
125 |
Табл.2 Количество штрих-кодов, зарегистрированных российскими предприятиями (первые 10 заводов)
Цифры, приведенные в таблице 2, ближе к реальной номенклатуре завода.
Для зарубежных заводов картина такова.
Страна |
Завод |
Позиций |
Бельгия |
Лаборатории Долизос |
1078 |
Латвия |
Олайнфарм Олайнский ХФЗ АО |
723 |
Канада |
Апотекс Инк |
610 |
Беларусь |
Борисовский завод медпрепаратов |
400 |
Беларусь |
Белмедпрепараты АО |
326 |
Словения |
Крка |
287 |
Индия |
Ипка Лабораториз Лимитед |
226 |
Германия |
Байер АГ |
222 |
Украина |
Дарница фармацевтическая фирма ЗАО |
202 |
Израиль |
Тева Фармацевтические Предприятия Лтд |
191 |
Табл.3 Количество позиций, разрешенных к ввозу для зарубежных предприятий (первые 10 заводов)
Как видим, число упаковок, разрешенных к ввозу, существенно меньше.
Страна |
Завод |
Штрих-кодов |
Словения |
Крка |
189 |
Беларусь |
Белмедпрепараты АО |
145 |
Беларусь |
Борисовский завод медпрепаратов |
110 |
Латвия |
Олайнфарм Олайнский ХФЗ АО |
90 |
Индия |
Юник Фармасьютикал Лабораториз |
84 |
Швейцария |
Новартис Фарма АГ |
79 |
Германия |
Гексал АГ |
77 |
Украина |
Дарница фармацевтическая фирма ЗАО |
75 |
Югославия |
Хемофарм Д.Д. |
68 |
Швейцария |
Ф.Хоффманн ля Рош Лтд |
65 |
Табл.4 Количество штрих-кодов, зарегистрированных зарубежными предприятиями (первые 10 заводов)
И зарегистрированных штрих-кодов меньше. Если для российских заводов отношение зарегистрированных упаковок к штрих-кодам составляет 1:5 - 1:10, то для зарубежных 1:3 - 1:2.
Сделаем выборку по торговым названиям и заводу.
Торговое название |
Позиций |
Завод |
Страна |
Бактерицидный лейкопластырь |
162 |
Верофарм ЗАО (Воронежский филиал) |
Россия |
Бактерицидный лейкопластырь |
162 |
~ |
Россия |
Новокаина раствор для инъекций |
144 |
Верофарм ЗАО |
Россия |
Новокаина раствор для инъекций |
144 |
Казанское предприятие по производству бакпрепаратов |
Россия |
Новокаина раствор для инъекций |
144 |
Биомед НПО (Пермь) |
Россия |
Новокаина раствор для инъекций |
144 |
Екатеринбургское гп по производству бакпрепаратов |
Россия |
Новокаина раствор для инъекций |
144 |
Дальхимфарм ОАО |
Россия |
Новокаина раствор для инъекций |
144 |
ВНИИ защиты животных |
Россия |
Новокаина раствор для инъекций |
144 |
Вирион НПО ГП |
Россия |
Новокаина раствор для инъекций |
144 |
Биосинтез ОАО (Пенза) |
Россия |
Новокаина раствор для инъекций |
144 |
Верофарм ЗАО (Белгородский филиал) |
Россия |
Новокаина раствор для инъекций |
144 |
Мосхимфармпрепараты |
Россия |
Новокаина раствор для инъекций |
144 |
Вектор-Фарм ДГУ ПП |
Россия |
Новокаина раствор для инъекций |
144 |
Биохимик ОАО (Саранск) |
Россия |
Новокаина раствор для инъекций |
144 |
~ |
Россия |
Новокаина раствор для инъекций |
144 |
АЙ СИ ЭН-Октябрь ОАО (Санкт-Петербург) |
Россия |
Новокаина раствор для инъекций |
144 |
АЙ СИ ЭН-Полифарм ОАО |
Россия |
Новокаина раствор для инъекций |
144 |
Аллерген Ставропольское ФГУП |
Россия |
Новокаина раствор для инъекций |
144 |
Верофарм ЗАО (Воронежский филиал) |
Россия |
Новокаина раствор для инъекций |
144 |
Эректон НПЦ ООО |
Россия |
Новокаина раствор для инъекций |
144 |
Новосибхимфарм ОАО |
Россия |
Новокаина раствор для инъекций |
144 |
Норбиофарм ЗАО |
Россия |
Новокаина раствор для инъекций |
144 |
Органика ОАО |
Россия |
Новокаина раствор для инъекций |
144 |
С-Петербургский НИИ вакцин и сывороток и предприятие по производству бакпрепаратов |
Россия |
Новокаина раствор для инъекций |
144 |
Синтез АКОМП |
Россия |
Новокаина раствор для инъекций |
144 |
Уфавита ОАО |
Россия |
Новокаина раствор для инъекций |
144 |
Иммунопрепарат НПО ГУП |
Россия |
Новокаина раствор для инъекций |
144 |
Ноби - АО биотехнологических новаций |
Россия |
Фенкарол |
124 |
Олайнфарм Олайнский ХФЗ АО |
Латвия |
Диастабол |
96 |
Байер АГ |
Германия |
Нафтизина раствор |
76 |
Московский эндокринный завод ФУП |
Россия |
Ксенетикс |
75 |
Лаборатория Гербе |
Франция |
Лейкопластырь |
75 |
Верофарм ЗАО (Воронежский филиал) |
Россия |
Табл. 5
Полученные результаты естественным образом согласуются с таблицей 1 - огромное количество позиций по номенклатуре российских заводов получено за счет большого количества позиций, которое предприятие имеет право выпускать в соответствии с фармакопейной статьей.
Из таблицы 5 следует, что 25 российских
заводов имеют право выпускать 3600
разнообразных коробок с новокаином по
приказу 71/380/35. Отсутствие информации по
заводу в прайс-листе автоматически
приводит к ситуации, когда одной строке в "А"
будет соответствовать 25 строк в "Р".
Для
зарубежных заводов такая повторяемость практически
исключена. Для российских заводов это
свойство будет постепенно исчезать, уже
появились препараты с названиями типа Левомицетин-Акри,
Фамотидин-ICN. Можно прогнозировать
увеличение количества таких названий, так
как уже началась регистрация лекарств на
российские заводы и появились
фармакопейные статьи предприятий.
Описание упаковки.
Для однозначного описания упаковки необходимо привести информацию о торговом названии, лекарственной форме, дозировке, навеске, фасовке, упаковке, комплектности, производителе, стране производства и упаковщике.
Сделаем запрос для российских и зарубежных препаратов, последовательно увеличивая детализацию описания упаковки.
Всего в базе около 90 000 упаковок (действующие регистрационные удостоверения). Из них, зная только торговое название и завод, можно однозначно определить около 3400 коробок (чуть меньше 4%). А в некоторых случаях и завод знать не надо, например, D-сорбит в единственной упаковке выпускает только АЙ СИ ЭН-Марбиофарм. Если добавить лекформу, то процент однозначного определения вырастет до 4.2%, а добавление дозировки увеличит его 5.7%. В прайс-листах, обычно, добавляют еще форму выпуска и общее количество. В этом случае для России на каждую строку в "А" найдется, в среднем, 2 строки в "Р".
Для зарубежных препаратов ситуация значительно более благоприятная. Для 12% упаковок достаточно указания только торгового названия. Добавление завода увеличивает эту цифру до 15%. Знание лекформы и дозировки - это уже 32% успеха. Указание навески и общего количества лекформ или форм выпуска доводит процент узнавания до 82.
В качестве резерва и для российских и для зарубежных препаратов можно еще ориентироваться на наличие штрих-кода - из нескольких возможных строчек привязываться к тому препарату, который имеет штрих-код или цену.
Практическая проверка
Проверим полученные цифры на практике. В качестве примера возьмем прайс лист Фармбюллетеня. Идем подряд с самого начала.
ФБ
Name |
Doza |
Maker |
Country |
5-НИТРОКС |
таб п/о 50мг х80 |
Pharmachim |
Болгария |
"Р"
Торговое название |
Лекформа |
Дозировка |
N |
Завод |
Страна |
5-нитрокс |
таблетки покрытые пленочной оболочкой |
50 мг |
80 |
Фармахим Холдинг ЕАД, Фармация АД |
Болгария |
Привязка 1:1. Есть расхождение по производителю. Болгарские заводы идут либо сами на регистрацию, либо через Фармахим (как в этом случае), но в любом случае информация о заводе в регистрационном удостоверении быть должна.
ФБ
Name |
Doza |
Maker |
Country |
5-НОК |
драже 50мг х50 |
Сотекс |
Россия |
5-НОК |
таб 50мг х50 |
|
Россия/Словения |
5-НОК |
таб 50мг х50 |
Lek |
Словения |
5-НОК |
таб 50мг х50 |
Вектор |
Россия |
5-НОК |
таб 50мг х50 |
Сотекс |
Россия |
Первая строка вызывает подозрение. Драже было аннулировано 31.12.95. Правда, срок годности - 5 лет, но поверить в то, что кто-то купил 5-НОК на пять лет вперед, можно с трудом. Скорее всего, в базе оптовика до сих пор не исправлена лекформа. Это значит, что первая и пятая строки эквивалентны, причем пятая строка правильная. Ошибка в "А".
Строки 3, 4, 5 из ФБ привязываются к "Р" 1:1. Вторая строка из ФБ будет потеряна. Ясно, что речь идет об упаковщике, но не ясно, о каком, их два.
Торговое название |
Лекформа |
Дозировка |
N |
Завод |
Страна |
Пакует |
5-НОК |
таблетки покрытые оболочкой |
50 мг |
50 |
Лек Д.Д. |
Словения |
Фирма Сотекс ЗАО |
5-НОК |
таблетки покрытые оболочкой |
50 мг |
50 |
Лек Д.Д. |
Словения |
~ |
5-НОК |
таблетки покрытые оболочкой |
50 мг |
50 |
Лек Д.Д. |
Словения |
Вектор-Фарм ДГУ ПП |
ФБ
Name |
Doza |
Maker |
Country |
5-ФТОРУРАЦИЛ |
амп 5%5мл х10 |
Дарница |
Украина |
5-ФТОРУРАЦИЛ ЭБЕВЕ |
конц-т д/инф 250мг/5мл х1 |
Ebewe |
Австрия |
5-ФТОРУРАЦИЛ ЭБЕВЕ |
конц-т д/инф 250мг/5мл х5 |
Ebewe |
Австрия |
5-ФТОРУРАЦИЛ ЭБЕВЕ |
конц-т д/инф 500мг 10мл х1 |
Ebewe |
Австрия |
5-ФТОРУРАЦИЛ ЭБЕВЕ |
конц-т д/инф фл 1г 20мл х1 |
Ebewe |
Австрия |
В реестре для первой строки из ФБ есть две ответные (правда, с другим торговым названием). Отличаются упаковкой, в одной ампулы помещаются в блистеры, а потом в коробку, во второй ампулы сразу кладутся в коробку. Вторая упаковка имеет штрих-код и, следовательно, имеет преимущество.
Торговое название |
Лекформа |
Дозировка |
MV/Mu |
Упаковка |
N |
Завод |
Страна |
EAN13 |
Фторурацил-Дарница |
раствор для инъекций |
5% |
5 мл |
ампулы(10) упаковки ячейковые контурные (1) пачки картонные |
10 |
Дарница фармацевтическая фирма ЗАО |
Украина |
~ |
Фторурацил-Дарница |
раствор для инъекций |
5% |
5 мл |
ампулы(10) пачки картонные |
10 |
Дарница фармацевтическая фирма ЗАО |
Украина |
4823006400331 |
Остальные строки находятся 1:1 (в реестре завод называется Эбеве Арцнаймиттел ГмбХ). На всех коробках есть штрих-коды.
В ФБ
Name |
Doza |
Maker |
Country |
HL-PAIN |
шип.таб х36 |
Sagmel |
США |
Найдено 1:1
В ФБ
Name |
Doza |
Maker |
Country |
KID-S FORMULA |
жев.таб х40 "Больше чем поливит." |
|
|
KID-S FORMULA |
жев.таб х60 "Больше чем поливит." |
|
|
KID-S FORMULA |
жев.таб х60 "Витамин С плюс" |
Servier |
|
KID-S FORMULA |
жев.таб х60 "Кальций плюс" |
|
|
KID-S FORMULA |
жев.таб х60 "Поливит Железо плюс" |
|
|
KID-S FORMULA |
жев.таб х60 Поливит Кальций плюс |
|
|
Здесь пришлось поискать, так как начало торгового названия помещено в поле Name, а окончание - в поле Doza.
По русски это звучит так - "Фарма-мед детская формула больше чем поливитамины", завод Фарма-Мед Инк (а не Servier). Однако зарегистрирован только N40, а N60 не зарегистрирован. Витамин С плюс зарегистрирован N90, а не 60. Кальций плюс совпал. Железо плюс идет N100. Поливит кальций плюс совпал.
ФБ
Name |
Doza |
Maker |
Country |
L-АСПАРАГИНАЗА |
фл 10тМЕ |
Grindex |
Латвия |
Найден 1:1, завод звучит так - Гриндекс публичное акционерное общество
Name |
Doza |
Maker |
Country |
А-ПАР |
аэр 125г |
S.C.A.T |
Франция |
Найден 1:1
Name |
Doza |
Maker |
Country |
АБАКТАЛ |
амп 400мг5мл х10 |
Lek |
Словения |
АБАКТАЛ |
таб 400мг х10 |
Lek |
Словения |
АБАКТАЛ |
таб 400мг х10 |
Сотекс |
Россия |
Все нашлось, Сотекс является не производителем, а упаковщиком
А теперь Россия
Name |
Doza |
Maker |
Country |
АБЕРГИН |
таб 4мг х30 |
ВИЛАР |
Россия |
АБОМИН |
таб п/о 50тЕД х10 |
МХФП |
Россия |
АБОМИН |
таб п/о 50тЕД х10 |
Новосибирский ЗМП |
Россия |
Абергин нашелся, даже штрих-код есть. И Абомин со штрих-кодами есть.
Name |
Doza |
Maker |
Country |
ЛИПОЕВАЯ КИСЛОТА |
таб 12мг х50 |
ICN Марбиофарм |
Россия |
ЛИПОЕВАЯ КИСЛОТА |
таб 12мг х50 |
ICN-Россия |
Россия |
В этой записи кое-что можно исправить. Липоевую кислоту выпускает только Марбиофарм. Поэтому вместо двух строк должна быть только одна. Беда в том, что N50 в базе соотвествуют 10 строк. Различные виды упаковок - банки стеклянные, полимерные, упаковки ячейковые контурные по 10 таблеток и пять упаковок в пачку и упаковки ячейковые контурные по 50 таблеток. И два штрих-кода на это многообразие. Один штрих-код на банку темного стекла в пачке, второй на 5 блистерах по 10 таблеток. По-видимому, выпускают и в банках и в блистерах. Здесь поможет только пачка в руках или звонок поставщику.
Из всех этих примеров следует, что автоматической привязки добиться не удастся, речь идет об облегчении экспертной работы. Задача, в принципе, не безнадежная.
Возможные варианты ее решения (очевидные и уже реализованные) подсказываются объемом номенклатуры и частотой ее изменения.
Для аптеки с номенклатурой 1000 - 2000 позиций при скорострельности эксперта 100-200 позиций в день речь идет о двух неделях работы. Естественно, что в этом случае самое разумное - это сделать простейшую программу с поисками по торговому названию, стране, производителю, упаковщику. Делается одноразовая работа по привязке целой строки "А" к строке в "Р". Если в следующем прайсе произошло небольшое изменение этой строки, то она привязывается опять к той же строке из "Р", т.е. происходит накапливание всех возможных вариантов записи по отношению к каноническому, что фактически означает внесение элемента самоообучения программы.
Имеет ли смысл делать что-то более сложное для интеграторов прайс-листов? Не уверен. Дело в том, что основные проблемы привязки - отсутствие достаточной инофрмации для идентификации упаковки и неточность написания торговых названий лекформ, заводов и т.д. Эти проблемы программным путем либо не решаются вообще, либо не решаются простым способом.
Конечно, можно написать более сложную программу - попробовать провести предварительную разборку строки из "А" и состыковать торговые названия, названия производителей и стран, разобранные сокращения лекформ, дозировок, первичных упаковок, со словарями из "Р" и, таким образом, обеспечить автоматический поиск строк, похожих на строку из "А". В некоторых случаях (процентов 30 от общего количества строк в "А") такая строка будет только одна и для них задача привязки будет решена. Но остальные строки все равно придется просматривать и принимать решение в условиях огрниченного объема информации.
И здесь возникает вопрос - как выбрать ближайшую похожую запись и нужно ли это делать? Очевидно, что ответ на этот вопрос определяется целью привязки. Например, для анализа соотношения розничных и зарегистрированных цен необходима привязка 1:1, а для классификации по кодам АТС нет никакой необходимости опускаться до уровня упаковки. Необходимо ли в системе заказов детализировать, какой новокаин нужен заказчику? Или подойдет любой из выпускаемых 25 российскими заводами, лишь бы цена не превышала разумную? Если необходимости в такой детализации нет, то в "Р" можно привязаться к так называемому основному удостоверению. Эта строка введена в соотвествии с приказом МЗ о разрешении медицинского применения и у нее, по определению, нет производителя (вместо него стоит тильда). Строки с конкретными производителями будут являться дочерними по отношению к основному удостоверению. Таким образом, можно решить проблему отсутствия информации по заводу, но проблему недостаточности информации по упаковке не решается. Один из вариантов решения - введение в "Р" более высокого, укрупненного уровня, с меньшей долей детализации, фактически повторяющего по объему информацию из прайс-листа, но как это сделать и как затем поддерживать - это отдельный вопрос.