ООО "Стратегия фарма"

Обмен данными

Общие положения

Обмен данными между Стратегия Фарма (СФ) и внешними учётными системами осуществляется с помощью файлов.

Файлы выкладываются на FTP-сервер.

Данные о товародвижении передаются в терминах и кодах справочников товаров внешних учётных систем.

Чем отличается товар от номенклатуры

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

Товар – группировка номенклатур.

Примеры номенклатур:

Пример товара:

В учётной системе товародвижение может вестись в терминах номенклатур или в терминах товаров. Поскольку маркетинговые контракты заключаются с конкретными производителями, данные о товародвижении необходимо детализировать до номенклатуры. Передавать код номенклатуры обязательно - без него реализовать сопоставление партий товародвижения "на лету" невозможно. Если в аптеке справочник товаров не детализирован до номенклатуры, в качестве кода номенклатуры должна выгружаться "сцепка полей" [“код товара”_”код производителя”].

Получение данных от систем товарного учёта (СТУ)

Общие сведения

Данные об остатках и движениях каждой партии товара имеют вид оборотной ведомости за каждый день.

Например, по партии №1 были движения:

В этом случае в файле должны быть:

Необходимо соблюсти основной принцип учета:[входящий остаток] + [приход] – [расход] = [исходящий остаток].

Отрицательные остатки недопустимы.

Данные о товародвижении одной аптеки передаются в одном файле, предпочтительное имя файла ГГГГММДДЧЧММСС_clientid_bat.xml, где client_id - код клиента(юр. лица).

Разделителем между целой и дробной частями чисел является точка.

Последовательность действий по организации процесса получения данных от СТУ

  1. Вы формируете и даёте нам два файла: первичная выгрузка и регулярная выгрузка, удовлетворяющие спецификации. Как правило, приходится сделать несколько итераций, пока ваши файлы начнут соответствовать спецификации.
  2. После удачной загрузки формируем оборотную ведомость и передаём вам для сравнения с оборотной ведомостью, полученной непосредственно в СТУ.
  3. Добиваемся отсутствия расхождения цифр.

Спецификация файлов с данными о товародвижении

Файлы с товародвижением бывают двух видов:

Первичная выгрузка - данные по аптеке выгружаются впервые.

Первичная выгрузка используется для учёта остатков, которые были в аптеке на начало стартового периода передачи данных из этой аптеки, а также для замены неверных остатков. Например, если аптека начинает выгружать данные начиная с 07.01, и в партии №1 на начало 07.01 был остаток 2, то его надо указать, чтобы не нарушить основной принцип [входящий остаток] + [приход] – [расход] = [исходящий остаток].

Поэтому в этом случае в файле первичной выгрузки по партии №1 должны быть:

При этом если партия №2 появилась 07.01 или позже, то по ней никаких виртуальных движений не создается, так как на начало 07.01 по этой партии остаток был 0). Соответственно:

Состав данных и требования к файлу

Регулярная выгрузка

Первичная выгрузка состоялась, данные из аптек должны выгружать регулярно.

Регулярная выгрузка отличается от первичной:

Например, если указан период с 08.01.2019, то в файле по партии №1 должно быть:

Состав данных и требования к файлу

Логика обработки регулярной выгрузки

Описание файла с данными о товародвижении аптеки из учётной системы (версия 1)

Заголовок файла


<?xml version="1.0" encoding="UTF-8"?>
<map-actions client_id=Код_клиента>
<data_version>1</data_version> - версия формата данных. Инкрементируется при внесении изменений в формат данных.

Партия товара

<action type="batches" datestart="2017-04-01T00:00:00" dateend="2017-04-01T23:59:59" map_pharmacy_ids="1,10"> - datestart и dateend - даты периода выгрузки в формате ДатаВремя(2017-04-01T23:59:59). Для первичной выгрузки эти параметры не указываются. map_pharmacy_ids - список кодов аптек в справочнике подразделений учётной системы (через запятую), по которым содержит данные конкретный файл.

