Оди на содржината

Серија по сценарија

Влезните документи — фактурите што некој друг ги испраќа кон тебе — во вистинска работа ги доставува Управата за јавни приходи. На sandbox серверот ние никогаш не зборуваме со УЈП: тоа е сервер за проба, и ништо од него не заминува кон вистинска институција.

Последицата е дека твојата организација таму е празна. GET inbound враќа список без ниту еден запис, нема документ што би го презел, и нема документ по кој би донел одлука. Значи целата влезна насока не може да се напише ниту да се проба.

Адресата опишана на оваа страница го решава тоа: со едно барање ја полни организацијата со серија влезни фактури, по една за секој случај што твојот софтвер треба да го издржи.


Тоа е списокот на случаи што серијата ги создава. Секое сценарио има свое име, и тие имиња се стабилни — не се менуваат меѓу изданија, па можеш да ги впишеш во својот тест.

Три што сам не можеш да ги создадеш

Дел со наслов „Три што сам не можеш да ги создадеш“

Ако прочиташ само еден раздел од оваа страница, нека биде овој.

Име на сценариотоВо каква состојба е документотШто прави твојот софтвер кога ќе прати одлука
deadlinePassedрокот за одлука поминал, па УЈП веќе го прифатил документот самдобива 409 со шифра EARH-3006
alreadyAcceptedодлуката е веќе донесена и потврдена — документот е прифатендобива 409 со истата шифра
alreadyRejectedистото, но документот е одбиендобива 409 со истата шифра

⛔ Овие три состојби не настануваат со барање, туку со ТЕКОТ НА ВРЕМЕТО или со дејство што веќе се случило. Затоа не можеш да ги произведеш ниту преку внесување на еден документ, кое секогаш создава документ во почетна состојба.

Тоа е и причината зошто софтвер што не ги сретнал во проба, прв пат ги гледа во продукција — кај вистински клиент, на вистинска фактура.

Со каква содржина пристигнува документот

Дел со наслов „Со каква содржина пристигнува документот“
Име на сценариотоШто носи документот
fullи машински читлива содржина (UJP JSON) и PDF
payloadOnlyсамо машински читлива содржина, без PDF
pdfOnlyсамо PDF
noContent⛔ ниту едно од двете

noContent не е недовршен запис. Така изгледа документ кога кај УЈП недостасува овластување за преземање на неговата содржина: документот постои, се појавува во списокот, и по него може да се одлучува — само нема што да се преземе.

📌 Кој формат враќа содржина, а кој враќа грешка, е опишано кај Влезни документи → Преземање на содржината. Тоа важи за секој влезен документ, не само за засеаните.

Име на сценариотоВо каква состојба е документот
acknowledgedприемот е веќе потврден, па документот не се враќа кога бараш само непреземени; носи време на потврда
deadlineTodayрокот за одлука истекува денес — граничен случај, одлуката сè уште поминува
Име на сценариотоКаков износ носи
zeroVatДДВ е нула
creditNoteсите износи се негативни
largeAmountизнос близу горната граница на форматот
Име на сценариотоШто овозможува да пробаш
secondSenderфилтрирање по даночен број на испраќачот — овој документ носи различен од сите останати
olderThanWeekфилтрирање по датум на пристигање, со by=created
updatedRecentlyпреземање само на она што се сменило, со by=updated

Полнење со сите сценарија
curl -X POST https://sandbox.api.earhiva.mk/api/integration/v1/sandbox/seed \
-H "X-Api-Key: <ВАШИОТ КЛУЧ>" \
-H "X-Software-Id: <ИМЕ И ВЕРЗИЈА НА ВАШАТА АПЛИКАЦИЈА>" \
-H "Content-Type: application/json" \
-d '{ "seed": 1 }'

Одговорот ги набројува создадените документи. За секој кажува од кое сценарио е и што се очекува од него — за да може твојот тест да тврди, наместо да погодува:

Одговор · скратен
{
"seed": 1, // бројот на серијата што е употребен
"created": 15, // колку документи се создадени
"deleted": 0, // колку постари засеани документи се избришани; 0 без чистење
"documents": [
{ "scenario": "full", "docUid": "eah_i_…", "euid": "SEED-1-full",
"expect": "format=original и format=pdf враќаат 200; format=ubl враќа 404" },
{ "scenario": "deadlinePassed", "docUid": "eah_i_…", "euid": "SEED-1-deadlinePassed",
"expect": "POST decision враќа 409 EARH-3006 — рокот поминал" }
// …и по еден запис за секое останато сценарио
]
}

