Co to jest EPCIS ?
EPCIS czyli Electronic Product Code Information Services jest częścią sieci EPCglobal, która dostarcza bezpiecznego środowiska do przechowywania konkretnych danych o produktach oraz ich wymiany pomiędzy partnerami. Innymi słowy jest to standard używany do śledzenia postępu obiektów, w czasie rzeczywistym, w trakcie ich przepływu w łańcuchu dostaw. EPCIS przechowuje informacje o tym kiedy dany obiekt został zarejestrowany, w jakim miejscu oraz z jakim krokiem biznesowym; dla każdego rejestrowanego obiektu.
Zdarzenia (Event)
System EPCIS operuje na definicjach zdarzeń. Każda dana w systemie jest przechowywana w formie jednego z 5 typów zdarzeń:
-
ObjectEvent
-
AggregationEvent
-
TransactionEvent
-
TransformationEvent
-
SensorEvent
Każde ze zdarzeń zdefiniowane jest jako plik w formacie XML o określonej strukturze, zgodnej ze standardem GS1 EPCIS 1.1. Przykłady definicji zdarzeń:
Object event
Object event jest wykorzystywany kiedy (EPC) obiektu pojawi się w danej lokacji.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE project>
<epcis:EPCISDocument
xmlns:epcis="urn:epcglobal:epcis:xsd:1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
creationDate="2005-07-11T11:30:47.0Z"
schemaVersion="1.2">
<EPCISBody>
<EventList>
<ObjectEvent>
<eventTime>2005-04-03T20:33:31.116-06:00</eventTime>
<eventTimeZoneOffset>-06:00</eventTimeZoneOffset>
<epcList>
<epc>urn:epc:id:sgtin:0614141.107346.2017</epc>
<epc>urn:epc:id:sgtin:0614141.107346.2018</epc>
</epcList>
<action>OBSERVE</action>
<bizStep>urn:epcglobal:cbv:bizstep:shipping</bizStep>
<disposition>urn:epcglobal:cbv:disp:in_transit</disposition>
<readPoint>
<id>urn:epc:id:sgln:0614141.07346.1234</id>
</readPoint>
<bizTransactionList>
<bizTransaction type="urn:epcglobal:cbv:btt:po">
http://transaction.acme.com/po/12345678
</bizTransaction>
</bizTransactionList>
</ObjectEvent>
</EventList>
</EPCISBody>
</epcis:EPCISDocument>
Aggregation event
Aggregation event wykorzystywany jest w procesie kompletacji - kiedy wiele obiektów staje się jednym.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epcis:EPCISDocument
xmlns:epcis="urn:epcglobal:epcis:xsd:1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
creationDate="2005-07-11T11:30:47.0Z"
schemaVersion="1.2">
<EPCISBody>
<EventList>
<AggregationEvent>
<eventTime>2013-06-08T14:58:56.591Z</eventTime>
<eventTimeZoneOffset>+02:00</eventTimeZoneOffset>
<parentID>urn:epc:id:sscc:0614141.1234567890</parentID>
<childEPCs>
<epc>urn:epc:id:sgtin:0614141.107346.2017</epc>
<epc>urn:epc:id:sgtin:0614141.107346.2018</epc>
</childEPCs>
<action>OBSERVE</action>
<bizStep>urn:epcglobal:cbv:bizstep:receiving</bizStep>
<disposition>urn:epcglobal:cbv:disp:in_progress</disposition>
<readPoint>
<id>urn:epc:id:sgln:0614141.00777.0</id>
</readPoint>
<bizLocation>
<id>urn:epc:id:sgln:0614141.00888.0</id>
</bizLocation>
<extension>
<childQuantityList>
<quantityElement>
<epcClass>urn:epc:idpat:sgtin:4012345.098765.*</epcClass>
<quantity>10</quantity>
</quantityElement>
<quantityElement>
<epcClass>urn:epc:class:lgtin:4012345.012345.998877</epcClass>
<quantity>200.5</quantity>
<uom>KGM</uom>
</quantityElement>
</childQuantityList>
</extension>
</AggregationEvent>
</EventList>
</EPCISBody>
</epcis:EPCISDocument>
Transaction event
Transaction event opisuje transakcje biznesowe związane z przedmiotem.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epcis:EPCISDocument
schemaVersion="1.2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
creationDate="2013-06-04T14:59:02.099+02:00"
xmlns:epcis="urn:epcglobal:epcis:xsd:1">
<EPCISBody>
<EventList>
<TransactionEvent>
<eventTime>2005-04-03T20:33:31.116-06:00</eventTime>
<eventTimeZoneOffset>-06:00</eventTimeZoneOffset>
<bizTransactionList>
<bizTransaction type="urn:epcglobal:cbv:btt:po">
http://transaction.acme.com/po/12345678
</bizTransaction>
</bizTransactionList>
<parentID>urn:epc:id:sscc:0614141.1234567890</parentID>
<epcList>
<epc>urn:epc:id:sgtin:0614141.107346.2017</epc>
<epc>urn:epc:id:sgtin:0614141.107346.2018</epc>
</epcList>
<action>ADD</action>
<bizStep>urn:epcglobal:cbv:bizstep:shipping</bizStep>
<disposition>urn:epcglobal:cbv:disp:in_transit</disposition>
<readPoint>
<id>urn:epc:id:sgln:0614141.07346.1234</id>
</readPoint>
<bizLocation>
<id>urn:epc:id:sgln:0614141.00888.0</id>
</bizLocation>
<extension>
<quantityList>
<quantityElement>
<epcClass>urn:epc:class:lgtin:4012345.011111.4444</epcClass>
<quantity>10</quantity>
<uom>KGM</uom>
</quantityElement>
</quantityList>
<sourceList>
<source type="urn:epcglobal:cbv:sdt:possessing_party">
urn:epc:id:sgln:4012345.00001.0
</source>
<source type="urn:epcglobal:cbv:sdt:location">
urn:epc:id:sgln:4012345.00225.0
</source>
</sourceList>
<destinationList>
<destination type="urn:epcglobal:cbv:sdt:owning_party">
urn:epc:id:sgln:0614141.00001.0
</destination>
<destination type="urn:epcglobal:cbv:sdt:location">
urn:epc:id:sgln:0614141.00777.0
</destination>
</destinationList>
</extension>
</TransactionEvent>
</EventList>
</EPCISBody>
</epcis:EPCISDocument>
Transformation event
Transformation event jest wykorzystywany w sytuacjach kiedy obiekt przekształca się (Przykład produkcyjny - surowce przekształcane są w produkt).
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE project>
<epcis:EPCISDocument
schemaVersion="1.2"
creationDate="2013-06-04T14:59:02.099+02:00"
xmlns:epcis="urn:epcglobal:epcis:xsd:1">
<EPCISBody>
<EventList>
<extension>
<TransformationEvent>
<eventTime>2013-10-31T14:58:56.591Z</eventTime>
<eventTimeZoneOffset>+02:00</eventTimeZoneOffset>
<inputEPCList>
<epc>urn:epc:id:sgtin:4012345.011122.25</epc>
<epc>urn:epc:id:sgtin:4000001.065432.99886655</epc>
</inputEPCList>
<inputQuantityList>
<quantityElement>
<epcClass>urn:epc:class:lgtin:4012345.011111.4444</epcClass>
<quantity>10</quantity>
<uom>KGM</uom>
</quantityElement>
<quantityElement>
<epcClass>urn:epc:class:lgtin:0614141.077777.987</epcClass>
<quantity>30</quantity>
</quantityElement>
<quantityElement>
<epcClass>urn:epc:idpat:sgtin:4012345.066666.*</epcClass>
<quantity>220</quantity>
</quantityElement>
</inputQuantityList>
<outputEPCList>
<epc>urn:epc:id:sgtin:4012345.077889.25</epc>
<epc>urn:epc:id:sgtin:4012345.077889.26</epc>
<epc>urn:epc:id:sgtin:4012345.077889.27</epc>
<epc>urn:epc:id:sgtin:4012345.077889.28</epc>
</outputEPCList>
<bizStep>urn:epcglobal:cbv:bizstep:transforming</bizStep>
<disposition>urn:epcglobal:cbv:disp:in_progress</disposition>
<readPoint>
<id>urn:epc:id:sgln:4012345.00001.0</id>
</readPoint>
</TransformationEvent>
</extension>
</EventList>
</EPCISBody>
</epcis:EPCISDocument>
Sensor event
Sensor event wykorzystywany jest do raportowania informacji sensorycznych .
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE project>
<epcis:EPCISDocument
schemaVersion="1.2"
creationDate="2013-06-04T14:59:02.099+02:00"
xmlns:epcis="urn:epcglobal:epcis:xsd:1">
<EPCISBody>
<EventList>
<SensorEvent>
<eventTime>2017-02-24T11:58:56.591Z</eventTime>
<eventTimeZoneOffset>+01:00</eventTimeZoneOffset>
<readPoint>
<id>gps_tracker</id>
</readPoint>
<measurmentList>
<measurment>
<value>25</value>
<uom>Longtitude</uom>
</measurment>
<measurment>
<value>32</value>
<uom>Lattitude</uom>
</measurment>
<measurment>
<value>1</value>
<uom>StatusStatus</uom>
<eventTime>2020-10-31T10:58:56.591Z</eventTime>
<eventTimeZoneOffset>+02:00</eventTimeZoneOffset>
</measurment>
</measurmentList>
</SensorEvent>
</EventList>
</EPCISBody>
</epcis:EPCISDocument>
Zapytania (Query)
<?xml version="1.0" ?>
<epcisq:EPCISQueryDocument
xmlns:epcisq="urn:epcglobal:epcis-query:xsd:1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaVersion="1"
creationDate="2016-07-29T09:13:06.368Z">
<EPCISBody>
<epcisq:Poll>
<queryName>SimpleEventQuery</queryName>
<params>
<param>
<name>WD_ReadPoint</name>
<value xsi:type="epcisq:ArrayOfString">
<string>urn:epc:id:sgln:4012345.00001.0</string>
</value>
</param>
</params>
</epcisq:Poll>
</EPCISBody>
</epcisq:EPCISQueryDocument>
Jak zacząć ?
Serwis do akwizycji i odpytywania danych jest oparty o zasady serwisów typu REST. Do obsługi służą dwa interfejsy:
-
Capture: Rejestracja danych. adres bazy testowej: https://epcis.ilim.poznan.pl/api/capture
-
Query: Odpytywanie bazy. adres bazy testowej: https://epcis.ilim.poznan.pl/api/query
Przy zapisywaniu danych do bazy (Capture) oraz odpytywaniu (Query) należy pamiętać aby do nagłówków zapytań POST dodać następujące nagłówki:
-
Content-Type application/xml
-
token TOKEN UZYSKANY PO ZALOGOWANIU
Aby przetestować działanie polecamy wykorzystanie klienta RESTowego (przykładowo RESTLET lub POSTMAN)
Logowanie
Aby rozpocząć korzystanie z serwisu, należy się zalogować. Każde logowanie powoduje zmianę/odświeżenie TOKENU. Czas sesji ustalony jest na 20 minut. Jeśli czas bezczynności jest dłuższy niż 20 minut, należy zadbać aby zaktualizować TOKEN. Przykład logowania o paramertach: login: test hasło: test. Adres do logowania: https://epcis.ilim.poznan.pl/api/login
<epcis:EPCISAuth>
<login>test@test.com</login>
<password>test</password>
</epcis:EPCISAuth>
W odpowiedzi na poprawną próbę logowania, serwis odpowiada komunikatem, w którym zawarty jest TOKEN. Token należy umieszczać w nagłówkach zapytań do bazy
Odpowiedź na zapytanie
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDate="2017-03-01T13:00:18.012+01:00">
<errors>
<0>
</errors>
<results>
<0>
<token>TOKEN</token>
</0>
</results>
</response>
Zapisanie danych do bazy (Capture)
Jak wcześniej nadmieniono, do zapytania typu Capture należy dodać nagłówki token oraz Content-Type
Przykład:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE project>
<epcis:EPCISDocument
xmlns:epcis="urn:epcglobal:epcis:xsd:1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
creationDate="2005-07-11T11:30:47.0Z"
schemaVersion="1.2">
<EPCISBody>
<EventList>
<ObjectEvent>
<eventTime>2005-04-03T20:33:31.116-06:00</eventTime>
<eventTimeZoneOffset>-06:00</eventTimeZoneOffset>
<epcList>
<epc>urn:epc:id:sgtin:0614141.107346.2017</epc>
<epc>urn:epc:id:sgtin:0614141.107346.2018</epc>
</epcList>
<action>OBSERVE</action>
<bizStep>urn:epcglobal:cbv:bizstep:shipping</bizStep>
<disposition>urn:epcglobal:cbv:disp:in_transit</disposition>
<readPoint>
<id>urn:epc:id:sgln:0614141.07346.1234</id>
</readPoint>
<bizTransactionList>
<bizTransaction type="urn:epcglobal:cbv:btt:po">
http://transaction.acme.com/po/12345678
</bizTransaction>
</bizTransactionList>
</ObjectEvent>
</EventList>
</EPCISBody>
</epcis:EPCISDocument>
Odpytanie bazy danych o dane (Query)
Podobnie jak przy wykorzystaniu interfejsu Capture, do nagłówków zapytań typu Query należy dodać nagłówki token oraz Content-Type
Przykład:
<?xml version="1.0" ?>
<epcisq:EPCISQueryDocument
xmlns:epcisq="urn:epcglobal:epcis-query:xsd:1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaVersion="1"
creationDate="2016-07-29T09:13:06.368Z">
<EPCISBody>
<epcisq:Poll>
<queryName>SimpleEventQuery</queryName>
<params>
<param>
<name>WD_ReadPoint</name>
<value xsi:type="epcisq:ArrayOfString">
<string>urn:epc:id:sgln:4012345.00001.0</string>
</value>
</param>
</params>
</epcisq:Poll>
</EPCISBody>
</epcisq:EPCISQueryDocument>
Zmiana hasła/zapomniane hasło
Aby zresetować hasło w celu jego zmiany, lub ustawić nowe hasło w przypadku zapomnienia poprzedniego należy dokonać operacji resetu hasła. W tym celu należy wysłać XML z prośbą o reset hasła. Adres: https://epcis.ilim.poznan.pl/api/forgot
<epcis:EPCISAuth>
<login>test@test.com</login>
</epcis:EPCISAuth>
Po chwili na adres email (podany przy rejestracji, który w systemie używany jest również jako login użytkownika) przyjdzie email zawierający TOKEN do resetu hasła. Należy wtedy wysłać komunikat XML ustawiający nowe hasło. Adres: https://epcis.ilim.poznan.pl/api/reset
<epcis:EPCISAuth>
<password>nowe_haslo</password>
<token>token_otrzymany_mailem</token>
</epcis:EPCISAuth>
Po przeprowadzeniu tej procedury możliwe jest zalogowanie się przy wykorzystaniu nowo ustawionego hasła.