Предложения по преобразованию файлов и данных с использованием SQL результатов запроса для управления существующими файлами PDF - PullRequest
0 голосов
/ 20 июня 2020

Приносим извинения, если что-то похожее на вопрос, который я задаю, уже было рассмотрено. Я даже не уверен, как лучше всего сформулировать свой вопрос, но мне не удалось найти сообщений, которые явно были бы актуальными. Я надеюсь, что у кого-то есть некоторый опыт в этом, и он может предложить несколько предложений. Моя компания уже заключила контракт на преобразование большей части нашей базы данных в HTML для целей ETL, и мы просто не можем позволить себе удвоить и без того едва управляемые затраты на этот проект, добавив это дополнительное требование к объему.

У нас есть база данных SQL от поставщика программного обеспечения EMR, которую наша компания покинула. Из-за недавних факторов экономии c мы просто не можем позволить себе больше оставаться с ними. Когда мы ушли, этот бывший поставщик неохотно предоставил нам резервную копию нашей базы данных SQL вместе с копиями всех отсканированных изображений, которые наши пользователи загружали через приложение GUI за эти годы. Мне сказали, что они хранят загрузки как данные BLOB, но оказалось, что нет. На самом деле они вообще не хранили файлы в базе данных. Вместо этого они переместили изображение в место хранения и записали ID, DocType, Filename, DirPath и другую информацию о документе в таблицу Document базы данных. Это имеет смысл, но оставляет нас в затруднительном положении. В основном потому, что имя файла, похоже, было случайно сгенерировано при загрузке. Итак, теперь у нас есть 50 000 файлов изображений с неразборчивыми именами файлов, хранящихся в структуре папок на основе даты, без возможности соотнести какой-либо из них с пациентами, которым они принадлежат. Вот несколько примеров:

  • / root / 2020/05102019/69353829-e46b-47e7-ab56-a1762424f0dd.pdf
  • / root / 2014/09282017 / 385ba21d- e108-4cbb-9287-91110c16edb0.jpg

Я составил список атрибутов, так что я могу сделать любой из них доступным для преобразования. Я вытащил:

        SELECT * FROM document d
          JOIN patients p ON d.PatientId = p.pid
          JOIN users u ON d.PatientId = u.uid
        WHERE u.UserType = '3' AND d.fileformat is NOT NULL AND d.dirpath LIKE 'm%'
        ORDER BY u.ulname;

Это дало мне все атрибуты пациентов и документов, в результате чего получился список из 197 столбцов. Проблема в том, что новый поставщик EMR может импортировать эти файлы только в том случае, если все файлы для каждого пациента находятся в специальной папке на уровне пациента, поэтому мне нужны файлы в новой структуре папок. Я пытаюсь сделать это, не отказываясь от таких вещей, как PatientID, Scan Date, Description (столбец customName), Scanned By и, возможно, несколько других пунктов.

Я, вероятно, в конечном итоге сделаю имя файла чем-то например, сочетание customName + docID для идентификации. Затем мне просто нужно поместить файлы в нечто вроде структуры папок /Patient/Docs.extension.

Я собрал все файлы в одну папку, думая, что это упростит манипулирование. Я собрал их так:

        md "D:\OneDrive\Documents\Assets\eClinicalworks\PID\FTP\mobiledoc\Documents\All\"
        cd /d "D:\OneDrive\Documents\Assets\eClinicalworks\PID\FTP\mobiledoc\Documents\"
        for /r %d in (*) do copy "%d" "D:\OneDrive\Documents\Assets\eClinicalworks\PID\FTP\mobiledoc\Documents\All\"

Теперь они у меня все вместе.

Снимок экрана

Мне все еще нужно понять, как Впрочем, пациент может перенести их в новую структуру папок.

Чтобы упомянуть, я изначально рассматривал возможность использования SQL, чтобы я мог воссоздать файлы и назначить нужные атрибуты в качестве атрибутов файлов за один шаг.

Чтобы ответить на вопрос о преобразовании HTML, у нас есть масса заметок о ходе работы, заметок врачей, рецептов и т. Д. c в базе данных. Единственный способ перенести их в новый EMR - это экспортировать их в HTML и сгруппировать на уровне пациента, чтобы новый поставщик мог их импортировать.

Честно говоря, после того, как пришлось бороться со всем этим мусором, Я бы предпочел избежать этой ситуации в будущем, вообще отказавшись загружать их в новый EMR. Вместо этого просто поместите все эти документы на НАШ файловый сервер и дайте новому EMR гиперссылку для вставки в карту каждого пациента, которая откроет все файлы пациентов. Новый EMR основан на браузере, поэтому это может быть осуществимо, но я сомневаюсь, что смогу заставить их записывать файлы на наш файловый сервер в дальнейшем, поэтому это, скорее всего, приведет к тому, что конечный пользователь станет более разрозненным.

1 Ответ

0 голосов
/ 20 июня 2020

