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

Шифри од УЈП

Кога документот стигнува до УЈП, одговорот на УЈП доаѓа со свои шифри. Тие никогаш не се појавуваат во нашиот каталог на грешки — тој ги носи само шифрите EARH-xxxx, кои се наши.

Обете тврдења се точни, и заедно значат дека шифра од УЈП нема каде да се прочита во каталогот. Оваа страница е тоа место.

Деталот на излезен документ носи блок ujp:

ПолеШто еКога е пополнето
euidидентификаторот што УЈП ѝ го доделил на фактурата при прифаќањеведнаш штом УЈП ја прифати
qrLinkврската за QR кодот, онака како ја вратил УЈП — втисни ја таква каква што еведнаш штом УЈП ја прифати
stateсостојбата што ја пријавува УЈП, со нивниот речникпри читање на состојбата од УЈП
codeшифрата што УЈП ја враќа кога одговорот е одбивање; null кога нема таквапри одбивање, веднаш
messageтекстот што УЈП го враќа, на нивниот јазик. Не е стабилен — не пишувај услов врз негопри одбивање, веднаш
checkedAtкога последен пат сме го прочитале тој одговорпри читање на состојбата од УЈП

Блокот е null додека документот сè уште не е проследен до УЈП.

⛔ Прифатена фактура носи само euid и qrLink; останатите четири се null. УЈП при прифаќањето враќа идентификатор и врска, не состојба — state и checkedAt се пополнуваат подоцна, кога состојбата ќе се прочита. Дека фактурата е примена го кажува euid, не state.

За шифрите на УЈП во излезниот документ се грижи eArhiva.mk, преку вградениот систем за мапирање. Ти ги праќаш ознаките што се користат во твојот систем; за секоја компанија што го користи нашиот систем, мапирањето кон шифрарниците на УЈП го прави eArhiva.mk, според нејзините ознаки.

При праќањето не проверуваме дали ознаките внатре во документот се познати. POST outbound гледа само дали документот е структурно исправен — валиден UBL, еден документ, ЕДБ во исправен облик. Ознаките се разрешуваат подоцна, кога обработката го мапира документот кон УЈП.

⚠️ Затоа 201 не значи дека ознаките се во ред. Ако некоја од нив нема мапирање кај таа компанија, тоа се гледа подоцна — од status и failureCode на документот, не како одбивање на самото праќање.

Ова е целото пресликување: секоја патека што конверторот навистина ја чита, и полето кај УЈП во кое завршува. Сè што не е во табелата не се чита — без разлика дали е исправно по UBL и дали има вредност.

UBL патекаПоле кај УЈП
cbc:IDheader.docNumber
cbc:IssueDateheader.docDate
cbc:DueDatedocPayment.docPaymentTypeDueDate
cbc:DocumentCurrencyCodedocPayment.docCurrencyCode
cbc:Noteheader.docNotes
cac:AccountingSupplierParty/cac:Party/cac:PartyName/cbc:Nameseller.sellerName
cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyIDseller.sellerTin
…SupplierParty/…/cac:PostalAddress/cbc:StreetNameseller.sellerAddress.streetAddress
…SupplierParty/…/cac:PostalAddress/cbc:CityNameseller.sellerAddress.city
…SupplierParty/…/cac:PostalAddress/cbc:PostalZoneseller.sellerAddress.postalCode
…SupplierParty/…/cac:PostalAddress/cac:Country/cbc:IdentificationCodeseller.sellerCCode
cac:AccountingCustomerParty/cac:Party/cac:PartyName/cbc:Namebuyer.buyerName
cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyIDbuyer.buyerTin
…CustomerParty/…/cac:PostalAddress/cbc:StreetNamebuyer.buyerAddress.streetAddress
…CustomerParty/…/cac:PostalAddress/cbc:CityNamebuyer.buyerAddress.city
…CustomerParty/…/cac:PostalAddress/cbc:PostalZonebuyer.buyerAddress.postalCode
…CustomerParty/…/cac:PostalAddress/cac:Country/cbc:IdentificationCodebuyer.buyerCCode
cac:LegalMonetaryTotal/cbc:TaxExclusiveAmountdocTotals.docNetAmount
cac:LegalMonetaryTotal/cbc:TaxInclusiveAmountdocTotals.docGrossAmount
cac:LegalMonetaryTotal/cbc:PayableAmountdocTotals.docFinalAmount
cac:TaxTotal/cbc:TaxAmountdocTotals.docVatAmount
cac:InvoiceLine/cac:Item/cbc:NamedocItems[].docItemDesc
cac:InvoiceLine/cbc:InvoicedQuantitydocItems[].docItemQty
cac:InvoiceLine/cbc:InvoicedQuantity/@unitCodedocItems[].docItemMUnit
cac:InvoiceLine/cac:Price/cbc:PriceAmountdocItems[].docItemUnitPriceWoVat
cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:PercentdocItems[].docItemVat

