ИнфоАптека ®

Автоматизация аптек и аптечных сетей

Инструменты пользователя

Инструменты сайта


модули:склад:обмен_информацией:формат_электронного_обмена

Формат электронного обмена

Информационный обмен между ПО ИнфоАптека 3.0 и ПО сторонних поставщиков осуществляется с помощью файлов - пакетов.

От поставщика в аптеку передаются входящие пакеты:

  • Прайс-лист поставщика
  • Электронная накладная
  • Отказанные позиции

Из аптеки поставщику выгружаются исходящие пакеты:

  • Заявка поставщику

Файлы должны располагаться в произвольной локальной или сетевой папке, имеющей подкаталоги для входящих \IN и исходящих \OUT пакетов.

Транспорт

Для транспортировки пакетов, возможно использовать корпоративный FTP сервер ftp.ahold.ru. Поставщикам для получения логина/пароля необходимо обратиться в наш Центральный офис.

Обязательные требования

ПО ИнфоАптека 3.0 для импорта/экспорта данных использует XML формат, который позволяет в одном файле хранить информацию довольно сложной структуры.

Разметка XML

Разметка всегда начинается символом < и заканчивается символом >. Наряду с этими символами, специальную роль для разметки играет также символ &. Употребление разметочных символов в символьных данных затрудняет распознавание конструкций разметки и может создать проблему неоднозначности структуры. В XML эта проблема решается следующим образом: три упомянутые символа не могут присутствовать в символьных данных и в значениях атрибутов в их непосредственном виде, для их представления в этих случаях зарезервированы специальные последовательности символов, начинающиеся с & и заканчивающиеся ;

Символ Замена
< &lt;
> &gt;
& &amp;

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

Символ Замена
' &apos;
« &quot;

Объявление XML

Объявление XML обязательно, так же является обязательной кодировка «windows-1251».

<?xml version="1.0" encoding="windows-1251" standalone="yes" ?>

Не обязательные элементы

Если в информационном пакете не задан не обязательный элемент, то ему соответствует ОТСУТСТВИЕ элемента, а НЕ ПУСТОЙ элемент.

Например, в накладной не указан штрих-код производителя - тег VENDORBARCODE не указывается.

VENDORBARCODE="" - не правильно.
<VENDORBARCODE/> - не правильно.
<VENDORBARCODE></VENDORBARCODE> - не правильно.

Формат пакета

Для любого типа информационного пакета корневым является элемент PACKET:

<PACKET TYPE="" NAME="" FROM="" TO="" PRED_ID="" ID="">
  … тело пакета
</PACKET>

Атрибуты элемента PACKET

  • TYPE - цифровой код типа пакета. Тип данных Smallint;
    • прайс-лист - TYPE=«10»;
    • заявка - TYPE=«11»;
    • накладная - TYPE=«12»;
    • отказ - TYPE=«13»;
  • NAME - название типа пакета. Тип данных Varchar(40);
  • FROM - код отправителя. Обычно это сокращенное название поставщика. Нельзя использовать символы: ( \ / : * ? » < > |[ ] = ;). Тип данных Varchar(40).
  • TO - цифровой код получателя пакета. Для некоторых типов пакетов может отсутствовать. Например, прайс-лист поставщика, если он предназначен сразу всем клиентам аптечной сети. Тип данных Varchar(40).
  • ID - символьный идентификатор пакета. Для разных типов пакетов может нести различную смысловую нагрузку. Например, номер накладной и т.д. Некоторые пакеты могут не иметь этого атрибута. Тип данных Varchar(40).
  • PRED_ID - код предприятия аптечной сети. Тип Integer

Прайс-лист

Электронный прайс-лист позволяет дистрибьюторам предоставлять полную информацию об ассортименте, а сотрудникам аптек с помощью ПО ИнфоАптека 3.0 — быстро и качественно её обрабатывать.

Заголовок пакета

<PACKET TYPE="10" NAME="Прайс-лист" FROM="АHOLD">
  … тело пакета
</PACKET>

Обязательные атрибуты элемента PACKET:

  • TYPE—тип пакета. Для прайс-листа всегда равен 10.
  • FROM—отправитель пакета, как правило идентификатор поставщика. Идентификатор желательно указывать латиницей, впоследствии по прайс-листу будет сделана заявка и имя файла заявки будет содержать значение этого атрибута. Тип данных Varchar(40);

Заголовок прайс-листа

<PRICELIST DATE="12.02.2014 15:16:55" NAME="">
  ... позиции прайс-листа
</PRICELIST>

