Skip to content

Зауваження щодо реалізації

Кодування текстових полів документів XML: Windows-1251.
Тип HTTP-запиту – POST.
Заголовок “Content-Type”: “application/octet-stream” для повідомлень, засвідчених КЕП. Або “Content-Type”: “application/json” чи “Content-Type”: “application/json; charset=UTF-8” для команд, не засвідчених КЕП.
Використання компресії Gnu Zip (GZip) або Zip (deflate). Вхідні та вихідні документи оброблюються алгоритмом GZip або Zip для зменшення розміру повідомлення.
У разі використання компресії, заголовок “Content-Encoding” вхідного повідомлення повинен мати значення “gzip” або “deflate”.
Повідомлення містить XML документ, засвідчений КЕП відправника.
Вхідне повідомлення може містити серйозні помилки, що не дозволяють його подальшу обробку. Наприклад, повідомлення не являє собою засвідчений блок або містить більше ніж одну КЕП. У випадку грубого порушення вимог до формату вхідного повідомлення, у відповідь надсилається код статусу обробки HTTP 4xx “Client Error”. У тілі відповіді надається інформація щодо причини помилки. Наприклад, “Очікується значення 'Content-Type' рівне 'application/octet-stream' або 'application/json; charset=UTF-8'”, “Повідомлення повинно бути засвідчене кваліфікованим електронним підписом” і таке інше.
Сервер оброблює Url:
“<адреса>/doc“ – одержання документів (чеків, Z-звітів тощо)
“<адреса>/pck“ – одержання пакетів документів (офлайн документи тощо)
“<адреса>/cmd“ – одержання команд
Команди надсилаються у форматі JSON. Див. розділ «Команди».

Класи документів

/// Клас документа
public enum DocumentClass {
Check = 0, /// Чек
ZRep = 1 /// Z-звіт
}

Типи документів

/// Чек. Тип документa
public enum CheckDocumentType {
SaleGoods = 0, /// Чек реалізації товарів/послуг
TransferFunds = 1, /// Чек переказу коштів
CurrencyExchange = 2, /// Чек операції обміну валюти
CashWithdrawal = 3, /// Чек видачі готівки
OpenShift = 100, /// Відкриття зміни
CloseShift = 101, /// Закриття зміни
OfflineBegin = 102, /// Початок офлайн сесії
OfflineEnd = 103 /// Завершення офлайн сесії
}

Чек. Розширені типи документів

/// Чек. Розширений тип документа
public enum CheckDocumentSubType {
CheckGoods = 0, /// Касовий чек (реалізація)
CheckReturn = 1, /// Видатковий чек (повернення)
ServiceDeposit = 2, /// Чек операції «службове внесення»/«отримання авансу»
AdditionalDeposit = 3, /// Чек операції «отримання підкріплення»
ServiceIssue = 4, /// Чек операції «службова видача»/«інкасація»
CheckStorno = 5 /// Чек сторнування попереднього чека
}

Типи даних запитів документів

/// Тип даних запиту документа
public enum DocumentRequestType {
Availability = 0, /// Перевірка наявності документа
OriginalXml = 1, /// Оригінальний XML
SignedByServerXml = 2, /// XML засвідчений КЕП Фіскального Сервера
Visualization = 3, /// Документ в текстовому форматі для відображення UTF8
SignedBySenderXml = 4, /// XML засвідчений КЕП відправника
SignedBySenderAndServerXml = 5 /// XML зас. КЕП відправника і КЕП Фіск. Сервера
}

Коди результату обробки запитів документів

/// Код результату обробки запиту документа
public enum DocumentRequestResultCode {
/// OK
Ok = 0,
/// Документ з фіскальним номером, що відповідає режиму онлайн, не зареєстрований на ПРРО
OnlineDocumentAbsent = 1,
/// Фіскальний номер зарезервований для використання в режимі офлайн на ПРРО, але наразі ще не переданий з ПРРО до контролюючого органу
OfflineNumberReserved = 2,
/// Фіскальний номер не зарезервований для використання в режимі офлайн на ПРРО
OfflineNumberNotReserved = 3,
/// ПРРО не зареєстрований
TransactionsRegistrarNotRegistered = 4,
/// Документ не зареєстрований на ПРРО
DocumentAbsent = 5
}

Коди помилок

/// Код помилки
public enum ErrorCode {
/// OK
Ok = 0,

/// ПРРО не зареєстрований
TransactionsRegistrarAbsent = 1,

/// Відсутній доступ до ПРРО для користувача
OperatorAccessToTransactionsRegistrarNotGranted = 2,
/// В документі зазначено реєстраційний код платника, що не дорівнює реєстраційному коду господарської одиниці
InvalidTin = 3,
/// Зміну для ПРРО наразі відкрито
ShiftAlreadyOpened = 4,
/// Зміну для ПРРО наразі не відкрито
ShiftNotOpened = 5,
/// Останній документ, зареєстрований перед закриттям зміни, повинен бути Z-звітом
LastDocumentMustBeZRep = 6,
/// Некоректний локальний номер чека
CheckLocalNumberInvalid = 7,
/// Z-звіт наразі зареєстрований для поточної зміни
ZRepAlreadyRegistered = 8,
/// Помилка валідації документа
DocumentValidationError = 9,

/// Помилка валідації пакету офлайн документів
PackageValidationError = 10,

/// Некоректний параметр запиту
InvalidQueryParameter = 11,

/// Помилка криптографічних функцій
CryptographyError = 12,

/// Запитані дані відсутні
NoContent = 13
}


Коди HTTP

200 “OK”
400 “Bad Request” – Некоректний зміст запиту
401 “Unauthorized” – Власнику сертифіката не дозволений доступ до зазначеного ПРРО;
403 “Forbidden” – Некоректний URL звернення до сервера;
404 “Not Found” – ПРРО відсутній в реєстрі;
405 “Method Not Allowed” – Метод звернення до сервера не дозволяється для зазначеної операції;
415 “Unsupported Media Type” – Недопустиме значення 'Content-Type';
416 “Requested Range Not Satisfiable” – Недопустимий розмір повідомлення;
500 “Internal Server Error” – Внутрішня помилка сервера;
503 “Service Unavailable” – Сервер недоступний.
Відповідь містить опис помилки у вигляді “Код помилки: <Числовий код помилки> <Символьний код помилки>\r\n<Опис помилки>”.

 
Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.