Уште три патеки се читаат, но не завршуваат во поле кај УЈП — влегуваат како твои ERP шифри, па оттаму минуваат низ мапирањето на организацијата кон шифрарникот на УЈП:

UBL патекаERP шифра
cbc:InvoiceTypeCode · кај CreditNote: cbc:CreditNoteTypeCodeтип на документот
…SupplierParty/…/cac:PostalAddress/cac:Country/cbc:IdentificationCodeдржава на продавачот
…CustomerParty/…/cac:PostalAddress/cac:Country/cbc:IdentificationCodeдржава на купувачот

⛔ Значи 380 не е шифрата што стигнува до УЈП: 380 е шифра од UBL стандардот, 100 е шифра на УЈП („Фактура”), и патот меѓу нив минува низ мапирањето на твојата организација — местото каде за еден тип на УЈП може да има една или повеќе твои шифри. Кај двете држави мапирање по правило не е потребно: шифрарникот за држави носи ISO двобуквени шифри, па MK поминува такво какво е. Кои твои шифри се веќе мапирани кон одреден запис се гледа во erpCodes — в. подолу.

Што од ова е задолжително го суди проверката пред поднесување; таа враќа статус 250 со EARH-4001, а поединечните причини доаѓаат во validationErrors со шифри EARH-5001…EARH-5012. Списокот што најчесто недостасува — адреса на примачот и стапка по ставка — е на страницата Формати.

Шифрарниците на УЈП се читаат преку интеграцискиот API, за твојата околина и твојата компанија:

ШифрарникШто носи
document-statusesсостојбите на документот кај УЈП — тоа што стои во ujp.state
reject-reasonsпричините за одбивање — оттаму е кодот што ти го праќаш во POST decision, и оттаму доаѓа причината кога документот е одбиен
void-reasonsпричините за сторнирање

Тоа е меродавниот извор, не оваа страница. Списоците се менуваат кај УЈП и се читаат по околина; она што е тука е снимка со датум. Кога двете се разликуваат, точен е одговорот на GET /codelists/{type}.

Нов запис во шифрарник не е промена што го крши договорот — ниту една шифра не се брише и ниту една не го менува значењето.

Снимка од шифрарникот document-statuses, 29.08.2026:

ШифраИмеОпис на УЈП
00Нацрте-Фактури што се креирани, но не се финални и не се пратени кон примачот
01Испратена (Нова)е-Фактура издадена од Издавачот кон Примачот, потпишана, валидирана и снимена во системот
03Прифатенае-Фактура издадена од Издавачот кон Примачот и Прифатена од страна на Примачот
04Автоматски прифатенаАвтоматски прифатена по истек на рок
05Одбиенае-Фактура издадена од Издавачот, примена од Примачот и Одбиена со соодветно образложение/причина
06Автоматски одбиенаАвтоматски се одбива ако примачот не ја прифати или одбие во законски предвидениот рок
07Сторниранае-Фактура примена или одбиена од Примачот, но Сторнирана од Издавачот (со претходна потврда од Примачот)
09КорегиранаКорегирана
10ЕвидентиранаЕвидентирана во систем
11Откажанае-Фактура издадена кон Примачот, но пред да биде Прифатена или Одбиена е Откажана од самиот Продавач

Тука намерно нема табела. Списоците reject-reasons и void-reasons се читаат по околина и се менуваат кај УЈП; препишани тука, тие би застарувале тивко — а грешен код при одбивање се одбива со EARH-2022, што е поскапо од едно повикување.

Земи ги живо:

  • GET /codelists/reject-reasons
  • GET /codelists/void-reasons

Одговорот носи code и name за секој активен запис — истите вредности што ги употребуваме и ние внатрешно.