Список ошибок, которые я получаю от XML-валидатора ZATCA:
категория: XSD_SCHEMA_ERROR
код: SAXParseException
сообщение: проверка схемы не удалась; XML не соответствует стандартам UBL 2.1 в соответствии со спецификациями ZATCA
Вот мой код XML:
Код: Выделить всё
reporting:1.0
INV004
fd5a7cc4-2316-49ee-ac07-6f4be4be3731
2022-08-13
23:46:07
388
0101001
SAR
SAR
4
ET05jV7roub7D66wOAQ49TQ8mCkyldhmH7B8CV3Rc6g=
5D6ZU7f6nb+s1szmMw46l4NZ7yTy0p1wi0ZUMsdQWBE=
urn:oasis:names:specification: ubl:signature:Invoice
urn:oasis:names:specification:ubl:dsig:enveloped: x a d e s & l t ; / S i g n a t u r e M e t h o d & g t ; < b r / > & l t ; / S i g n a t u r e & g t ; < b r / > & l t ; A c c o u n t i n g S u p p l i e r P a r t y & g t ; < b r / > & l t ; P a r t y & g t ; < b r / > & l t ; P a r t y L e g a l E n t i t y & g t ; < b r / > & l t ; R e g i s t r a t i o n N a m e & g t ; A l t a f M i a z e e & l t ; / R e g i s t r a t i o n N a m e & g t ; < b r / > & l t ; / P a r t y L e g a l E n t i t y & g t ; < b r / > & l t ; P a r t y I d e n t i f i c a t i o n & g t ; < b r / > & l t ; I D / & g t ; < b r / > & l t ; / P a r t y I d e n t i f i c a t i o n & g t ; < b r / > & l t ; P a r t y T a x S c h e m e & g t ; < b r / > & l t ; C o m p a n y I D & g t ; 3 0 0 6 0 0 3 6 3 6 0 0 0 0 3 & l t ; / C o m p a n y I D & g t ; < b r / > & l t ; / P a r t y T a x S c h e m e & g t ; < b r / > & l t ; P o s t a l A d d r e s s & g t ; < b r / > & l t ; C o u n t r y & g t ; < b r / > & l t ; I d e n t i f i c a t i o n C o d e & g t ; B D & l t ; / I d e n t i f i c a t i o n C o d e & g t ; < b r / > & l t ; / C o u n t r y & g t ; < b r / > & l t ; A d d i t i o n a l S t r e e t N a m e & g t ; A l t a f b a r i & l t ; / A d d i t i o n a l S t r e e t N a m e & g t ; < b r / > & l t ; S t r e e t N a m e & g t ; d h a k a & l t ; / S t r e e t N a m e & g t ; < b r / > & l t ; B u i l d i n g N u m b e r & g t ; 1 2 3 3 & l t ; / B u i l d i n g N u m b e r & g t ; < b r / > & l t ; P l o t I d e n t i f i c a t i o n & g t ; 1 2 3 3 & l t ; / P l o t I d e n t i f i c a t i o n & g t ; < b r / > & l t ; C i t y N a m e & g t ; D h a k a & l t ; / C i t y N a m e & g t ; < b r / > & l t ; P o s t a l Z o n e & g t ; 1 2 3 0 2 & l t ; / P o s t a l Z o n e & g t ; < b r / > & l t ; C o u n t r y S u b e n t i t y & g t ; D h a k a & l t ; / C o u n t r y S u b e n t i t y & g t ; < b r / > & l t ; C i t y S u b d i v i s i o n N a m e & g t ; m i a z e e & l t ; / C i t y S u b d i v i s i o n N a m e & g t ; < b r / > & l t ; / P o s t a l A d d r e s s & g t ; < b r / > & l t ; / P a r t y & g t ; < b r / > & l t ; / A c c o u n t i n g S u p p l i e r P a r t y & g t ; < b r / > & l t ; A c c o u n t i n g C u s t o m e r P a r t y & g t ; < b r / > & l t ; P a r t y & g t ; < b r / > & l t ; P a r t y L e g a l E n t i t y & g t ; < b r / > & l t ; R e g i s t r a t i o n N a m e & g t ; H o s e n M D A l t a f & l t ; / R e g i s t r a t i o n N a m e & g t ; < b r / > & l t ; / P a r t y L e g a l E n t i t y & g t ; < b r / > & l t ; P a r t y I d e n t i f i c a t i o n & g t ; < b r / > & l t ; I D & g t ; 3 9 8 7 6 5 4 0 9 8 7 6 3 3 3 & l t ; / I D & g t ; < b r / > & l t ; / P a r t y I d e n t i f i c a t i o n & g t ; < b r / > & l t ; P a r t y T a x S c h e m e & g t ; < b r / > & l t ; C o m p a n y I D & g t ; 3 9 8 7 6 5 4 0 9 8 7 6 3 3 3 & l t ; / C o m p a n y I D & g t ; < b r / > & l t ; / P a r t y T a x S c h e m e & g t ; < b r / > & l t ; P o s t a l A d d r e s s & g t ; < b r / > & l t ; S t r e e t N a m e & g t ; ا ل م ل ك س ل م ا ن & l t ; / S t r e e t N a m e & g t ; < b r / > & l t ; A d d i t i o n a l S t r e e t N a m e & g t ; ا ل م ل ك س ل م ا ن & l t ; / A d d i t i o n a l S t r e e t N a m e & g t ; < b r / > & l t ; B u i l d i n g N u m b e r & g t ; 1 2 3 4 & l t ; / B u i l d i n g N u m b e r & g t ; < b r / > & l t ; P l o t I d e n t i f i c a t i o n & g t ; 1 2 3 4 & l t ; / P l o t I d e n t i f i c a t i o n & g t ; < b r / > & l t ; C i t y N a m e & g t ; d h a k a & l t ; / C i t y N a m e & g t ; < b r / > & l t ; P o s t a l Z o n e & g t ; 1 2 2 3 4 & l t ; / P o s t a l Z o n e & g t ; < b r / > & l t ; C o u n t r y S u b e n t i t y & g t ; D h a k a & l t ; / C o u n t r y S u b e n t i t y & g t ; < b r / > & l t ; C i t y S u b d i v i s i o n N a m e & g t ; ا ل م ل ك س ل م ا ن & l t ; / C i t y S u b d i v i s i o n N a m e & g t ; < b r / > & l t ; C o u n t r y & g t ; < b r / > & l t ; I d e n t i f i c a t i o n C o d e & g t ; B D & l t ; / I d e n t i f i c a t i o n C o d e & g t ; < b r / > & l t ; / C o u n t r y & g t ; < b r / > & l t ; / P o s t a l A d d r e s s & g t ; < b r / > & l t ; / P a r t y & g t ; < b r / > & l t ; / A c c o u n t i n g C u s t o m e r P a r t y & g t ; < b r / > & l t ; D e l i v e r y & g t ; < b r / > & l t ; A c t u a l D e l i v e r y D a t e & g t ; 2 0 2 2 - 0 8 - 2 5 & l t ; / A c t u a l D e l i v e r y D a t e & g t ; < b r / > & l t ; L a t e s t D e l i v e r y D a t e / & g t ; < b r / > & l t ; / D e l i v e r y & g t ; < b r / > & l t ; P a y m e n t M e a n s & g t ; < b r / > & l t ; P a y m e n t M e a n s C o d e & g t ; 1 0 & l t ; / P a y m e n t M e a n s C o d e & g t ; < b r / > & l t ; P a y e e F i n a n c i a l A c c o u n t & g t ; < b r / > & l t ; P a y m e n t N o t e / & g t ; < b r / > & l t ; / P a y e e F i n a n c i a l A c c o u n t & g t ; < b r / > & l t ; / P a y m e n t M e a n s & g t ; < b r / > & l t ; A l l o w a n c e C h a r g e & g t ; < b r / > & l t ; T a x C a t e g o r y & g t ; < b r / > & l t ; I D & g t ; S & l t ; / I D & g t ; < b r / > & l t ; P e r c e n t & g t ; 0 . 0 & l t ; / P e r c e n t & g t ; < b r / > & l t ; T a x S c h e m e & g t ; < b r / > & l t ; I D & g t ; V A T & l t ; / I D & g t ; < b r / > & l t ; / T a x S c h e m e & g t ; < b r / > & l t ; / T a x C a t e g o r y & g t ; < b r / > & l t ; C h a r g e I n d i c a t o r & g t ; F a l s e & l t ; / C h a r g e I n d i c a t o r & g t ; < b r / > & l t ; M u l t i p l i e r F a c t o r N u m e r i c & g t ; 5 2 . 1 & l t ; / M u l t i p l i e r F a c t o r N u m e r i c & g t ; < b r / > & l t ; A m o u n t & g t ; 0 . 0 0 & l t ; / A m o u n t & g t ; < b r / > & l t ; A m o u n t c u r r e n c y I D & g t ; S A R & l t ; / A m o u n t c u r r e n c y I D & g t ; < b r / > & l t ; B a s e A m o u n t & g t ; 1 6 4 2 6 3 . 6 8 & l t ; / B a s e A m o u n t & g t ; < b r / > & l t ; B a s e A m o u n t c u r r e n c y I D & g t ; S A R & l t ; / B a s e A m o u n t c u r r e n c y I D & g t ; < b r / > & l t ; / A l l o w a n c e C h a r g e & g t ; < b r / > & l t ; L e g a l M o n e t a r y T o t a l & g t ; < b r / > & l t ; L i n e E x t e n s i o n A m o u n t & g t ; 1 6 4 2 6 3 . 6 8 & l t ; / L i n e E x t e n s i o n A m o u n t & g t ; < b r / > & l t ; L i n e E x t e n s i o n A m o u n t C u r r e n c y I D & g t ; S A R & l t ; / L i n e E x t e n s i o n A m o u n t C u r r e n c y I D & g t ; < b r / > & l t ; A l l o w a n c e T o t a l A m o u n t & g t ; 0 . 0 0 & l t ; / A l l o w a n c e T o t a l A m o u n t & g t ; < b r / > & l t ; A l l o w a n c e T o t a l A m o u n t c u r r e n c y I D & g t ; S A R & l t ; / A l l o w a n c e T o t a l A m o u n t c u r r e n c y I D & g t ; < b r / > & l t ; TaxExclusiveAmount>146664.00
SAR
164263.68
SAR
SAR
164263.68
SAR
17599.68
SAR
17599.68
SAR
146664.0
SAR
E
1
TYIEWE
lksdkskak
10.12
SAR
SAR
1
12
nos
146664.0
SAR
False
0.0
0
SAR
146664.0
SAR
17599.68
SAR
164263.68
SAR
altaf
ITM9
2
12.00
VAT
12222.00
SAR
False
0
SAR
164263.68
SAR
12
Код: Выделить всё
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")
Подробнее здесь: https://stackoverflow.com/questions/733 ... n-line-wit
Мобильная версия