Objetivo
Implementar validações para o elemento <pub-date> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 75% (9 de 12 regras).
Nota: Algumas validações para <pub-date> podem já estar parcialmente implementadas no repositório. Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10.
Contexto
O elemento <pub-date> representa as datas de publicação do documento e do número/volume ao qual pertence. São obrigatórias duas datas distintas: uma para o documento (@date-type="pub") e outra para a coleção (@date-type="collection"). Validações corretas garantem presença de datas obrigatórias, formatos adequados, e conformidade com regras específicas para cada tipo de data.
Conformidade atual: X de 12 regras implementadas (X%)
Meta após implementação: 9 de 12 regras (75%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.pubdate
Regras principais conforme SPS 1.10:
-
Ocorrência:
<pub-date> deve aparecer uma ou mais vezes em <article-meta>
-
Datas obrigatórias:
<pub-date publication-format="electronic" date-type="pub"> - Data de publicação do documento (obrigatório)
<pub-date publication-format="electronic" date-type="collection"> - Data do número/volume (obrigatório)
-
Atributos obrigatórios:
@date-type (valores: pub, collection)
@publication-format="electronic" (obrigatório para ambas as datas)
-
Elementos obrigatórios para date-type="pub":
<day> (obrigatório)
<month> (obrigatório)
<year> (obrigatório)
-
Elementos para date-type="collection":
<year> (obrigatório)
<month> ou <season> (opcional, depende da periodicidade)
<day> não é permitido
-
Formato obrigatório:
<day> e <month> devem ter dois dígitos: 01, 02, ..., 12
-
Periodicidade e elementos:
- Anual: apenas
<year>
- Mensal:
<month> + <year>
- Bimestral/Quadrimestral/etc:
<season> + <year>
-
Observações:
- Datas
pub podem usar 00 em day/month para preenchimento posterior
- Datas
collection devem seguir a periodicidade do periódico
Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
| # |
Regra |
Nível |
Descrição |
| 1 |
Validar presença de <pub-date date-type="pub"> |
CRITICAL |
O elemento <pub-date> com @date-type="pub" é obrigatório |
| 2 |
Validar presença de <pub-date date-type="collection"> |
CRITICAL |
O elemento <pub-date> com @date-type="collection" é obrigatório |
| 3 |
Validar presença de @publication-format="electronic" |
CRITICAL |
O atributo @publication-format="electronic" é obrigatório em todas as <pub-date> |
| 4 |
Validar elementos obrigatórios em pub |
CRITICAL |
Para date-type="pub": <day>, <month> e <year> são obrigatórios |
| 5 |
Validar presença de <year> em collection |
CRITICAL |
Para date-type="collection": <year> é obrigatório |
| 6 |
Validar ausência de <day> em collection |
ERROR |
Para date-type="collection": <day> não é permitido |
| 7 |
Validar formato de dois dígitos para <day> e <month> |
ERROR |
Elementos <day> e <month> devem ter exatamente dois dígitos (01-31, 01-12) |
P1 – Importantes (implementar se possível)
| # |
Regra |
Nível |
Descrição |
| 8 |
Validar unicidade de tipos de data |
ERROR |
Deve haver exatamente um <pub-date> com date-type="pub" e um com date-type="collection" |
| 9 |
Validar valores numéricos válidos |
ERROR |
Valores de <day> devem estar entre 01-31, <month> entre 01-12 |
P2 – Futuras (fora do escopo deste Issue)
| # |
Regra |
Motivo de exclusão |
| 10 |
Validar data válida (dia/mês/ano formam data real) |
Média complexidade - requer validação de calendário |
| 11 |
Validar consistência de periodicidade com uso de month/season |
Alta complexidade - requer conhecimento da periodicidade do periódico |
| 12 |
Validar que data de pub é posterior ou igual a data de collection |
Baixa prioridade - lógica de negócio complexa |
Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/dates.py ou pub_date.py – Verificar se modelo existe
packtools/sps/validation/dates.py ou pub_date.py – Verificar validações existentes
packtools/sps/validation/rules/pub_date_rules.json ou similar – Verificar configuração
Criar (se não existirem):
packtools/sps/models/pub_date.py – Modelo de extração de dados
packtools/sps/validation/pub_date.py – Validações
packtools/sps/validation/rules/pub_date_rules.json – Configuração de níveis de erro
tests/sps/validation/test_pub_date.py – Testes unitários
Referenciar (implementações similares):
packtools/sps/validation/history.py – Validação de datas similar (day/month/year)
packtools/sps/validation/utils.py – Funções auxiliares (build_response)
Exemplos de XML
XML Válido (deve passar sem erros):
<!-- Exemplo 1: Periódico anual -->
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
<!-- Exemplo 2: Periódico mensal -->
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<month>01</month>
<year>2025</year>
</pub-date>
</article-meta>
<!-- Exemplo 3: Periódico bimestral (com season) -->
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<season>Jan-Feb</season>
<year>2025</year>
</pub-date>
</article-meta>
<!-- Exemplo 4: Data com dia e mês com dois dígitos -->
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>15</day>
<month>03</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<month>03</month>
<year>2025</year>
</pub-date>
</article-meta>
<!-- Exemplo 5: Data pub com 00 (placeholder para preenchimento posterior) -->
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>00</day>
<month>00</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<month>03</month>
<year>2025</year>
</pub-date>
</article-meta>
<!-- Exemplo 6: Periódico trimestral -->
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>03</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<season>Jan-Mar</season>
<year>2025</year>
</pub-date>
</article-meta>
XML Inválido – Caso 1: Sem pub-date type="pub" (CRITICAL)
<article-meta>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Elemento <pub-date> com @date-type="pub" é obrigatório
XML Inválido – Caso 2: Sem pub-date type="collection" (CRITICAL)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Elemento <pub-date> com @date-type="collection" é obrigatório
XML Inválido – Caso 3: Sem @publication-format (CRITICAL)
<article-meta>
<pub-date date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Atributo @publication-format é obrigatório em <pub-date>
XML Inválido – Caso 4: @publication-format com valor incorreto (CRITICAL)
<article-meta>
<pub-date publication-format="print" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Valor de @publication-format deve ser "electronic". Valor encontrado: "print"
XML Inválido – Caso 5: pub sem (CRITICAL)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Para @date-type="pub", elemento <day> é obrigatório
XML Inválido – Caso 6: pub sem (CRITICAL)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Para @date-type="pub", elemento <month> é obrigatório
XML Inválido – Caso 7: pub sem (CRITICAL)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Para @date-type="pub", elemento <year> é obrigatório
XML Inválido – Caso 8: collection sem (CRITICAL)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<month>03</month>
</pub-date>
</article-meta>
Erro esperado: Para @date-type="collection", elemento <year> é obrigatório
XML Inválido – Caso 9: collection com (ERROR)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<day>01</day>
<month>03</month>
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Para @date-type="collection", elemento <day> não é permitido
XML Inválido – Caso 10: com um dígito (ERROR)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>1</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Elemento <day> deve ter dois dígitos (use 01 ao invés de 1)
XML Inválido – Caso 11: com um dígito (ERROR)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>3</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Elemento <month> deve ter dois dígitos (use 03 ao invés de 3)
XML Inválido – Caso 12: Múltiplos pub-date type="pub" (ERROR)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="pub">
<day>15</day>
<month>02</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Deve haver exatamente um <pub-date> com @date-type="pub". Encontrados: 2
XML Inválido – Caso 13: Múltiplos pub-date type="collection" (ERROR)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Deve haver exatamente um <pub-date> com @date-type="collection". Encontrados: 2
XML Inválido – Caso 14: Mês inválido (13) (ERROR)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>01</day>
<month>13</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Valor de <month> inválido: 13 (deve estar entre 01 e 12)
XML Inválido – Caso 15: Dia inválido (32) (ERROR)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day>32</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Valor de <day> inválido: 32 (deve estar entre 01 e 31)
XML Inválido – Caso 16: Elementos vazios (CRITICAL)
<article-meta>
<pub-date publication-format="electronic" date-type="pub">
<day></day>
<month></month>
<year></year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year></year>
</pub-date>
</article-meta>
Erro esperado: Elementos de data não podem estar vazios
XML Inválido – Caso 17: Sem @date-type (CRITICAL)
<article-meta>
<pub-date publication-format="electronic">
<day>01</day>
<month>01</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
</article-meta>
Erro esperado: Atributo @date-type é obrigatório em <pub-date>
Padrão de Implementação
Diretrizes Gerais:
-
Seguir padrões existentes no repositório:
- Consultar implementações similares como
history.py (validação de datas)
- Usar estrutura de classes já estabelecida no packtools
- IMPORTANTE: Verificar se já existem validações parciais para
<pub-date> e integrá-las ou complementá-las
-
Internacionalização (i18n):
- OBRIGATÓRIO: Todas as mensagens devem suportar internacionalização
- Usar
advice_text e advice_params em build_response()
- Consultar conversas anteriores sobre implementação de i18n no packtools
- Referência: validações em
article_contribs.py que já implementam i18n completo
-
Validações condicionais:
- Validações que dependem de contexto devem retornar
None quando não aplicável
- Exemplo: validação de elementos obrigatórios só se aplica para tipos específicos de data
- Exemplo: validação de
<day> proibido só para collection
- Usar
filter_results() nos testes para remover None
-
Uso de build_response():
- Sempre usar
parent=self.data (dict completo, nunca string)
- Campo
response deve conter: "OK", "WARNING", "ERROR", "CRITICAL"
- Sempre fornecer
advice_text e advice_params para i18n
-
Modelo de dados:
- Criar propriedade que retorna lista de dicionários (um para cada
<pub-date>)
- Cada dict deve conter:
date_type, publication_format, day, month, year, season, parent, parent_id, parent_lang
- Separar datas por tipo para facilitar validações
-
Validação de presença:
- Verificar se existe pelo menos um
<pub-date date-type="pub">
- Verificar se existe pelo menos um
<pub-date date-type="collection">
- Contar ocorrências de cada tipo
-
Validação de formato de dois dígitos:
- Verificar comprimento exato:
len(day) == 2 e len(month) == 2
- Validar que consiste apenas de dígitos:
day.isdigit()
- Aceitar
00 como valor válido (placeholder)
-
Validação de valores numéricos:
- Day: 00-31 (00 é válido, 01-31 são normais)
- Month: 00-12 (00 é válido, 01-12 são normais)
- Usar conversão para int após validar formato
-
Validação específica por tipo:
- Para
pub: verificar presença de day, month, year
- Para
collection: verificar presença de year, ausência de day
Testes Esperados
Casos de teste obrigatórios:
Presença de datas obrigatórias:
Atributo @date-type:
Atributo @publication-format:
Elementos obrigatórios para pub:
Elementos para collection:
Formato de dois dígitos:
Valores numéricos válidos:
Unicidade de tipos:
Periodicidades diferentes:
Casos de borda:
Total esperado: ~60 testes unitários
Estrutura de testes:
- Usar
filter_results() para remover None dos resultados
- Asserções devem usar campo
response (não is_valid)
- Testes devem ser autocontidos e descritivos
- Agrupar testes por categoria (presença, atributos, elementos, formatos, unicidade)
Critérios de Aceite
O PR será aceito quando:
Referências
Documentação SPS:
Padrões JATS:
Referências internas packtools:
- Internacionalização: Consultar conversas anteriores sobre implementação de i18n
- Implementações similares:
history.py (validação de datas similar)
- Funções auxiliares:
utils.py (build_response)
Labels Sugeridas
enhancement validation SPS-1.10 good-first-issue
Impacto Esperado
Antes:
- Conformidade SPS 1.10 para
<pub-date>: X% (verificar validações existentes)
- Datas obrigatórias podem estar ausentes
- Atributos obrigatórios podem estar faltando
- Elementos incorretos por tipo de data não detectados
- Formatos inconsistentes (um vs dois dígitos) não detectados
- Múltiplas datas do mesmo tipo não detectadas
<day> em collection pode passar sem erro
Depois:
- Conformidade SPS 1.10 para
<pub-date>: 75% (9 de 12 regras)
- Validação CRITICAL de presença de datas obrigatórias (pub e collection)
- Validação CRITICAL de atributos obrigatórios
- Validação CRITICAL de elementos obrigatórios por tipo
- Validação ERROR de formato de dois dígitos
- Validação ERROR de valores numéricos válidos
- Validação ERROR de unicidade de tipos
- Validação ERROR de proibição de
<day> em collection
- ~60 testes unitários garantindo qualidade
- Internacionalização completa (PT/EN/ES)
Benefícios:
- Melhora a qualidade dos XMLs SciELO
- Garante presença de informações temporais essenciais
- Detecta inconsistências de formato antes da publicação
- Previne uso incorreto de elementos por tipo de data
- Facilita processamento automatizado de datas
- Melhora precisão de metadados temporais
- Garante conformidade com padrões SPS
- Facilita indexação e ordenação temporal
- Facilita manutenção e depuração de XMLs
Observações importantes:
- Implementar internacionalização ajustando as respostas das validações ao formato da função build_response em
packtools/sps/validation/utils.py;
- Verificar e adicionar as validações no orquestrador:
packtools/sps/validation/xml_validations.py e packtools/sps/validation/xml_validator.py
- Verificar a corretude dos testes exsitentes para a validação e complementar caso necessário;
- Realizar ajustes, caso necessário, nos modelos que são utilizados pelas validações, garantindo que o ajuste não interfira em possíveis usos atuais desses modelos.
Objetivo
Implementar validações para o elemento
<pub-date>conforme a especificação SPS 1.10, aumentando a conformidade de X% para 75% (9 de 12 regras).Nota: Algumas validações para
<pub-date>podem já estar parcialmente implementadas no repositório. Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10.Contexto
O elemento
<pub-date>representa as datas de publicação do documento e do número/volume ao qual pertence. São obrigatórias duas datas distintas: uma para o documento (@date-type="pub") e outra para a coleção (@date-type="collection"). Validações corretas garantem presença de datas obrigatórias, formatos adequados, e conformidade com regras específicas para cada tipo de data.Conformidade atual: X de 12 regras implementadas (X%)
Meta após implementação: 9 de 12 regras (75%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.pubdate
Regras principais conforme SPS 1.10:
Ocorrência:
<pub-date>deve aparecer uma ou mais vezes em<article-meta>Datas obrigatórias:
<pub-date publication-format="electronic" date-type="pub">- Data de publicação do documento (obrigatório)<pub-date publication-format="electronic" date-type="collection">- Data do número/volume (obrigatório)Atributos obrigatórios:
@date-type(valores:pub,collection)@publication-format="electronic"(obrigatório para ambas as datas)Elementos obrigatórios para
date-type="pub":<day>(obrigatório)<month>(obrigatório)<year>(obrigatório)Elementos para
date-type="collection":<year>(obrigatório)<month>ou<season>(opcional, depende da periodicidade)<day>não é permitidoFormato obrigatório:
<day>e<month>devem ter dois dígitos:01,02, ...,12Periodicidade e elementos:
<year><month>+<year><season>+<year>Observações:
pubpodem usar00em day/month para preenchimento posteriorcollectiondevem seguir a periodicidade do periódicoRegras a Implementar
P0 – Críticas (implementar obrigatoriamente)
<pub-date date-type="pub"><pub-date>com@date-type="pub"é obrigatório<pub-date date-type="collection"><pub-date>com@date-type="collection"é obrigatório@publication-format="electronic"@publication-format="electronic"é obrigatório em todas as<pub-date>pubdate-type="pub":<day>,<month>e<year>são obrigatórios<year>emcollectiondate-type="collection":<year>é obrigatório<day>emcollectiondate-type="collection":<day>não é permitido<day>e<month><day>e<month>devem ter exatamente dois dígitos (01-31, 01-12)P1 – Importantes (implementar se possível)
<pub-date>comdate-type="pub"e um comdate-type="collection"<day>devem estar entre 01-31,<month>entre 01-12P2 – Futuras (fora do escopo deste Issue)
Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/dates.pyoupub_date.py– Verificar se modelo existepacktools/sps/validation/dates.pyoupub_date.py– Verificar validações existentespacktools/sps/validation/rules/pub_date_rules.jsonou similar – Verificar configuraçãoCriar (se não existirem):
packtools/sps/models/pub_date.py– Modelo de extração de dadospacktools/sps/validation/pub_date.py– Validaçõespacktools/sps/validation/rules/pub_date_rules.json– Configuração de níveis de errotests/sps/validation/test_pub_date.py– Testes unitáriosReferenciar (implementações similares):
packtools/sps/validation/history.py– Validação de datas similar (day/month/year)packtools/sps/validation/utils.py– Funções auxiliares (build_response)Exemplos de XML
XML Válido (deve passar sem erros):
XML Inválido – Caso 1: Sem pub-date type="pub" (CRITICAL)
Erro esperado: Elemento
<pub-date>com@date-type="pub"é obrigatórioXML Inválido – Caso 2: Sem pub-date type="collection" (CRITICAL)
Erro esperado: Elemento
<pub-date>com@date-type="collection"é obrigatórioXML Inválido – Caso 3: Sem @publication-format (CRITICAL)
Erro esperado: Atributo
@publication-formaté obrigatório em<pub-date>XML Inválido – Caso 4: @publication-format com valor incorreto (CRITICAL)
Erro esperado: Valor de
@publication-formatdeve ser"electronic". Valor encontrado:"print"XML Inválido – Caso 5: pub sem (CRITICAL)
Erro esperado: Para
@date-type="pub", elemento<day>é obrigatórioXML Inválido – Caso 6: pub sem (CRITICAL)
Erro esperado: Para
@date-type="pub", elemento<month>é obrigatórioXML Inválido – Caso 7: pub sem (CRITICAL)
Erro esperado: Para
@date-type="pub", elemento<year>é obrigatórioXML Inválido – Caso 8: collection sem (CRITICAL)
Erro esperado: Para
@date-type="collection", elemento<year>é obrigatórioXML Inválido – Caso 9: collection com (ERROR)
Erro esperado: Para
@date-type="collection", elemento<day>não é permitidoXML Inválido – Caso 10: com um dígito (ERROR)
Erro esperado: Elemento
<day>deve ter dois dígitos (use01ao invés de1)XML Inválido – Caso 11: com um dígito (ERROR)
Erro esperado: Elemento
<month>deve ter dois dígitos (use03ao invés de3)XML Inválido – Caso 12: Múltiplos pub-date type="pub" (ERROR)
Erro esperado: Deve haver exatamente um
<pub-date>com@date-type="pub". Encontrados: 2XML Inválido – Caso 13: Múltiplos pub-date type="collection" (ERROR)
Erro esperado: Deve haver exatamente um
<pub-date>com@date-type="collection". Encontrados: 2XML Inválido – Caso 14: Mês inválido (13) (ERROR)
Erro esperado: Valor de
<month>inválido:13(deve estar entre 01 e 12)XML Inválido – Caso 15: Dia inválido (32) (ERROR)
Erro esperado: Valor de
<day>inválido:32(deve estar entre 01 e 31)XML Inválido – Caso 16: Elementos vazios (CRITICAL)
Erro esperado: Elementos de data não podem estar vazios
XML Inválido – Caso 17: Sem @date-type (CRITICAL)
Erro esperado: Atributo
@date-typeé obrigatório em<pub-date>Padrão de Implementação
Diretrizes Gerais:
Seguir padrões existentes no repositório:
history.py(validação de datas)<pub-date>e integrá-las ou complementá-lasInternacionalização (i18n):
advice_texteadvice_paramsembuild_response()article_contribs.pyque já implementam i18n completoValidações condicionais:
Nonequando não aplicável<day>proibido só para collectionfilter_results()nos testes para removerNoneUso de
build_response():parent=self.data(dict completo, nunca string)responsedeve conter:"OK","WARNING","ERROR","CRITICAL"advice_texteadvice_paramspara i18nModelo de dados:
<pub-date>)date_type,publication_format,day,month,year,season,parent,parent_id,parent_langValidação de presença:
<pub-date date-type="pub"><pub-date date-type="collection">Validação de formato de dois dígitos:
len(day) == 2elen(month) == 2day.isdigit()00como valor válido (placeholder)Validação de valores numéricos:
Validação específica por tipo:
pub: verificar presença de day, month, yearcollection: verificar presença de year, ausência de dayTestes Esperados
Casos de teste obrigatórios:
Presença de datas obrigatórias:
pubecollection(OK)pub(CRITICAL)collection(CRITICAL)<pub-date>(CRITICAL)Atributo @date-type:
<pub-date>com@date-type="pub"(OK)<pub-date>com@date-type="collection"(OK)<pub-date>sem@date-type(CRITICAL)@date-typevazio (CRITICAL)@date-typecom valor inválido (ERROR)Atributo @publication-format:
@publication-format="electronic"(OK)@publication-format(CRITICAL)@publication-formatvazio (CRITICAL)@publication-format="print"(CRITICAL - valor incorreto)@publication-format="online"(CRITICAL - valor incorreto)Elementos obrigatórios para pub:
Elementos para collection:
Formato de dois dígitos:
01(OK)31(OK)1(ERROR)001(ERROR)01(OK)12(OK)3(ERROR)012(ERROR)Valores numéricos válidos:
01(OK)31(OK)00(OK - placeholder)32(ERROR - inválido)01(OK)12(OK)00(OK - placeholder)13(ERROR - inválido)Unicidade de tipos:
Periodicidades diferentes:
Casos de borda:
Total esperado: ~60 testes unitários
Estrutura de testes:
filter_results()para removerNonedos resultadosresponse(nãois_valid)Critérios de Aceite
O PR será aceito quando:
<pub-date>foi analisado e integrado ou substituído adequadamentepub_date_rules.jsoncriado com todos os níveis de errobuild_response,filter_results, validações condicionais)Referências
Documentação SPS:
<pub-date>: Datas de PublicaçãoPadrões JATS:
<pub-date><day><month><year><season>Referências internas packtools:
history.py(validação de datas similar)utils.py(build_response)Labels Sugeridas
enhancementvalidationSPS-1.10good-first-issueImpacto Esperado
Antes:
<pub-date>: X% (verificar validações existentes)<day>em collection pode passar sem erroDepois:
<pub-date>: 75% (9 de 12 regras)<day>em collectionBenefícios:
Observações importantes:
packtools/sps/validation/utils.py;packtools/sps/validation/xml_validations.pyepacktools/sps/validation/xml_validator.py