Опциональность элементов
Элементы сегмента имеют три типа опциональности:
M (mandatory) – обязательный элемент. Обычно обязательными элементами являются те, которые несут основную информацию сегмента. Например, в сегменте DTM (Date/Time Reference, описывает дату и/или время) элемент DTM-01 (Date/Time Qualifier, тип Даты и/или времени) обязателен, так как без него мы не могли бы определить, что именно это за дата. В нашем примере
DTM*002*20060625~
DTM*010*20060618~
Элементы DTM-01 имеют значения 002 и 010. Тип данных DTM-01 – ID, классификатор – 374 (Date/Time Qualifier, Code specifying type of date or time, or both date and time). По справочнику находим значения для 002 и 010:
002 Delivery Requested (запрашиваемая доставка)
010 Requested Ship (запрашиваемая погрузка)
Т.о. в документе указано, что для описанного товара дата погрузки – 18 Июня 2006 года, а дата доставки – 25 Июня 2006.
Если бы DTM-01 был бы опциональным (необязательным) элементом, и он бы отсутствовал в обоих сегментах, то получатель документа не мог бы определить, что это за даты.
O (optional) – необязательный, опциональный элемент. Эти элементы обычно несут второстепенную информацию, которая не обязательна для понимания информации, заключенной в сегменте. В нашем примере
PO1*004005006*10*EA*15**BP*123456321~
Можно заметить, что между элементами PO1-04 (значение 15) и элементом PO1-06 (значение BP) идет элемент PO1-05 который не имеет значения (пропущен). PO1-05 (Basis Unit Price Code, код, идентифицирующий тип цены единицы товара) является опциональным элементом. Этот элемент описывает тип цены, например BD (Before Discount, до скидки) или HF (Per 100 Feet, за 100 футов – например, для кабеля), или HP (Price per Hundred, цена за сотню) и т.д. В данном случае нам не нужно дополнительно указывать, что цена именно за единицу товара, поэтому в сегменте этот элемент пропущен.
C (conditional) – зависимый элемент, чья опциональность зависит от условий. В нашем примере:
PO1*004005006*10*EA*15**BP*123456321~
PO1-06 (Product/Service Id Qualifier, тип идентификатора товара/услуги) и PO1-07 (Product/Service Id, идентификатор товара/услуги) – примеры подобных элементов.
X12 определяет условие их опциональности так:
P0607 - If either PO1-06 or PO1-07 is present, then the other is required.
Тоесть если либо PO1-06, либо PO1-07 присутствует в сегменте, то второй – обязателен. В данном случае это очевидно – если есть идентификатор товара, то нам нужно знать его тип. И наоборот, если есть тип идентификатора, то было бы странно, если бы сам идентификатор отсутствовал.
Далее будут коротко рассмотрены основные типы правил и ограничений, которые стандарт накладывает на элементы сегмента.
Правила и ограничения
Для зависимых элементов в сегменте стандарт определяет набор правил/замечаний. Каждое правило имеет специальное имя-идентификатор. Имя-идентификатор «строится» по специальным правилам – первая буква определяет тип правила, далее идут числа, обозначающие позицию сегментов в элементе, для которых действует это правило. В зависимости от типа правила, позиции элементов так же идут в определенном порядке:
- С (Conditional) - зависимость опциональности одного элемента(ов) от существования другого (первого в описании):
- C0302 - If PO103 is present, then PO102 is required.
- C060504 - If PR106 is present, then PR105 and PR104 are required.
- P (Paired or multiple) - зависимость опциональности группы элементов (если хотя бы один из группы присутствует, то остальные обязательны):
- P0607 - If either PO106 or PO107 is present, then the other is required.
- P040506 - If either AT904, AT905 or AT906 are present, then the others are required.
- L (List Conditional) – зависимость трех и более элементов между собой, когда в случае существования первого в описании элемента обязателен как минимум один из остальных:
- L13101112 - If PO413 is present, then at least one of PO410, PO411 or PO412 is required.
- R (Required) – обязательность как минимум одного из перечисленных элементов:
- R1012 - At least one of PR110 or PR112 is required.
- R020607 - At least one of AT302, AT306 or AT307 is required.
- E (Exclusion) – только один из перечисленных элементов может присутствовать:
- E0309 - Only one of PSD03 or PSD09 may be present.
- E020607 - Only one of AT302, AT306 or AT307 may be present.
Стандарт может определять семантические правила для элементов сегмента. Эти замечания предназначены для лучшего понимания назначения элементов. Например, для сегмента PO1 существует такое семантическое замечание:
PO106 through PO125 provide for ten different product/service IDs per each item. For example: Case, Color, Drawing No., U.P.C. No., ISBN No., Model No., or SKU. (элементы, начиная с PO1-06 и заканчивая PO1-25 предоставляют 10 различных идентификаторов для каждого товара. Например: упаковка, цвет и т.д.).
Наконец, рассмотрим наш сегмент PO1 для примера, и посмотрим как стандарт X12 (версия 4010) описывает его элементы:
PO1*004005006*10*EA*15**BP*123456321~
Элемент | Описание | Тип данных | Значение |
PO1-01 | Assigned Identificator, присвоенный идентификатор |
O AN 1/20 |
004004005 |
PO1-02 | Quantity Ordered, количество заказанных экземпляров товара |
C R 1/15 |
10 |
PO1-03 | Unit/Basis Measurement Code, единица измерения количества товара |
O ID (355) 2/2 |
EA = Each |
PO1-04 | Unit Price, цена единицы товара |
C R 1/17 |
15 |
PO1-05 | Basis Unit Price Code, код, идентифицирующий тип цены единицы товара |
O ID (639) 2/2 |
- |
PO1-06 | Product/Service Id Qualifier, тип идентификатора товара/услуги |
C ID (235) 2/2 |
BP = Buyer's Part Number |
PO1-07 | Product/Service Id, идентификатор товара/услуги |
C AN 1/48 |
123456321 |
- C0302 - If PO103 is present, then PO102 is required.
- C0504 - If PO105 is present, then PO104 is required.
- P0607 - If either PO106 or PO107 is present, then the other is required.