docUid е идентификаторот на документот кај нас. Со него потоа повикуваш GET inbound/{docUid}, GET inbound/{docUid}/file и POST inbound/{docUid}/decision.


Телото на барањето има три полиња и ниту едно не е задолжително.

ПолеТипШто прави ако го изоставиш
seedцел бројсе употребува 1 — не случаен број
resetточно/неточноништо не се брише
scenariosсписок имињасе создаваат сите сценарија од каталогот

Ист број дава иста серија. Исти износи, исти датуми, исти испраќачи, исти рокови, во ист редослед.

Тоа е единствената причина поради која бројот постои. Без него секое полнење би дало друга серија, па тест што вчера паднал денес би поминал — не затоа што нешто е поправено, туку затоа што податокот е друг.

Што праќашШто добиваш
"seed": 1серијата број 1
"seed": 1 повторноистата серија број 1
"seed": 2друга серија — ако ти треба втора, напоредна
полето изостанатосеријата број 1
Исчисти го претходно засеаното, па наполни одново
curl -X POST https://sandbox.api.earhiva.mk/api/integration/v1/sandbox/seed \
-H "X-Api-Key: <ВАШИОТ КЛУЧ>" \
-H "X-Software-Id: <ИМЕ И ВЕРЗИЈА НА ВАШАТА АПЛИКАЦИЈА>" \
-H "Content-Type: application/json" \
-d '{ "seed": 1, "reset": true }'

Со reset: true се бришат фактурите што оваа иста адреса ги создала претходно — и ништо друго.

⛔ Документ што дошол по друг пат остава недопрен. Тоа важи и за фактура што си ја внел преку внесување на еден документ со своја содржина: таа носи твоја содржина и можеби си ја составувал долго.

Со тоа твојот тест може да почне од иста состојба секој пат, што е предуслов да се врти автоматски.

Кога пробуваш еден случај, не ти треба целата серија:

Две фактури, ништо друго во организацијата
curl -X POST https://sandbox.api.earhiva.mk/api/integration/v1/sandbox/seed \
-H "X-Api-Key: <ВАШИОТ КЛУЧ>" \
-H "X-Software-Id: <ИМЕ И ВЕРЗИЈА НА ВАШАТА АПЛИКАЦИЈА>" \
-H "Content-Type: application/json" \
-d '{ "seed": 1, "reset": true, "scenarios": ["deadlinePassed", "alreadyAccepted"] }'

Ако полето го изоставиш, се создаваат сите сценарија.

⛔ Име што не е од каталогот се одбива, и тогаш ништо не се создава. Одговорот е 400 со шифра EARH-2030 и во него стојат дозволените имиња. Печатна грешка нема да создаде половина серија — тоа е состојба што не би ја очекувал и не би ја забележал.


Образецот што го препорачуваме за еден циклус:

Еден циклус, повторлив колку пати ти треба
1. POST sandbox/seed { "seed": 1, "reset": true }
→ зачувај го одговорот; тој е очекуваниот резултат за чекорот 3
2. GET inbound повлечи ги сите
→ тврди дека бројот на вратени документи се совпаѓа со полето `created`
3. За секој документ од одговорот на чекорот 1:
GET inbound/{docUid}
GET inbound/{docUid}/file?format=original → 200 или 404, според сценариото
POST inbound/{docUid}/decision → 200 или 409, според сценариото
4. Тврди дека ниту еден одговор не е 500

Чекорот 1 враќа сè што му треба на чекорот 3.

💡 Не го впишувај списокот сценарија во тестот како постојана вредност — прочитај го од одговорот. Тогаш твојот тест останува точен и кога ние ќе додадеме ново сценарио, а тоа додавање не е промена на договорот.


ШифраКога се појавува
EARH-2030 · 400име во scenarios што не е од каталогот. Ништо не се создава; одговорот ги набројува дозволените
EARH-1008 · 400недостасува заглавието X-Software-Id
EARH-1009 · 404адресата е повикана на сервер што не е sandbox

Создава само влезни фактуриизлезната насока се проба со вистински POST outbound
Работи само во твојата организацијаниту еден повик не гледа и не менува во туѓа
Ништо не заминува кон УЈПниту при создавањето, ниту кога ќе донесеш одлука
reset брише само засеанодокумент создаден на друг начин останува
Не прима твоја содржиназа тоа е една фактура со своја содржина