Атрибуты элемента PRICELIST

  • DATE - дата/время прайс-листа в формате dd.mm.yyyy hh:nn:ss.
  • NAME – название прайс-листа. Не путать с названием пакета в заголовке. В случае если у поставщика более одного прайс-листа, именно в этом поле указывается его название и по нему идет разделение прайс-листов при закачке. Если прайс один поле должно быть одинаковым всегда или отсутствовать. Тип Varchar(40).

Позиции прайс-листа

  <ITEM>
    <CODE>15776</CODE>
    <NAME>ПОДГУЗНИКИ  LILLE SUPREME FIT REGULAR L (2200МЛ) N3 ФРАНЦИЯ</NAME>
    <VENDOR>TYCO HEALTHCARE LILLE</VENDOR>
    <QTTY>3</QTTY>
    <PRICES>
      <Отсрочка0>40,50</Отсрочка0>
    </PRICES>
  </ITEM>
  <ITEM>
    <COMMENT>Уценка ##1011887</COMMENT>
    <CODE>11887</CODE>
    <NAME>КЕСТИН СИРОП 1МГ/МЛ ФЛ. 120МЛ ИСПАНИЯ УЦЕНКА</NAME>
    <VENDOR>Nycomed</VENDOR>
    <QTTY>3</QTTY>
    <PRICES>
      <Отсрочка10>37,73</Отсрочка10>
      <Отсрочка0>35,00</Отсрочка0>
    </PRICES>
  </ITEM>

Раздел ITEM - позиции прайс-листа. Каждая позиция содержит следующие атрибуты:

  • CODE - код товара из справочника поставщика. Varchar(40) (обязательно). ;
  • NAME - название товара (обязательно). Varchar(100);
  • VENDOR - фирма-производитель (не обязательный) Varchar(60).;
  • VENDORBARCODE - штрих-код производителя, (не обязательный, но очень желательный при выгрузке остатков из систем автоматизации), EAN13 без контрольной суммы (последней цифры), 12 знаков. Тип Numeric (12,0);
  • COUNTRY - страна (не обязательный). Varchar(40).;
  • QTTY - количество (обязательно). Integer;
  • VALID_DATE - срок годности (не обязательный). Date;
  • FRESH - признак, 1- товара не было в прошлом прайс-листе, 2 - поставщик не работал раньше с данным товаром (не обязательный). Integer;
  • COMMENT - короткий текстовый комментарий, относящийся к данной позиции (если позиция прайс-листа соответствует уценке, то в комментарий можно занести код товара по уценке и его наименование, а в поле CODE выводить реальный код товара - см. пример выше). Varchar(250);
  • PRICES - подраздел цен. Каждый раздел этого подраздела содержит цену, при определенном типе оплаты. Название раздела - значение типа оплаты (Varchar(40))., значение – цена (Numeric(15,2)).
  • ISBAD – если товар уценен, ставим 1 (не обязательный). Тип Smallint.
  • XCODE – дополнительный код товара, идентификатор, который может транслироваться в заявку. Необязательное поле.
  • MINQTTY – мин кол-во заказа конкретного товара. Необязательное поле. Integer (Не загружается и не используется в ИА)
  • MINSUM – мин сумма заказа конкретного товара. Необязательное поле.
  • PACKQTTY – кратность заказа (необязательный). Integer;
  • NDS - ставка НДС %;

Пример пакета

Скачать пример прайс-листа.

Для отправки прайс-листа на корпоративный FTP, файл прайс-листа именуется по маске:

<CLIENT_ID>_<FROM>_price.xml (можно архивировать в zip)

  • <Client_ID> - ИД грузополучателя. Всегда семь цифр, ведущие нули обязательны, (1265002, 0615003, 0015003)
  • <FROM> - Сокращенное название поставщика.

Пример: 0123001_AHOLD_price.xml

Заявка

Заголовок пакета

<PACKET TYPE="11" ID="44000" NAME="Заявка поставщику" PRED_ID="1350" FROM="001" TO="АHOLD">
  … тело пакета
</PACKET>

Обязательные атрибуты элемента PACKET:

  • TYPE - Для заявки всегда равен 11.
  • ID - уникальный идентификатор заявки. Тип Bigint.
  • PRED_ID - код предприятия аптечной сети. Тип Integer.
  • FROM - код узла аптечной сети (NODE_ID). Тип Integer.
  • ТО — идентификатор получателя. Тип Varchar(40).

Заголовок заявки

