Шот-фактуралар мен түбіртектер бір кіруді бөліседі. Екі құрылымды араластырудан қалай аулақ болуға болады?

Бір интерфейс шот-фактураларды да, түбіртектерді де қабылдайды және «барлық өрістер міндетті емес» үлкен нысандарды жазу оңай. Мұндай нысан кез келген нәрсені ұстай алады, бірақ оның нақты не қабылданғанын айту қиын. Екі бөлек келісім-шартты сақтау және олардың біреуін ашық түр өрісімен таңдау түсінікті болар еді.

Шот-фактуралар мен түбіртектерді өңдеу үшін бір интерфейске жиі қояды, бірақ оны қабылдау үшін «барлық өрістері міндетті емес» кең нысан ғана пайдаланылса, ол кез келген енгізуді орналастыра алады, бірақ ол қандай құжаттың қабылданғанын айта алмайды. Бұл мақала құжатты қабылдау интерфейсін құрастыруды немесе JSON схемасын тексеру ережелерін сақтауды қажет ететін әзірлеушілер мен бизнес қызметкерлеріне арналған. Мұны оқығаннан кейін сіз екі тәуелсіз келісім-шартты сақтауды, анық түрі өрісі бар біреуін таңдауды және тармақтық қайшылықтарды және белгісіз түрлерді өңдеуді үйренесіз.

Осы мақаладағы мысалдар өңдеу әдістерін көрсету үшін синтетикалық үлгілерді пайдаланады. Код оқшауланған ортадағы мысалдармен тексерілді, бірақ бұл барлық нақты файлдардың немесе өнім өнімділігінің кепілі емес. Маңызды құжаттарды өңдеуден бұрын түпнұсқаларды сақтап, мәтіндегі шекаралар мен қабылдау элементтеріне сәйкес қарап шығыңыз.

Шот-фактуралар мен түбіртектердің ортақ кіруімен қалай күресуге болады? Бір сөйлемнен қорытынды

Бір порталдан екі құжатты алған кезде барлығын сақтай алатын кең нысанды пайдаланбай, екі бөлек келісімшартты сақтау және олардың біреуін таңдау үшін қажетті kind өрісін пайдалану түсінікті болады.

сіздің жағдайыңызҰсынылатын тәжірибелерсебебі
Дәл сол интерфейс шот-фактуралар мен түбіртектерді алуы керекҚажетті өріспен таңдалған екі бөлек келісімшартты сақтаңызБарлық өрістері міндетті емес үлкен нысан кез келген нәрсені сақтай алады, бірақ қабылданған нәрсені түсіндіру қиын.
OneOf көмегімен филиалдарды ұйымдастырыңызӘр тармақ түрді түзету үшін const пайдаланадыoneOf дәл бір тармақты сәйкестендіруді талап етеді. Қайталанатын тармақ өрістері заңды енгізу сәтсіз аяқталады.
Енгізу жоқ түрі немесе өріс қайшылығыҚайшылықты өрістер мен көздерді көрсететін анық қате туралы хабарды қайтарыңызТек «сәйкестік жоқ» дегенді көрсету мәселені табуға көмектеспейді
Жіктеуіш құжат түрлерін ажырата алмайдыБелгісіз күйді сақтап, жіктелетін тәуелсіз кезекке кіріңізКездейсоқ филиалды таңдау тек жалған «табысқа» әкеледі.
Құрылымды тексеруден өттіБұл жіктеудің дұрыстығын білдірмейді және құжаттардың түпнұсқалығын білдірмейді.Жіктеу сенімділігі, құрылымды тексеру және іскерлік түпнұсқалық үш түрлі деңгей

Неліктен кең нысанды пайдалана алмайсыз?

Барлық өрістерді міндетті емес ету қаупі

Интерфейс шот-фактураларды да, түбіртектерді де қабылдағанда, «барлық өрістер міндетті емес» үлкен нысандарды жазу оңай. Мұндай нысан шынымен де әртүрлі кірістерді ала алады, бірақ мыналардың құны бойынша:

– Құрылымнан қандай құжат түскенін айту мүмкін емес.

  • Екі құжаттың қажетті тармақтары мен қосымша тармақтары бір-бірімен араласып, тексеру ережелері барған сайын бұлыңғырлануда.
  • Қате орын алған кезде, кірістің күткендей болмайтынын нақты түсіндіру қиын.