<batches>

<batch>

Имя тега Описание Комментарий
ap_batch_idИдентификатор партии в учётной системеСтрока(100)
map_pharmacy_idКод аптеки в справочнике подразделений учётной системы (подразделение-владелец базы)Строка(100)
map_pharmacy_nameНаименование аптекиСтрока(500)
map_nomenclature_idКод номенклатуры в справочникеСтрока(100)
map_nomenclature_nameПолное наименование номенклатуры в учётной системеСтрока(500)
map_producer_idКод производителя номенклатурыСтрока(100)
map_producer_nameПолное наименование производителя в учётной системе.Строка(500)
map_producer_country_idКод страны производителя (может не быть)Строка(100)
map_producer_country_nameПолное наименование страны производителя в учётной системе (может не быть)Строка(500)
map_supplier_codeКод поставщика в учётной системеСтрока(100)
map_supplier_tinИНН поставщика в учетной системеСтрока(100)
batch_doc_dateДата документа поставщика (местная). Время всегда 0 часовДатаВремя(2017-04-01T00:00:00)
batch_doc_number№ документа поставщикаСтрока(100)
purchase_price_ndsЦена закупочная с НДСЧисло(10,2)
purchase_nds%НДС закупочныйЦелое число
retail_price_ndsЦена розничная с НДСЧисло(10,2)
retail_nds%НДС розничныйЦелое число
barcodeЗаводской штрих-кодЦелое число
sign_comissionПризнак комиссионного товараЦелое число, 0 - балансовый, 1 - комиссионный
nomenclature_codesМассив кодов номенклатуры в разных справочниках... Указываются только не пустые кодыструктура
internet_zakazПризнак оприходования товара от оператора дистанционной торговли (оприходование "не своего товара") Указывается наименование конкретного оператора в виде доменного имени в нижнем регистре apteka.ru – товар Аптека.ру, zdravcity.ru – товар Здравсити, eapteka.ru – товар Еаптека и т. д.
ВАЖНО! Если заказ не выкуплен и продажа происходит с остатка аптеки, признак интернет заказа все равно устанавливается.

</batch>

</batches>

</action>

Структура поля nomenclature_codes


<nomenclature_codes>
<code owner="Владелец_справочника_1">Код_в_справочнике</code>
...
<code owner="Владелец_справочника_N">Код_в_справочнике</code>
</nomenclature_codes>

Значения атрибута owner ("Владелец_справочника")

Добавление иных владельцев справочника возможно по договоренности.

Тип данных поля "Код_в_справочнике": Строка(100)

Пример заполнения:


<nomenclature_codes>
<code owner="map">100:20:135</code>
<code owner="puls">1025</code>
</nomenclature_codes>

Партия - неделимый идентификатор товара, отражающий полный набор свойств этого товара, как наименование, ЗШК, МНН, производитель и тому подобные, так и серия, поставщик, цены и тому подобные. Допускается дублирование значений этих свойств - может быть несколько партий товара с абсолютно одинаковыми значениями всех свойств. Не допускается у одной и той же партии одномоментно разные значения одних и тех же свойств. Один из примеров партии - строка приходного документа.

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

В качестве значения поля "Код номенклатуры в учетной системе" <code owner="map"> указывается код товара с детализацией до производителя и страны. То есть если в системе учёта код товара не отражает конкретного производителя и страну - при выгрузке данных в этом поле нужно указывать "сцепку" полей "код товара"_"код производителя"_"код страны".

Товародвижение Аптек

<action type="distributions" datestart="2017-04-01T00:00:00" dateend="2017-04-01T23:59:59" map_pharmacy_ids="1,10"> // datestart и dateend - даты периода выгрузки в формате ДатаВремя(2017-04-01T23:59:59). Для первичной выгрузки эти параметры не указываются. map_pharmacy_ids - список кодов аптек в справочнике подразделений учётной системы через запятую, по которым выполнена выгрузка.

