tag, but is recognized as a heading* + +### Error details + +Heading is incorrectly tagged as a paragraph + +* Object type: `SAP` +* Test condition: `correctType != 'H' && correctType != 'Hn'` +* Severity: minor + +## Rule 4.1.2-11 + +### Requirement + +>*Structure element uses
tag, but is recognized as a span*
+
+### Error details
+
+Span is incorrectly tagged as a paragraph
+
+* Object type: `SAP`
+* Test condition: `correctType != 'Span'`
+* Severity: minor
+
+## Rule 4.1.2-12
+
+### Requirement
+
+>*Structure element uses tag, but is recognized as a paragraph*
+
+### Error details
+
+Paragraph is incorrectly tagged as a span
+
+* Object type: `SASpan`
+* Test condition: `correctType != 'P'`
+* Severity: minor
+
+## Rule 4.1.2-13
+
+### Requirement
+
+>*Structure element uses tag, but is recognized as a heading*
+
+### Error details
+
+Heading is incorrectly tagged as a span
+
+* Object type: `SASpan`
+* Test condition: `correctType != 'H' && correctType != 'Hn'`
+* Severity: minor
+
+## Rule 4.1.2-14
+
+### Requirement
+
+>*Structure element uses tag, but is recognized as a figure caption*
+
+### Error details
+
+Caption is incorrectly tagged as a paragraph
+
+* Object type: `SAP`
+* Test condition: `correctType != 'Caption'`
+* Severity: minor
+
+## Rule 4.1.2-21
+
+### Requirement
+
+>*Part of the document is recognized as a list, but is not marked as a List related structure element*
+
+### Error details
+
+Missing List element(s)
+
+* Object type: `SAStructElem`
+* Test condition: `hasLowestDepthError == false || (correctSemanticScore >= 0.75 && standardType == correctType) || (correctType != 'LI' && correctType != 'Lbl' && correctType != 'LBody' && correctType != 'L') || (isTableElem == true)`
+* Severity: minor
+
+## Rule 4.1.2-22
+
+### Requirement
+
+>*The content is marked with tag*
+
+### Error details
+
+Several paragraphs tagged as one
+
+* Object type: `SAP`
+* Test condition: `correctType != 'Part' || correctSemanticScore < 0.75`
+* Severity: minor
+
+## Rule 4.1.2-28
+
+### Requirement
+
+>*The content is identified as a part of the table of content, but is not marked with a element*
+
+### Error details
+
+Note is tagged as a Paragraph
+
+* Object type: `SAP`
+* Test condition: `correctType != 'Note'`
+* Severity: minor
+
+## Rule 4.1.2-55
+
+### Requirement
+
+>*The heading is a single child of its ancestor structure element and is not grouped with the related content*
+
+### Error details
+
+The heading is not grouped with the related content
+
+* Object type: `SAStructElem`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1300).length == 0`
+* Severity: minor
+
diff --git a/src/static/wiki_WCAG2.2_machine.md b/src/static/wiki_WCAG2.2_machine.md
new file mode 100644
index 00000000..f43c15f4
--- /dev/null
+++ b/src/static/wiki_WCAG2.2_machine.md
@@ -0,0 +1,201 @@
+# WCAG2.2 validation rules
+## Rule 1.3.1-1
+
+### Requirement
+
+>*Repeated ASCII characters are used for presentational purpose and are not marked as artifact*
+
+### Error details
+
+ASCII text is used as a pseudographics
+
+* Object type: `SARepeatedCharacters`
+* Test condition: `isNonSpace == false || numberOfRepeatedCharacters < 5`
+* Severity: cosmetic
+
+## Rule 1.3.1-2
+
+### Requirement
+
+>*Repeated SPACE characters are used for formatting purpose and are not marked as artifact*
+
+### Error details
+
+Space characters are used for formatting purpose
+
+* Object type: `SARepeatedCharacters`
+* Test condition: `isNonSpace == true || numberOfRepeatedCharacters < 3`
+* Severity: cosmetic
+
+## Rule 1.3.4-1
+
+### Requirement
+
+>*Pages shall have the same orientation within the document unless specific display orientation is essential*
+
+### Error details
+
+Pages have different orientation
+
+* Object type: `PDPage`
+* Test condition: `orientation == 'Square' || gMostCommonPageOrientation == orientation`
+* Severity: minor
+
+## Rule 1.4.3-1
+
+### Requirement
+
+>*The visual presentation of text and images of text has a contrast ratio of at least 4.5:1. Large-scale text and images of large-scale text have a contrast ratio of at least 3:1*
+
+### Error details
+
+Insufficient text contrast
+
+* Object type: `SATextChunk`
+* Test condition: `textSize < 4.5 || ((textSize >= 18.0 || (textSize >= 14.0 && textWeight >= 700.0)) ? (contrastRatio >= 3) : (contrastRatio >= 4.5)) || parentsStandardTypes.split('&').filter(elem => elem == 'Figure').length > 0`
+* Severity: major
+
+## Rule 1.4.4-1
+
+### Requirement
+
+>*Text is too small and may not be resized without assistive technology up to 200 percent without loss of content or functionality*
+
+### Error details
+
+Text size is too small
+
+* Object type: `SATextChunk`
+* Test condition: `textSize >= 4.5 || isWhiteSpaceChunk == true || parentsStandardTypes.split('&').filter(elem => elem == 'Figure').length > 0`
+* Severity: major
+
+## Rule 1.4.10-1
+
+### Requirement
+
+>*Bounding box should be present for a figure appearing in its entirety on a single page to indicate the area of the figure on the page*
+
+### Error details
+
+Figure has no BBox attribute
+
+* Object type: `SAFigure`
+* Test condition: `page != lastPage || hasBBox == true`
+* Severity: minor
+* Additional references:
+ * ISO 32000-1:2008, 14.8.5.4.3
+
+## Rule 2.4.9-1
+
+### Requirement
+
+>*The Link annotation has no Alt entry and is not associated with a meaningful text on the page*
+
+### Error details
+
+Missing alternate Link description
+
+* Object type: `SALinkAnnotation`
+* Test condition: `(Contents != null && Contents != '' && contentsIsLink == false) || isOutsideCropBox == true || (F & 2) == 2 || (textValue != null && textValue != '' && textValueIsLink == false) || (Alt != null && Alt != '' && altIsLink == false)`
+* Severity: major
+* Additional references:
+ * ISO 32000-1:2008, 14.9.3
+
+## Rule 4.1.1-1
+
+### Requirement
+
+>*Merged table cells deteriorate the document accessibility and are not recommended*
+
+### Error details
+
+Table body contains merged cells
+
+* Object type: `SETD`
+* Test condition: `ColSpan == 1 && RowSpan == 1`
+* Severity: cosmetic
+
+## Rule 4.1.1-2
+
+### Requirement
+
+>*Merged table cells deteriorate the document accessibility and are not recommended*
+
+### Error details
+
+Table header contains merged cells
+
+* Object type: `SETH`
+* Test condition: `ColSpan == 1 && RowSpan == 1`
+* Severity: cosmetic
+
+## Rule 4.1.2-16
+
+### Requirement
+
+>*Paragraph structure element has no real content*
+
+### Error details
+
+Paragraph structure element is empty
+
+* Object type: `SAP`
+* Test condition: `correctType != null`
+* Severity: minor
+
+## Rule 4.1.2-17
+
+### Requirement
+
+>*Span structure element has no real content*
+
+### Error details
+
+Span structure element is empty
+
+* Object type: `SASpan`
+* Test condition: `correctType != null`
+* Severity: minor
+
+## Rule 4.1.2-18
+
+### Requirement
+
+>*Heading structure element has no real content*
+
+### Error details
+
+Heading structure element is empty
+
+* Object type: `SAH`
+* Test condition: `correctType != null`
+* Severity: minor
+
+## Rule 4.1.2-19
+
+### Requirement
+
+>*Numbered heading structure element has no real content*
+
+### Error details
+
+Numbered heading structure element is empty
+
+* Object type: `SAHn`
+* Test condition: `correctType != null`
+* Severity: minor
+
+## Rule 4.1.2-29
+
+### Requirement
+
+>*, ...,
tags in a structure element does not match the number of rows of the visual representation of this table*
+
+### Error details
+
+Invalid number of rows in a table
+
+* Object type: `SATable`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1104).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-37
+
+### Requirement
+
+>*The number of columns in a
structure element does not match the number of rows of the visual representation of this table*
+
+### Error details
+
+Invalid number of columns in a table
+
+* Object type: `SATable`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1105).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-38
+
+### Requirement
+
+>*The row span of a
or structure element (table cell) does not match the row span of the visual representation of this table cell*
+
+### Error details
+
+Invalid row span of a table cell
+
+* Object type: `SATableCell`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1106).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-39
+
+### Requirement
+
+>*The column span of a or structure element (table cell) does not match the column span of the visual representation of this table cell*
+
+### Error details
+
+Invalid column span of a table cell
+
+* Object type: `SATableCell`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1107).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-40
+
+### Requirement
+
+>*The content is recognized as a list item, but is not marked with or structure element (table cell) is located below than some of the table cells of the next table row*
+
+### Error details
+
+Table cell is lower than expected
+
+* Object type: `SATableCell`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1100).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-42
+
+### Requirement
+
+>*The content of a or structure element (table cell) is located above than some of the table cells of the previous table row*
+
+### Error details
+
+Table cell is higher than expected
+
+* Object type: `SATableCell`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1101).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-43
+
+### Requirement
+
+>*The content of a or structure element (table cell) is located to the right to some of the table cells of the next table column*
+
+### Error details
+
+Table cell is shifted right
+
+* Object type: `SATableCell`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1102).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-44
+
+### Requirement
+
+>*The content of a or structure element (table cell) is located to the left to some of the table cells of the previous table column*
+
+### Error details
+
+Table cell is shifted left
+
+* Object type: `SATableCell`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1103).length == 0`
+* Severity: minor
+
+## Rule 4.1.2-45
+
+### Requirement
+
+>*This structure element is recognized as (regular table cell), but is tagged as (table header)*
+
+### Error details
+
+Invalid table header
+
+* Object type: `SATH`
+* Test condition: `correctType != 'TD'`
+* Severity: minor
+
+## Rule 4.1.2-46
+
+### Requirement
+
+>*Table of Content item text does not match any heading in the document*
+
+### Error details
+
+TOC item text is not found in the document
+
+* Object type: `SATOCI`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1007).length == 0`
+* Severity: major
+
+## Rule 4.1.2-47
+
+### Requirement
+
+>*Table of Content item text is not found on the destination page*
+
+### Error details
+
+TOC item is not found on the destination page
+
+* Object type: `SATOCI`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1008).length == 0`
+* Severity: major
+
+## Rule 4.1.2-48
+
+### Requirement
+
+>*Table of Content item does not have an interactive link to the destination page*
+
+### Error details
+
+TOC item has no destination link
+
+* Object type: `SATOCI`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1009).length == 0`
+* Severity: major
+
+## Rule 4.1.2-49
+
+### Requirement
+
+>*Table of Content item has invalid page number (label)*
+
+### Error details
+
+Incorrect page number in TOC item
+
+* Object type: `SATOCI`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1010).length == 0`
+* Severity: major
+
+## Rule 4.1.2-50
+
+### Requirement
+
+>*Table of Content items numbering is inconsistent / does not follow any pattern*
+
+### Error details
+
+Inconsistent TOC item numbering
+
+* Object type: `SATOCI`
+* Test condition: `errorCodes.split(',').filter(elem => elem == 1011).length == 0`
+* Severity: major
+
+## Rule 4.1.2-51
+
+### Requirement
+
+>*