Нормализиране на статусите за проследяване на пратки: Как да съпоставим събитията на превозвачите с единен модел на статуси
Нормализирането на статуса за проследяване на превозвачите означава превод на специфичните за превозвача кодове и съобщения от сканиранията към последователен модел на пратката, като същевременно се запазват оригиналните доказателства. За надеждно внедряване съпоставете всяко събитие с каноничен статус и причина, след което изчислете текущото състояние на пратката, като използвате времето на събитията, контекста на пратката и изрични правила за преход. Не приемайте автоматично, че най-новото получено съобщение е текущият статус на пратката.

Това ръководство е предназначено за разработчици, екипи по логистични операции и продуктови ръководители, които добавят проследяване към система за управление на поръчки, табло за поддръжка или работен процес за известяване на клиенти. Представеният по-долу модел е предложен модел за внедряване, а не официален стандарт на превозвач или възпроизвеждане на таксономията на статусите на конкретен доставчик на услуги за проследяване.
Разделяйте събитието на превозвача от състоянието на пратката
Събитието за проследяване описва нещо, съобщено за пратката: етикетът е създаден, пакетът е достигнал до обект или опитът за доставка е неуспешен. Състоянието на пратката е интерпретацията на приложението ви на съответните доказателства в определен момент. Тези понятия трябва да се съхраняват отделно.
Например пакетът може да има събитие за опит за доставка, последвано от събитие за пристигане в обект. Пристигането е полезна оперативна история, но не означава непременно, че състоянието на неуспешния опит е разрешено. Обратно, закъсняло сканиране, получено след потвърждение за доставка, не трябва автоматично да връща пакета в състояние на транзит.
Практичната архитектура има три слоя:
- Необработени доказателства: оригиналният полезен товар от превозвача или доставчика, включително кодове, текст, времеви маркери и идентификатори.
- Нормализирани събития: вашата интерпретация на всяко отделно събитие чрез версионирано правило за съпоставяне.
- Текуща проекция на пратката: състоянието, избрано от историята на събитията, заедно с всички активни условия и действия на клиента.
Това разделяне ви позволява да коригирате съпоставянията и да изграждате отново състоянията на пратките, без да изтривате оригиналния запис.
Определете компактен модел на статусите с отделни условия
Поддържането на едно поле за статус става трудно, когато то трябва едновременно да представя физическото движение, митническата обработка, проблемите с доставката и връщанията. Използвайте малък модел на жизнения цикъл, след което добавяйте по-конкретни условия и причини.
| Каноничен статус | Препоръчително значение | Граница, която трябва да се запази |
|---|---|---|
| UNKNOWN | Доказателствата не могат да бъдат съпоставени уверено. | Не е еквивалентно на изгубено или забавено. |
| PRE_TRANSIT | Съществува електронна информация за пратката, без потвърдено физическо приемане. | Създаването на етикет не доказва, че превозвачът притежава пратката. |
| IN_TRANSIT | Пратката се движи през мрежата за доставка или се обработва в нея. | Не означава, че доставката ще се извърши същия ден. |
| OUT_FOR_DELIVERY | Източникът изрично съобщава, че пратката е изпратена за опит за доставка. | Пристигането в местен обект е недостатъчно. |
| READY_FOR_PICKUP | Пратката е изрично достъпна за получаване от получателя. | Самото пристигане в пункт за получаване може да не потвърждава готовност. |
| DELIVERED | Доставката е изрично потвърдена за съответния етап на пратката. | Предаването между превозвачи не е непременно доставка до получателя. |
| CANCELED | Източникът изрично потвърждава анулирането на записа за пратката. | Анулирането на поръчка не доказва, че пакетът е спрял да се движи. |
Поддържайте условия като CUSTOMS_PROCESSING, DELIVERY_ATTEMPT_FAILED, ADDRESS_ISSUE или DELAY_REPORTED извън основното поле на жизнения цикъл. Пратката може да остане IN_TRANSIT, докато проблем с адреса изисква внимание. Не определяйте рутинната митническа обработка като изключение, освен ако източникът не съобщава за задържане, проблем или необходимо действие.
Представяйте посоката отделно чрез поле като journey_type. Връщането може да има собствени състояния на транзит и доставка. Така се избягва тълкуването на доставката обратно до подателя като успешна доставка до купувача.
Изградете записа на събитието, преди да напишете правилата за съпоставяне
Нормализираният запис трябва да съдържа достатъчно контекст, за да обясни съпоставянето и да възпроизведе резултата. Полезна начална схема включва:
- Идентичност: вътрешен идентификатор на пратката, идентификатор на превозвача, номер за проследяване, източник и етап на пратката.
- Оригинални доказателства: необработен код на събитието, необработено описание, идентификатор на събитието от източника, когато е предоставен, и препратка към оригиналния полезен товар.
- Време: време на настъпване на събитието, информация за часовата зона, време на получаване и точност на времевия маркер.
- Интерпретация: каноничен статус, условие, код на причината, тип на пътуването и изискване за действие.
- Проследимост: идентификатор на правилото за съпоставяне, версия на съпоставянето и категория на увереността.
Поддържайте времето на настъпване на събитието отделно от времето, когато системата ви е получила актуализацията. Уебхук, получен следобед, може да описва сканиране от сутринта. Отговорът от периодично извикване също може да съдържа няколко исторически събития, а не едно ново събитие.
Използвайте документиран формат за времеви маркери като RFC 3339, когато са известни часът и отместването. Ако източникът предоставя местно време без надеждно отместване, запазете това ограничение, вместо да добавяте невярно обозначение UTC. Съхранявайте събитията само с дата като доказателства само с дата, вместо да измисляте точен час на сканиране.
Съхранявайте необработените полезни товари при подходящ контрол на достъпа и правила за запазване. Те може да съдържат данни за получателя или друга информация, която не принадлежи в широко достъпна аналитична таблица.
Съпоставяйте първо кодовете на превозвача, а след това използвайте текста внимателно
Започнете с правила, ограничени до конкретен източник и превозвач. Код като 01 няма надеждно значение извън документирания си контекст. Когато източникът разграничава услуги, региони или етапи, включете тези измерения, ако влияят на интерпретацията.
Използвайте следния ред на съпоставяне като стандартно правило за внедряване:
- Съпоставете документиран структуриран код на събитие и всички задължителни уточнения.
- Използвайте документиран статус или подстатус на източника, когато той ясно описва обработваното събитие.
- Прилагайте тясно обхватни текстови правила за известни съобщения, при които липсват достатъчни структурирани полета.
- Оставяйте нерешените събития без съпоставяне и изпращайте повтарящите се случаи за преглед.
Първо установете дали полето за статус на доставчика описва отделно събитие или текущото обобщение на пратката. Копирането на обобщение на ниво пратка върху всяко историческо събитие може да накара по-ранните сканирания да изглеждат като потвърждения за доставка.
Избягвайте глобални правила по ключови думи като „съдържа доставено“. Фразата „не е доставено“ също би съвпаднала, както и съобщение, описващо доставка до логистичен партньор. Текстовите правила се нуждаят от обработка на отрицанията, езиков контекст и изключения. Машинният превод може да помогне на проверяващия да разбере съобщението, но преведеният текст не трябва мълчаливо да се превръща в авторитетно определение на събитието.
Илюстративни съпоставяния и техните ограничения
Примерите по-долу използват измислени съобщения, за да демонстрират проектирането на правила. Те не са проверени кодове на превозвачи или точни съобщения от конкретен превозвач.
- „Данните за пратката са изпратени“: съпоставете с
PRE_TRANSIT, когато определението на източника показва само електронна информация. - „Приета в обекта на произход“: съпоставете с
IN_TRANSIT, когато събитието потвърждава физическото приемане. - „Получателят не е наличен; опитът е неуспешен“: запишете
DELIVERY_ATTEMPT_FAILEDи оценете жизнения цикъл въз основа на заобикалящите доказателства. Не правете извода, че е възможно получаване от пункт. - „На разположение за получаване“: съпоставете с
READY_FOR_PICKUP, когато източникът потвърждава готовността за получаване от получателя. - „Предадена на партньор за доставка“: запишете предаването и запазете подходящо състояние на транзит, вместо да отбелязвате доставката до получателя като завършена.
Всяко правило трябва да има кратка обосновка и собственик. Когато специалист по операциите оспори съпоставяне, екипът трябва да може да идентифицира точното правило, вместо да извежда обратно етикет, видим за клиента.
Изчислявайте текущото състояние с детерминистичен редуктор
Редукторът е функцията, която оценява нормализираните събития и създава текущата проекция на пратката. Той трябва да връща един и същ резултат за едни и същи доказателства и версия на правилата, независимо колко пъти входът е възпроизведен.
Премахвайте дубликати, без да изтривате значими сканирания
Предпочитайте стабилен идентификатор на събитието от източника, когато такъв съществува. В противен случай създайте ключ за премахване на дубликати от налични атрибути като идентичност на пратката, превозвач, код, време на настъпване и местоположение. Съобразете се с точността на времевите маркери и поведението на източника. Две сканирания с идентични описания не са непременно дубликати, особено ако пакетът посещава повторно даден обект.
Подреждайте събитията, без да приемате идеално синхронизирани часовници
Използвайте надеждни времена на настъпване и документирана информация за последователността, когато е налична. Времето на получаване може да помогне за разрешаване на равенства, но не трябва рутинно да отменя по-ранно време на настъпване. Ако времевите маркери си противоречат или не могат да бъдат надеждно сравнени, запазете неяснотата, вместо да създавате изкуствена сигурност.
Проверявайте преходите, вместо да задавате универсален ранг
Простото числово подреждане на статусите не може да представи всеки път на пратката. Пакетът може да премине от изпратен за доставка обратно към транзит след неуспешен опит. Възможността за получаване от пункт може да изтече. Изрична корекция може да обезсили потвърждение за доставка.
Определете разрешените преходи и доказателствата, които всеки от тях изисква. Третирайте доставения статус като защитен от обикновени по-стари сканирания, но допускайте документирана корекция или оторизирано оперативно заместване. Записвайте причината и източника на всяко заместване.
Проследявайте активните условия независимо
По-късно сканиране на движение може да покаже напредък, без да доказва, че проблем с плащането или адреса е разрешен. Определете правила за изчистване, специфични за всяко условие: изрично разрешаване, логически разрешаващо събитие или оторизирано ръчно действие. Не изчиствайте всяко условие само защото е пристигнало друго събитие.
Също така различавайте забавяне, съобщено от превозвача, от вашия собствен сигнал за неактивност. Липсата на нови сканирания е наблюдение относно актуалността на данните, а не доказателство, че пакетът е изгубен.
Обработвайте предаванията между превозвачи и връщанията като свързани пътувания
При трансграничното проследяване може да участват множество превозвачи и идентификатори. Поддържайте вътрешна идентичност на пратката и прикачвайте специфичните за превозвача препратки за проследяване към съответните етапи. Свързвайте препратките чрез предоставени от източника зависимости или проверени оперативни данни, а не само чрез сходни дестинации или близки времеви маркери.
Събитието за доставка на ниво етап трябва да се интерпретира в контекст. Доставката до консолидационен обект или партньорска мрежа може да завърши този етап, без да завършва доставката до купувача. Проекцията на пратката ви трябва да знае коя дестинация представлява събитието.
По същия начин разделяйте „поискано връщане“, „започнало движение за връщане“ и „върнато на подателя“. Те описват различни етапи. Искането за връщане не доказва, че пакетът физически се движи обратно, а потвърждението за доставка при обратното пътуване трябва да посочва дестинацията на връщането.
Използвайте API за проследяване, без да се отказвате от бизнес правилата си
Интеграцията с множество превозвачи може да предостави обща точка за приемане на данни, но общият формат на отговора не премахва нуждата от ясен вътрешен договор. Когато оценявате 17TRACK Tracking API, използвайте неговата официална документация, за да проверите значението на полетата и интерфейсите, относими към внедряването ви. Не приемайте, че предложените в това ръководство статуси съвпадат с неговата собствена таксономия.
Преди да свържете API с известия към клиенти или оперативна автоматизация, определете:
- Кои полета описват отделни събития и кои описват текущото обобщение на пратката.
- Кои оригинални данни за превозвача са изложени и могат да бъдат запазени.
- Как се представят времевите маркери, липсващите стойности, корекциите и повтарящите се актуализации.
- Как могат да бъдат разграничени обратните пътувания и доставката до междинни партньори.
- Как интеграцията ви ще реагира на неизвестни кодове или бъдещи промени в схемата.
Поддържайте тънък адаптер между външния отговор и каноничния си модел. Това позволява на останалата част от приложението ви да използва един договор за статуса на проследяване, без да зависи от имената на всички полета от upstream източниците. Третирайте правилата за известяване като още един слой: ново нормализирано събитие не трябва автоматично да задейства съобщение към клиента.
Тествайте историите на събитията, а не само отделните съпоставяния
Едно съпоставяне може да е правилно само по себе си и въпреки това да създава неправилно състояние на пратката. Тествайте пълни истории, включително актуализации, получени в различен ред от времето на настъпването им.
- Закъсняла история: потвърждението за доставка пристига преди по-старо сканиране на транзит. Пратката остава доставена.
- Повторно приемане: същото събитие се обработва отново. Не се изпраща дублирано известие към клиента.
- Неуспешен опит: неуспешен опит следва изпращане за доставка. Проекцията вече не обещава активно изпълнение на доставка без подкрепящи доказателства.
- Готовност за получаване: пакетът достига до пункт за получаване, преди да бъде потвърдена наличността. Не се издава преждевременна инструкция за получаване.
- Неизвестно събитие: появява се нов код. Необработеният запис се запазва, а предварително установеното състояние на пратката не се заменя автоматично с unknown.
- Движение при връщане: обратното пътуване завършва при подателя. Оригиналната доставка до купувача не се отбелязва като успешна.
- Корекция: изрична корекция от източника променя резултата чрез одитируем преход.
Наблюдавайте несъпоставените събития, използването на текстов резервен механизъм, невалидните преходи и опитите за дублирани известия по превозвач и източник. Различавайте пълнотата на съпоставянето от неговата правилност: разпознаването на всеки код не е полезно, ако интерпретацията му е погрешна.
Преди внедряване на промяна в съпоставянето възпроизведете представителни истории и сравнете старите и новите проекции. Прегледайте разликите, които засягат потвърждението за доставка, инструкциите за получаване, завършването на връщането или действията на клиента. Версионирайте правилата, така че служителят по поддръжката да може да обясни защо системата е създала конкретен резултат.
Често задавани въпроси
Трябва ли всяко събитие за проследяване да има точно един статус?
Всяко събитие може да има една основна нормализирана интерпретация, но може да се нуждае и от условие, причина и контекст на пътуването. Принуждаването на всяко значение да бъде представено в един плосък списък от статуси прави модела по-труден за използване и поддръжка.
Трябва ли неизвестно събитие да замени текущия статус на пратката?
Обикновено не. Оставете съпоставянето на събитието нерешено, като същевременно запазите последното поддържано състояние на пратката. Показвайте актуалността на данните отделно, за да не объркат потребителите старо потвърдено състояние с последна актуализация.
Може ли доставена пратка да се върне в транзит?
По-старо сканиране на транзит не трябва да предизвиква такава промяна. Проверена корекция може да я оправдае, докато новозапочнало пътуване за връщане обикновено трябва да бъде представено отделно. Преходът се нуждае от изрична причина, а не само от по-късен времеви маркер на получаване.
Как трябва да се представят липсващите актуализации за проследяване?
Използвайте вътрешен индикатор за актуалност или сигнал за неактивност. Поддържайте го отделно от съобщените от превозвача статуси за забавяне, загуба или изключение. Всеки праг за ескалация трябва да отразява ангажиментите ви за обслужване и оперативната политика, а не универсално предположение.
Кой трябва да одобрява промените в съпоставянето?
Инженерният екип трябва да отговаря за внедряването и тестовете за възпроизвеждане; логистичните операции трябва да валидират значението за доставката; а отговорникът за клиентското изживяване трябва да одобрява последствията за съобщенията. Определете конкретен отговорник за решенията, така че неясните събития да не остават нерешени за неопределено време.
Източници
- RFC 3339: Date and Time on the Internet: Timestamps — справка за представянето на времевите маркери и числовите отмествания.
- 17TRACK Tracking API — официална входна точка за интеграцията с API за проследяване, обсъдена по-горе.
- 17TRACK API documentation — справочник за внедряване при проверка на договора с доставчика; каноничният модел и примерите за съпоставяне в тази статия са предложени модели за проектиране, а не специфични за доставчика определения.