<ORDER>
  <ORDER_ID>44000</ORDER_ID>
  <DEP_ID>1001</DEP_ID>
  <CLIENT_ID>1350002</CLIENT_ID>
  <ORDERDATE>16.08.2005 18:01:10</ORDERDATE>
  <PLDATE>16.08.2005 8:48:36</PLDATE>
  <PAYTYPE>Отсрочка_10</PAYTYPE>
  <COMMENT>тестовая заявка</COMMENT>
 
  ... позиции заявки
 
</ORDER>

Элементы раздела ORDER:

  • ORDER_ID - уникальный идентификатор заявки. Тип Bigint; В случае если с таким ИД заявка придет повторно, она не должна обработаться. Также необходимо передавать это поле в накладную, созданную по этой заявке, это упрощает приход товара в аптеке от вашей фирмы.
  • DEP_ID - ИД отдела (обязательно). Тип Integer; Идентификатор конкретного отдела, по которому была сделана заявка. Передается в накладную, созданную по этой заявке.
  • CLIENT_ID - ИД грузополучателя (используется при заказе из ЦО по аптекам, для идентификации аптеки, как грузополучателя). Тип Varchar(7);
  • ORDERDATE - дата/время заявки. dd.mm.yyyy hh:nn;
  • PLDATE - дата/время прайс-листа. dd.mm.yyyy hh:nn;
  • PAYTYPE - тип оплаты для заявки в целом. Тип Smallint;
  • COMMENT - некоторое текстовое сообщение для менеджера. Varchar(250);

Позиции заявки

<ITEMS>
  <ITEM>
    <CODE>15776</CODE>
    <NAME>ПОДГУЗНИКИ  LILLE SUPREME FIT REGULAR L (2200МЛ) N3 ФРАНЦИЯ</NAME>
    <VENDOR>TYCO HEALTHCARE LILLE</VENDOR>
    <QTTY>3</QTTY>
    <PRICE>78,32</PRICE>
  </ITEM>
  <ITEM>
    <COMMENT>Уценка ##1011887</COMMENT>
    <CODE>11887</CODE>
    <NAME>КЕСТИН СИРОП 1МГ/МЛ ФЛ. 120МЛ ИСПАНИЯ УЦЕНКА</NAME>
    <VENDOR>Nycomed</VENDOR>
    <QTTY>3</QTTY>
    <PRICE>64,57</PRICE>
  </ITEM>
 
      …
 
</ITEMS>

Раздел ITEMS содержит позиции заявки, каждая позиция содержится в подразделе ITEM

Атрибуты раздела ITEM:

  • CODE - код товара из справочника поставщика. Varchar(40);
  • NAME - название товара (для визуального контроля). Тип Varchar(100);
  • VENDOR - фирма-производитель (для визуального контроля). Varchar(60);;
  • QTTY - кол-во, заказываемое аптекой; Тип Integer.
  • PRICE – цена. Тип Numeric (15,2);
  • PAYTYPE - тип оплаты, если тип оплаты позиции отличается от типа оплаты заявки в целом. Тип Smallint.
  • COMMENT - короткий текстовый комментарий, относящийся к данной позиции (при заказе позиции по уценке содержит комментарий к позиции из прайс-листа). Varchar(250);
  • XCODE – дополнительный код товара. Идентификатор, который может транслироваться из прайса в заявку.

Пример пакета

Скачать пример заявки

Файл заявки именуется по маске:

<FROM>_ <CLIENT_ID>_<Дата>_<Номер пакета>.ORD (не в архиве).

  • <FROM> - Идентификатор подставляемый из поля FROM прайс-листа;
  • <Client_ID> - ИД отправителя заказа;
  • <Дата> - дата в формате ГГММДД;
  • <Номер пакета> - номер пакета. Порядковый номер заявки поставщику.

Пример: АHOLD_0123001_130403_209.ORD

Поставщик должен хранить поля CLIENT_ID, DEP_ID для накладной.

Накладная

Заголовок пакета

<PACKET TYPE="12" id="СЧ-2845395/00" NAME="Электронная накладная" FROM="АHOLD">
  … тело пакета
</PACKET>

Обязательные атрибуты элемента PACKET:

  • TYPE - для накладной всегда равен 12;
  • ID - номер накладной. Varchar(20);
  • FROM - отправитель пакета, как правило идентификатор поставщика. Тип данных Varchar(40).

Заголовок накладной

<SUPPLY>
  <INVOICE_NUM>СМ-1921920/00</INVOICE_NUM>
  <INVOICE_DATE>27.09.2005</INVOICE_DATE>
  <DEP_ID>1001</DEP_ID>
  <ORDER_ID>104347019</ORDER_ID>
  <PAYDATE>11.02.2014</PAYDATE>
  <CAT_ID>1</CAT_ID>
 
  ... позиции накладной
 
