Проверка схемы не прошла; XML не соответствует стандартам UBL 2.1 в соответствии со спецификациями ZATCA
Я пытаюсь использовать валидацию моего xml со стандартами UBL 2.1 в соответствии со спецификациями ZATCA. Но я не могу проверить это, так как мой xml выглядит отлично, но я не понимаю, что происходит не так .Я использовал пакет python json2xml для создания xml.Этот пакет генерирует xml из json.
Erros перечисляет то, что я получаю от ZATCA XML Validator:
категория : XSD_SCHEMA_ERROR
code :SAXParseException
message : Schema validation failed; XML не соответствует стандартам UBL 2.1 в соответствии со спецификациями ZATCA
Вот мой код Xml:
Вот код python, который я написал для создания XML:
def download_invoice_xml(request, invoice_type, invoice_no):
in_data = InvoiceReport.objects.filter(invoice_type=invoice_type, invoice_number=invoice_no)
for inv in in_data:
jsonData = inv.invoice_data
mode = inv.creation_mode
# Issuetime = jsonData['IssueTime']
# d1 = datetime.strptime(Issuetime, "%Y-%m-%dT%H:%M:%S")
# dt_to_string = d1.strftime('%d-%m-%Y %H:%M:%S')
# jsonData['IssueTime'] = dt_to_string
#
# Issuedate = jsonData['IssueDate']
# d2 = datetime.strptime(Issuedate, "%Y-%m-%d")
# dt_to_string2 = d1.strftime('%d-%m-%Y')
# jsonData['IssueDate'] = dt_to_string2
if jsonData.get('AllowanceCharge').get('ChargeIndicator') == 0:
jsonData['AllowanceCharge']['ChargeIndicator'] = False
for i in jsonData.get('InvoiceLine'):
if i.get('AllowanceCharge').get('ChargeIndicator') == 0:
i['AllowanceCharge']['ChargeIndicator'] = False
if i.get('Price').get('AllowanceCharge').get('ChargeIndicator') == 0:
i['Price']['AllowanceCharge']['ChargeIndicator'] = False
xml_output = json2xml.Json2xml(jsonData, wrapper="Invoice", pretty=True, attr_type=False).to_xml()
now = datetime.now()
if xml_output:
response = HttpResponse(xml_output, content_type='application/xml')
xml_date = jsonData['IssueDate'].replace("-", "")
xml_time = jsonData['IssueTime'].replace(":", "")
filename = jsonData['AccountingSupplierParty']['Party']['PartyTaxScheme']['CompanyID'] + "_" + \
xml_date + "T" + xml_time + "_" + str(jsonData['ID']) + ".xml"
# filename = jsonData['AccountingSupplierParty']['Party']['PartyIdentification']['ID'] + "_%s_%s.xml" % (
# str((now.strftime("%Y%m%d%H%M%S"))), jsonData['ID'])
content = "attachment; filename=%s" % (filename)
response['Content-Disposition'] = content
return response
return HttpResponse("Not found")
Это часть системы ZATCA E-invoice и код проекта написан на python django.
UBL, которые не выполняются, обычно делятся на две категории:
- Требуется атрибут, но вы его не предоставили.
- Порядок атрибутов внутри элемента неправильный.
Чтобы решить вашу проблему, вы должны проверить каждый элемент вашего XML на соответствие спецификации UBL Schema и найти требуемые атрибуты, которые вы не предоставляете, или атрибуты не по порядку...
Перейдите на этот сайт, где перечислены спецификации UBL: http://www.datypic.com/sc/ubl21/ss.html
.В поисковой строке вверху введите название элемента, за которым следует слово "Тип" (например: Invoice --> поиск InvoiceType
.
- В спецификации элемента найдите каждый атрибут, отношение которого начинается с [1 . Этот атрибут является обязательным, убедитесь, что вы предоставили для него значение.
- Проверьте порядок атрибутов и убедитесь, что они добавлены в правильном порядке.
Это гарантирует, что все ваши элементы будут соответствовать спецификациям UBL.
Существует много проблем в : https://sandbox.zatca.gov.sa/. Поскольку результаты в кодировании и обмене счетами имеют много ошибок, Закят был предупрежден снова и снова