<distributions>

<distribution>

Имя тегаОписаниеКомментарий
map_pharmacy_idКод аптеки в справочнике подразделений учётной системыСтрока(100)
distribution_idУникальный № записи о движении в учётной системеСтрока(100)
batch_idИдентификатор партии в учётной системеСтрока(100)
doc_dateДата и время операции (местные в аптеке)ДатаВремя (2017-04-01T23:59:59)
doc_typeТип документа. Значения:
1- мелкооптовый отпуск;
2 – продажа через ККМ;
3 – приход товара от поставщика (закупка),
4 – возврат от покупателя,
5 – возврат поставщику,
6 – межскладская передача приход,
7 – межскладская передача расход,
8 – Списание,
9 – Ввод остатков.
Целое число
doc_number№ документа. Для документов типа 1,3 - номер внешней накладной, для типа 2 – № Z-отчёта, для остальных - внутренний №Строка(100)
pos_number№ кассового аппарата (только для документов типа 2)Строка(100)
check_number№ чека (только для документов типа 2). Если известен № чека из кассы – указываем его, иначе указываем внутренний № чека.Целое число
check_unique_numberУникальный идентификатор чека (только для документов типа 2)Строка(100)
check_line_unique_numberНомер строки чекаЦелое число
quantityКоличество товараЧисло(15,6)
purchase_sum_ndsСумма в ценах закупочных с НДСЧисло(10,2)
retail_sum_ndsСумма в ценах розничных с НДСЧисло(10,2)
discount_sumСумма всех скидок по строке. retail_sum_nds - discount_sum должно равняться сумме оплатыЧисло(10,2)
resale_signПризнак перепродажи, то есть продажи товара другим аптечным учреждениям или закупки товара у других аптечных учреждений.Имеет смысл для документов типа 1 и 3. Целое число: 1 - перепродажа, 0 - нет
ofd_operator_codeКод оператора фискальных данныхСтрока(50)
fn_doc_number№ фискального документаСтрока(50)
fn_doc_signфискальный признак документаСтрока(50)
fn_number№ фискального накопителяСтрока(50)
fn_doc_dateдата/время фискального документаДатаВремя (2017-04-01T23:59:59)
internet_zakazПризнак движения товара от оператора дистанционной торговли либо забронированного с помощью агрегатора/справочной службыНаименование оператора в виде доменного имени в нижнем регистре,
apteka.ru – товар Аптека.ру,
zdravcity.ru – товар Здравсити,
eapteka.ru – товар Еаптека

<distribution>

<distributions>

</action>

Остатки Аптек

<action type="remnants" datestart="2017-04-01T00:00:00" dateend="2017-04-01T23:59:59" map_pharmacy_ids="1,10"> - datestart и dateend - даты периода выгрузки в формате ДатаВремя(2017-04-01T23:59:59). Для первичной выгрузки эти параметры не указываются. map_pharmacy_ids - список кодов аптек в справочнике подразделений учётной системы (через запятую), по которым выполнена выгрузка.

<remnants>

<remnant>

Имя тегаОписаниеКомментарий
map_pharmacy_idКод аптеки в справочнике подразделений учётной системыСтрока(100)
batch_idИдентификатор партии в учётной системеСтрока(100)
dateДата остатка (местная для аптеки). Время всегда 00:00:00ДатаВремя (2017-04-01T00:00:00)
opening_balanceВходящий остаток (количество)Число(15,6)
closing_balanceИсходящий остаток (количество)Число(15,6)
input_purchasing_price_balanceВходящий остаток в закупочных ценах с НДСЧисло(10,2)
output_purchasing_price_balanceИсходящий остаток в закупочных ценах с НДСЧисло(10,2)
input_retail_price_balanceВходящий остаток в розничных ценах с НДСЧисло(10,2)
output_retail_price_balanceИсходящий остаток в розничных ценах с НДСЧисло(10,2)

<remnant>

<remnants>

</action>