</SUPPLY>

Элементы раздела SUPPLY1):

  • INVOICE_NUM - номер накладной (обязательно). Varchar(20);
  • FACTURA_NUM - номер счет-фактуры (не обязательно). Varchar(20);
  • INVOICE_DATE - дата накладной (обязательно), dd.mm.yyyy;
  • DEP_ID - код отдела в аптеке заказчика (не обязательно). Integer; Значение берется из аналогичного поля заявки.
  • ORDER_ID - номер заявки, по которой сформирована накладная (не обязательно) Тип Bigint; Необходимо передавать это поле в накладную, значение берется из аналогичного поля заявки, это упрощает приход товара в аптеке от вашей фирмы.
  • PAYDATE - дата оплаты (не обязательно), dd.mm.yyyy;
  • CAT_ID - категория товара (не обязательно). Varchar(3);
  • INTERNET_ORDER - номер для интернет заказов (не обязательно);

Позиции накладной

<ITEMS>
  <ITEM>
    <CODE>8996</CODE>
    <NAME>Зула леденцы с вит. С (вишня) пакет 60г Германия</NAME>
    <VENDOR>Sula Gmbh</VENDOR>
    <QTTY>3</QTTY>
    <SPRICE>21,9</SPRICE>
    <VPRICE>25,84</VPRICE>
    <NDS>18</NDS>
    <SNDSSUM>11,83</SNDSSUM>
    <SERIA>-</SERIA>
    <VALID_DATE>01.12.2006</VALID_DATE>
    <GTD>10110030/200405/0003026/1</GTD>
    <SERT_NUM>№РОСС.DE.CH01.В66630 Дт.р 21.05.2003 Ср.д 21.06.2006 Орг.ГОССТАНДАРТ Р</SERT_NUM>
    <AKCIZE>0</AKCIZE>
    <VENDORBARCODE>105236000212<VENDORBARCODE>
    <ALT_IID>200000000101</ALT_IID>
    <DIVISOR>1</DIVISOR>
  </ITEM>
  <ITEM></ITEM>
</ITEMS>

Раздел ITEMS содержит позиции накладной, каждая позиция содержится в подразделе ITEM