Я не думаю, что ваши подрядчики сделали что-то не так, tbh. Взятие загруженных файлов со всеми их проблемными символами / дублированными именами (у вас более одного пациента с именем JohnSmith.jpg?) И c и переименование их в GUID, чтобы они могли сосуществовать вместе с другими изображениями, не перезаписывая их, это а) разумно и б) что бы я сделал.

Я бы также не стал хранить изображения в базе данных, так как тогда единственное, что вы можете сделать с ними, - это снова их извлечь; что-то, что вы должны делать каждый раз, когда хотите что-то с ними сделать. Возможность сопоставить папку изображений с URL-адресом на вашем веб-сервере и затем отправить html, используя только имя файла, означает, что веб-сервер может разделить изображение без необходимости извлекать его из базы данных; db не обязательно вовлекаться в бессмысленный ввод-вывод.

Способ сопоставления этих изображений с пациентами, которым они принадлежат, осуществляется с помощью базы данных. Где-то в другом месте в структуре базы данных будет, например, запись пациента со столбцом DocumentId, который ссылается на эту запись документа, или таблицу PatientDocuments, содержащую пары PatientId / DocumentId.

Если нет, то хранение байтов документа в базе данных не поможет связать их с пациентом, потому что это отношение не о том, где находятся байты изображения, а о том, какие другие данные были хранится, чтобы сделать систему пригодной для использования. Ваши мысли по этому поводу, загрузка десятков тысяч изображений в базу данных просто для того, чтобы вы могли ... э-э ... получить их все снова, похоже, указывают на то, что вы еще не полностью поняли причины, по которым ваши подрядчики сделали то, что они сделали.

Поскольку у вас сложилось впечатление, что вы можете это сделать, вы, кажется, знаете, как база данных связывает документ с пациентом (если это не так, ваш предложенный процесс потерпит неудачу), и поэтому вы можете организовать подходящий процесс переименования без необходимости перемещать данные изображения куда-либо. По сути, вы не видите, что файловая система, хранящая данные файла по уникальным путям, ничем не отличается от таблицы базы данных, хранящей данные файла по уникальным идентификаторам. Таблицы вашей базы данных для документов ясно, поэтому ссылки на вашу файловую систему / файловую систему можно рассматривать как расширение таблицы документов. Вам нужны другие таблицы в db, чтобы понять файлы, но вам нужны другие таблицы в db, чтобы понять любую таблицу в db. Это ключевые концепции моделирования связанных данных

Я не рекомендую вам предпринимать предложенный вами процесс, но я уверен, что это не отговорит. Рассмотрим затем (потому что вы на самом деле не опубликовали никаких деталей, с которыми мы могли бы работать) этот предполагаемый сценарий:

Patients
Name,DocumentId
John Smith,1
Jane Doe,2

Documents
Id,FilePath
1,'/root/2020/05102019/69353829-e46b-47e7-ab56-a1762424f0dd.pdf'
2,'/root/2014/09282017/385ba21d-e108-4cbb-9287-91110c16edb0.jpg'

SELECT CONCAT('REN ', d.filePath, ' "',  p.Name, RIGHT(d.filePath, 4), '"') 
FROM
  Patients p 
  INNER JOIN Documents d ON p.DocumentId = d.DocumentId

Результаты запроса будут по существу пакетным файлом, полным команд переименования, который переименовывает все файлы в единую папку, организованную по имени пациента.

И теперь все ваши несколько пациентов с одинаковыми именами будут перезаписывать друг друга, и все закончится беспорядком

Это также дает мне понять, что «не храните файлы в db "- посмотрите, насколько легко управлять файлами, когда они находятся в файловой системе, используя существующие команды, которые понимают файловые системы и файлы и делают такие вещи, как переименование файлов или извлечение данных exif, поворот, изменение размера и печать ... если все эти изображения были в вашей базе данных, единственное, что вы могли сделать с ними, - это вытащить их снова; sqlserver не может вращать, изменять размер, печатать и т. д. c BLOB-данные, но существуют тысячи инструментов, которые понимают файлы и могут их преобразовывать - эти инструменты не могут понять вашу базу данных, поэтому помещение файлов в базу данных обременяет вас проблемой, что они становятся бесполезными пока снова не откопают

Возможно, ваши подрядчики не были такими глупыми, как вы думаете; сделайте паузу, прежде чем приступить к разбору всего, что они сделали, и спросите, действительно ли ваш драйвер для этого верен. Если Джейн на стойке регистрации необходимо увидеть фотографию Джона Смита с водительскими правами XY1234, чтобы идентифицировать его, не предоставляйте ей общий диск, полный всех фотографий, и позвольте ей дважды щелкнуть, перетащить и случайно удалить свой путь по файловой системе. . Предоставьте ей приложение, которое просматривает базу данных, получает непонятное, но услужливо уникальное имя файла с диска и открывает его для просмотра. И сделайте файловую систему доступной только для чтения всем, кроме приложения, чтобы пользователи не могли что-то сломать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...