Екі бөлек келісім-шартты сақтау және олардың біреуін ашық түр өрісі бар таңдау анық болар еді.

oneOf бұл жай ғана біреу емес

Қайталанатын тармақтар заңды енгізудің сәтсіздігін тудырады.

oneOf енгізудің дәл бір тармаққа сәйкес келуін талап етеді. Егер екі тармақ бір уақытта өтсе, жалпы тексеру сәтсіз болады.

Егер тармақта тек бірнеше қосымша өрістер болса, олар кеңінен қабаттасуы ықтимал. Осы сәтте заңды енгізу тексеруден өтпей қалады.

Қабаттасуды жою үшін түр мен тұрақтылықты қолдан

Қажетті kind өрісін және const-ды пайдаланып, мәндерді бекіту арқылы тармақтар арасында нақты шекаралар орнатып, мұндай қабаттасуларды алдын ала жоя аласыз.

Комбинация ережелері туралы толығырақ JSON схемасын біріктіру ережелері сайтына қараңыз.

Орындалатын басқа бағыттау протоколы

from jsonschema import Draft202012Validator

def branch(kind, identity):
    return {
        "type": "object", "additionalProperties": False,
        "required": ["kind", identity],
        "properties": {"kind": {"const": kind},
                       identity: {"type": "string", "minLength": 1}}
    }

schema = {"oneOf": [branch("invoice", "invoice_number"),
                    branch("receipt", "receipt_number")]}
v = Draft202012Validator(schema)
valid = lambda x: not list(v.iter_errors(x))
assert valid({"kind": "invoice", "invoice_number": "I-1"})
assert valid({"kind": "receipt", "receipt_number": "R-1"})
assert not valid({"kind": "invoice", "receipt_number": "R-1"})
assert not valid({"kind": "receipt", "receipt_number": ""})
assert not valid({"kind": "invoice", "invoice_number": "I-1",
                  "receipt_number": "R-1"})
assert not valid({"kind": "unknown"})

Бұл — нақты шоттың толық өріс моделі емес, оңтайландырылған мысал жазбасы. Код тармақ таңдау және артық өрістерді қабылдамауды көрсетеді; салық мөлшерлемелері, тақырыптар және сомалар бөлек анықталуы қажет.

Егер бизнес қосымша өрістерге рұқсат берсе, осы өрістердің атау кеңістіктері барлық шектеулерді тыныш алып тастамай, нақты анықталуы керек.

Тек "сәйкес келмеу" қате хабарламаларын көрсетпеңіз

Тек "сәйкессіздік" көрсетіледі, және пайдаланушылар да, техникалық қызметкерлер де мәселенің қай жерде екенін біле алмайды. Төмендегі кестеде бірнеше кең таралған енгізу мүмкіндіктері мен оларға сәйкес кері байланыс әдістері көрсетілген:

Енгізу мүмкіндіктеріНақты күмәндерКері байланыс ұсыныңыз
Бір түрі кемшілікКелісімді таңдай алмаймынҚұжат түрін беріңізші.
Тип және сан өрістері қайшылықЕкі құрылым араласҚайшылықты өрістер мен олардың дереккөздерін көрсету
Нөмірленген бос жолдарКілт бар, бірақ оның құны жоқНөмірленген аймаққа қайта қарау
Белгісіз түріҚазіргі келісім бұл мәселені қамтымайдыЖіктелу үшін тәуелсіз кезекке кіріңіз

Белгісіз типтерге де шығу керек

Егер классификатор шот-фактуралар мен түбіртектерді ажырата алмаса, белгісіз мәртебесін сақтап қалу керек, себебі "табыс" үшін филиалды кездейсоқ таңдамай.

Мұнда бөлек қарастырылатын үш түрлі деңгей бар:

  • Категория сенімділігі: Жүйенің құжат түрлерін бағалауда қаншалықты сенімді.
  • Құрылымды тексеру: Таңдалған келісімшарттың орындалғанын енгізіңіз.
  • Іскерлік шынайылық: Құжаттардың өздері шынайы және жарамды ма.