Атрибуты раздела ITEM2):

  • CODE - код товара из справочника поставщика. Varchar(40) (обязательно);
  • NAME - название товара (обязательно). Varchar(100);
  • VENDOR - фирма-производитель (не обязательный). Varchar(60);
  • COUNTRY - страна (не обязательный). Varchar(40);
  • QTTY - количество (обязательно). Тип Integer;
  • VPRICE - цена производителя (обязательный для ЖВ). Numeric (15,2);
  • SPRICE - цена поставщика без НДС (обязательно). Numeric (15,4);
  • NDS - ставка НДС % (обязательно). Numeric (5,2);
  • SNDSSUM - сумма НДС поставщика по позиции (строке, не за 1 товара) (обязательно). Тип Double Precision;
  • SERIA - серия (не обязательный). Тип Varchar(50);
  • VALID_DATE - срок годности (не обязательный). dd.mm.yyyy;
  • GTD - ГТД (не обязательный). Varchar(30);
  • SERT_NUM - информация о сертификате одной строкой, (не обязательный). Varchar(100), (<Номер сертификата><Дата выдачи сертификата><Срок окончания сертификата><Орган, выдавший сертификат>;
  • REG_SERT_NUM - информация о региональном сертификате одной строкой, (не обязательный). Varchar(100), (<Номер сертификата><Дата выдачи сертификата><Срок окончания сертификата><Орган, выдавший сертификат>);
  • AKCIZE - сумма акциза за единицу товара (если нет, то 0). (не обязательный). Numeric (15,4);
  • VENDORBARCODE - штрих-код производителя, (не обязательный, но очень желательный), EAN13 без контрольной суммы (последней цифры), 12 знаков. Numeric (12,0);
  • ALT_IID - альтернативный штрих-код, использовавшийся в сторонней системе автоматизации, ALT_IID>200 000 000 000 и ALT_IID<300 000 000 000, все остальные не загружаются; (не обязательный). Тип Bigint.
  • RPRICE - розничная цена; (не обязательный). Numeric (15,2).
  • OPRICE - оптовая цена; (не обязательный). Numeric (15,2);
  • LPRICE - льготная цена; (не обязательный). Numeric (15,2);
  • PROMO - названия акции; (не обязательный). Varchar(50);
  • DIVISOR - делитель, целое >=1 (или не задан). Если >1, то количество (QTTY) должно быть указано в разделенных упаковках; (не обязательный). Тип Integer.

Пояснения по DIVISOR:

Если товар не делится и его количество равно 2, то пишем <DIVISOR>1</DIVISOR> или вообще не пишем, и в <QTTY>2</QTTY>. (То есть DIVISOR=1(или просто нету) и QTTY=2).

Если товар делится предположим на 3 и его количество равно 2 целых пачки и 1/3 пачки, то пишем <DIVISOR>3</DIVISOR>, при этом <QTTY>7</QTTY>. (То есть DIVISOR=3 и QTTY=DIVISOR * «кол-во целых пачек»+ «разделенное количество»=3*2+1=7 ).При этом RPRICE=цене за полную неделенную пачку!

  • REG_PRICE - зарегистрированная цена в руб; (не обязательный) Numeric (15,2);
  • REG_PRICE_CUR - зарегистрированная цена в валюте; (не обязательный) Numeric (15,2);
  • REG_CURRENCY - валюта зарегистрированной цены. Три символа: USD, EUR, RUB (не обязательный)
  • ISGV - признак ЖВ; (не обязательный) 1 (если товар ЖВ) или 0 (если товар не ЖВ)

Пример пакета

Скачать пример накладной.

Для отправки накладной на корпоративный FTP, файл накладной именуется по маске:

<CLIENT_ID>_<номер накладной>.xml (можно архивировать в zip)

  • <Client_ID> - ИД грузополучателя. Всегда семь цифр, ведущие нули обязательны, (1265002, 0615003, 0015003). Поставщик должен хранить поля CLIENT_ID, DEP_ID из заявки. Если заявка сделана не в системе ПО ИнфоАптека 3.0 уточнить значение полей у специалиста сопровождения.

Пример: 0123001_2845395.xml

Отказ

Заголовок пакета

<PACKET TYPE="13" NAME="Отказы" FROM="АHOLD">
  … тело пакета
</PACKET>

Обязательные атрибуты элемента PACKET:

  • TYPE - тип пакета, для отказа всегда равен 13.
  • FROM - код узла аптечной сети (NODE_ID). Тип Integer.

Заголовок отказа

<NON_SUPPLY_ITEMS>
  ... позиции отказа
</NON_SUPPLY_ITEMS>

Элемент NON_SUPPLY_ITEMS не имеет атрибутов, так как в одном пакете могут быть собраны отказанные позиции нескольких заявок.

Позиции отказа

<NON_SUPPLY_ITEMS>
  <ITEM>
    <ORDER_ID>141000</ORDER_ID> 
    <EXT_CODE>11597</EXT_CODE> 
    <QTTY>3</QTTY> 
    <NAME>5-НОК ТАБЛ. П/О 50МГ N50 РОССИЯ-СЛОВЕНИЯ</NAME> 
    <PRICE>62,92</PRICE> 
  </ITEM>
  <ITEM>
    <ORDER_ID>139000</ORDER_ID> 
    <EXT_CODE>45</EXT_CODE> 
    <QTTY>5</QTTY> 
  </ITEM>
 
  ... позиции отказа
 
</NON_SUPPLY_ITEMS

Раздел ITEM - отказанные позиции. Каждая позиция содержит следующие атрибуты:

  • ORDER_ID - ИД заявки, по которой идет отказ. Тип Bigint. Обязательно, транслируется из заявки по которой идет отказ.
  • EXT_CODE - код товара в справочнике поставщика.Тип Integer.
  • QTTY - кол-во, которое поставщик не может поставить (всегда>0). Тип Integer.
  • NAME - название товара (не обязательный атрибут). Varchar(100).
  • PRICE - цена (не обязательный атрибут). Может быть использована для уточнения позиции по которой отказ, если в заявке две позиции с одинковым кодом товара, но с разными ценами. Тип Numeric (15,2).

Пример пакета

Скачать пример отказа

Для отправки отказа на корпоративный FTP, файл отказа именуется по маске:

<CLIENT_ID>_<номер заявки в системе поставщика>.xml (можно архивировать в zip)

  • <Client_ID> - ИД грузополучателя. Всегда семь цифр, ведущие нули обязательны, (1265002, 0615003, 0015003). Поставщик должен хранить поля CLIENT_ID, DEP_ID из заявки. Если заявка сделана не в системе ПО ИнфоАптека 3.0 выгружать отказы не имеет смысла.

Пример: 0123001_2845395.xml


1) , 2)
выделенные поля обязательны
Только авторизованные участники могут оставлять комментарии.
модули/склад/обмен_информацией/формат_электронного_обмена.txt · Последние изменения: 2018/01/22 11:52 — Андрей Прокопенко