-
Notifications
You must be signed in to change notification settings - Fork 24
Implementa validação completa de <alternatives> para conformidade SPS #1067
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
15920de
fac5e4d
96bd793
2e15488
064b04c
365d258
85be646
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -59,6 +59,35 @@ def file_extension(self): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return file_name.split(".")[-1] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def graphic_alt_text(self): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts alt-text from graphic within alternatives. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| str or None: The text content of <alt-text> if present, None otherwise. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| graphic = self.element.find(".//alternatives/graphic") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if graphic is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| alt_text_elem = graphic.find("alt-text") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if alt_text_elem is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return alt_text_elem.text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def graphic_long_desc(self): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts long-desc from graphic within alternatives. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| str or None: The text content of <long-desc> if present, None otherwise. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| graphic = self.element.find(".//alternatives/graphic") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if graphic is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| long_desc_elem = graphic.find("long-desc") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if long_desc_elem is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return long_desc_elem.text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+65
to
+90
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts alt-text from graphic within alternatives. | |
| Returns: | |
| str or None: The text content of <alt-text> if present, None otherwise. | |
| """ | |
| graphic = self.element.find(".//alternatives/graphic") | |
| if graphic is not None: | |
| alt_text_elem = graphic.find("alt-text") | |
| if alt_text_elem is not None: | |
| return alt_text_elem.text | |
| return None | |
| @property | |
| def graphic_long_desc(self): | |
| """ | |
| Extracts long-desc from graphic within alternatives. | |
| Returns: | |
| str or None: The text content of <long-desc> if present, None otherwise. | |
| """ | |
| graphic = self.element.find(".//alternatives/graphic") | |
| if graphic is not None: | |
| long_desc_elem = graphic.find("long-desc") | |
| if long_desc_elem is not None: | |
| return long_desc_elem.text | |
| return None | |
| Extracts alt-text from one or more graphics within alternatives. | |
| Returns: | |
| str or None: The concatenated text content of all <alt-text> elements | |
| found under <alternatives>/<graphic>. Returns None if no <alt-text> | |
| elements are present at all (even if <graphic> exists). If at least | |
| one <alt-text> element is present but empty, it contributes an empty | |
| string to the result. | |
| """ | |
| graphics = self.element.findall(".//alternatives/graphic") | |
| alt_texts = [] | |
| for graphic in graphics: | |
| for alt_text_elem in graphic.findall("alt-text"): | |
| # Normalize None to empty string so presence is distinguishable | |
| # from complete absence of <alt-text> elements. | |
| alt_texts.append(alt_text_elem.text or "") | |
| if not alt_texts: | |
| return None | |
| # Join multiple alt-text values with a space to preserve the original | |
| # return type (str) while supporting multiple graphics. | |
| return " ".join(alt_texts) | |
| @property | |
| def graphic_long_desc(self): | |
| """ | |
| Extracts long-desc from one or more graphics within alternatives. | |
| Returns: | |
| str or None: The concatenated text content of all <long-desc> elements | |
| found under <alternatives>/<graphic>. Returns None if no <long-desc> | |
| elements are present at all (even if <graphic> exists). If at least | |
| one <long-desc> element is present but empty, it contributes an empty | |
| string to the result. | |
| """ | |
| graphics = self.element.findall(".//alternatives/graphic") | |
| long_desc_texts = [] | |
| for graphic in graphics: | |
| for long_desc_elem in graphic.findall("long-desc"): | |
| # Normalize None to empty string so presence is distinguishable | |
| # from complete absence of <long-desc> elements. | |
| long_desc_texts.append(long_desc_elem.text or "") | |
| if not long_desc_texts: | |
| return None | |
| # Join multiple long-desc values with a space to preserve the original | |
| # return type (str) while supporting multiple graphics. | |
| return " ".join(long_desc_texts) |
Copilot
AI
Jan 27, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In Fig.data(), the key for alternatives was changed from "alternatives" to "alternative_elements". This is a breaking change for existing consumers/tests (e.g., packtools/sps/validation/fig.py uses data.get("alternatives")), and will cause figure validations to treat valid figures as missing alternatives. Either keep the original "alternatives" key (and optionally add "alternative_elements" as an alias) or update all downstream references and related tests in the same PR.
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -67,7 +67,6 @@ def mml_math(self): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if formula is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return ET.tostring(formula, encoding="unicode", method="text").strip() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def tex_math(self): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -95,6 +94,36 @@ def graphic(self): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if formula is not None and formula.get(f"{namespace}href") is not None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def graphic_alt_text(self): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts alt-text from graphic within alternatives. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| str or None: The text content of <alt-text> if present, None otherwise. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| graphic = self.element.find(".//alternatives/graphic") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if graphic is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| alt_text_elem = graphic.find("alt-text") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if alt_text_elem is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return alt_text_elem.text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+105
to
+109
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def graphic_long_desc(self): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts long-desc from graphic within alternatives. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| str or None: The text content of <long-desc> if present, None otherwise. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| graphic = self.element.find(".//alternatives/graphic") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if graphic is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| long_desc_elem = graphic.find("long-desc") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if long_desc_elem is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return long_desc_elem.text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+115
to
+126
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts long-desc from graphic within alternatives. | |
| Returns: | |
| str or None: The text content of <long-desc> if present, None otherwise. | |
| """ | |
| graphic = self.element.find(".//alternatives/graphic") | |
| if graphic is not None: | |
| long_desc_elem = graphic.find("long-desc") | |
| if long_desc_elem is not None: | |
| return long_desc_elem.text | |
| return None | |
| Extracts long-desc from graphics within alternatives. | |
| Returns: | |
| str or None: The text content of <long-desc> if present. If multiple | |
| <long-desc> elements exist under <alternatives>/<graphic>, their texts | |
| are concatenated with spaces. Returns None only when no <long-desc> | |
| elements are present at all. | |
| """ | |
| long_desc_elems = self.element.findall(".//alternatives/graphic/long-desc") | |
| if not long_desc_elems: | |
| return None | |
| texts = [(elem.text or "").strip() for elem in long_desc_elems] | |
| # Filter out purely empty strings only if there are non-empty ones, | |
| # so empty <long-desc/> still counts when it is the only content. | |
| non_empty_texts = [t for t in texts if t] | |
| if non_empty_texts: | |
| texts_to_use = non_empty_texts | |
| else: | |
| texts_to_use = texts | |
| if len(texts_to_use) == 1: | |
| return texts_to_use[0] | |
| return " ".join(texts_to_use) |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -76,6 +76,36 @@ def graphic(self): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return graphic.get("{http://www.w3.org/1999/xlink}href") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def graphic_alt_text(self): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts alt-text from graphic within alternatives. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| str or None: The text content of <alt-text> if present, None otherwise. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| graphic = self.element.find(".//alternatives/graphic") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if graphic is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| alt_text_elem = graphic.find("alt-text") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if alt_text_elem is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return alt_text_elem.text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+82
to
+91
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Extracts alt-text from graphic within alternatives. | |
| Returns: | |
| str or None: The text content of <alt-text> if present, None otherwise. | |
| """ | |
| graphic = self.element.find(".//alternatives/graphic") | |
| if graphic is not None: | |
| alt_text_elem = graphic.find("alt-text") | |
| if alt_text_elem is not None: | |
| return alt_text_elem.text | |
| Extracts alt-text from graphics within alternatives. | |
| Returns: | |
| str or None: The text content of the first <alt-text> found under any | |
| <graphic> inside <alternatives>. Returns an empty string ("") if an | |
| <alt-text> element is present but has no text content, and None if no | |
| <alt-text> element is found at all. | |
| """ | |
| graphics = self.element.findall(".//alternatives/graphic") | |
| for graphic in graphics: | |
| alt_text_elem = graphic.find("alt-text") | |
| if alt_text_elem is not None: | |
| # Normalize empty alt-text (e.g., <alt-text/>) to empty string | |
| return alt_text_elem.text or "" |
Copilot
AI
Jan 27, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
graphic_long_desc currently returns long_desc_elem.text from only the first <alternatives/graphic>. This will miss prohibited that is empty () or appears under another within . Consider collecting all matching long-desc nodes (or returning a boolean/count) so validations can reliably detect presence.
| Extracts long-desc from graphic within alternatives. | |
| Returns: | |
| str or None: The text content of <long-desc> if present, None otherwise. | |
| """ | |
| graphic = self.element.find(".//alternatives/graphic") | |
| if graphic is not None: | |
| long_desc_elem = graphic.find("long-desc") | |
| if long_desc_elem is not None: | |
| return long_desc_elem.text | |
| return None | |
| Extracts long-desc from graphics within alternatives. | |
| Returns: | |
| str or None: The concatenated text content of all <long-desc> elements | |
| under <alternatives>/<graphic>. Returns None if no <long-desc> elements | |
| are present at all (even if some are empty). | |
| """ | |
| long_desc_elems = self.element.findall(".//alternatives/graphic/long-desc") | |
| if not long_desc_elems: | |
| return None | |
| # Combine text from all long-desc elements, treating missing text as empty | |
| parts = [] | |
| for elem in long_desc_elems: | |
| text = elem.text or "" | |
| # Normalize whitespace around each piece without erasing the distinction | |
| # between absence of elements (None) and empty content (""). | |
| text = text.strip() | |
| if text: | |
| parts.append(text) | |
| # If there were long-desc elements but all were empty/whitespace-only, | |
| # return an empty string to signal presence without content. | |
| if not parts: | |
| return "" | |
| return " ".join(parts) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Rossi-Luciano talvez já esteja resolvido para todos os graphic não importa o contexto. Antes de concluir que tem que criar novas validações, verifique se já existem