Құрылымдық тексеру кері дәлелдене алмайды, сондай-ақ құжаттың шынайы екенін дәлелдей алмайды.

Құжат түрі де аударма процесінде сақталуы тиіс

Бір сала әртүрлі құжаттарда әртүрлі терминологияны талап етуі мүмкін. OmniDoc терминологиясы мен екітілді шолу жұмыс процестерін қолданғанда, жеткізу тізімдерімен құжат түрлерін ұсыну рецензенттерге сан мен көлемнің контекстін түсінуге көмектеседі.

Кең JSON нысанының бұл айырмашылықтарды өшіруіне жол бермеңіз.

📊 Негізгі салыстыру

ӘдісҚұжат түрін нақты анықтауға бола ма?Тармақтар қабаттасқанда көріністерБелгісіз типтерді өңдеу
Барлық өрістер міндетті емес кең объектілерНе алғанын түсіндіру қиынҚолданылмайды; өрістер арасында тармақ шекаралары жоқКең нысандарға оңай жұтылады және байқалмайды
Екі тәуелсіз келісімшарт + қажетті түріKind өрісін пайдаланып анық таңдаңызConst-ты пайдаланып, мәндерді бекітіп, қабаттасуды азайтыңызБелгісіз күйді қалдырып, сұрыптау үшін кезекке кіріңіз

🎯 Қай әдіс саған ыңғайлы?

Егер сізге шот-фактуралар мен түбіртектерді бір уақытта алу керек болса

Екі бөлек келісімшартты сақтап, kind-ды міндетті өріс ретінде белгілеңіз.

Егер сіздің тармақ өрістеріңіз кеңінен қабаттаса

kind-ды әр тармақта const-мен бекітіңіз, заңды кірістерді бірнеше тармақты бір уақытта сәйкестендірмеу үшін.

Егер жүйеңіз қосымша өрістерге рұқсат берсе,

Алдымен қосымша өрістің атау кеңістігін нақтылаңыз, содан кейін шектеулерді қалай жеңілдету керектігін шешіңіз.

Егер сіздің классификацияңыз жеткілікті сенімді болмаса

Белгісіз күйді сақтап, құжаттарды сұрыптау үшін кезекке жіберіңіз; тармақтарды күшпен таңдамаңыз.

❓ Жиі қойылатын сұрақтар (FAQ)

1. Неге барлық өрістер міндетті емес объектіні қолданбайсың?

Мұндай серіктес кез келген нәрсені жалғандай алады, бірақ нақты не алатынын анықтау қиын.

2. Неліктен oneOf жарамды кіру сәтсіздігін тудырады?

oneOf тармағын дәл сәйкестендіруді талап етеді. Егер екі тармақ бір уақытта өтсе, жалпы тексеру сәтсіз аяқталады. Бұл жағдай тармақ өрістері кеңінен қабаттасқанда болуы ықтимал.

3. Қосымша алаңдарға рұқсат бергенде неге назар аудару керек?

Қосымша өрістің атау кеңістігі барлық шектеулерді тыныш алып тастамай, нақты анықталуы керек.

4. Егер классификатор құжат түрін анықтай алмаса ше?

Белгісіз күйді сақтап, жіктелетін тәуелсіз кезекке кіріңіз; сәтті тармақты жинау үшін кездейсоқ тармақты таңдамаңыз.

5. Құрылымдық тексеруден өту құжаттардың шынайылығын дәлелдей ме?

Жоқ. Жіктеу сенімділігі, құрылымдық тексеру және бизнес шынайылығы үш түрлі деңгей болып табылады; құрылымдық тексеру құжаттардың шынайылығын дәлелдей алмайды.

📝 Қысқаша мазмұны

Шот-фактуралар мен түбіртектерді бір жазбаға орналастырғанда, екі бөлек келісімшартты сақтап, оларды қажетті kind өрісі арқылы таңдаңыз, осылайша енгізілген құжаттың түрі анық көрінеді. Тармақты тексеру, қате кері байланысы және белгісіз тип экспорттары да бірге жасалуы керек.

Қазір тәжірибе алыңыз: Құжатыңызды жүктеп, түпнұсқа форматтауды сақтап, аударуды бастаңыз

Жаңартылған 2026-11-15