You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adicionar o app Django sps ao repositório scielo-tools
Hoje, a lógica de conformidade SPS (geração de XML, marcação de citações no DOCX, validação packtools, HTML e PDF) está implementada no pacote sps/, mas só é utilizável no monólito quando o app manuscrito e as dependências satélite (rotulagem, docx_parser) estão presentes e corretamente configurados. O objetivo desta issue é tornar o sps uma camada isolada e reutilizável:
Sem dependência do app manuscrito, ia ou referencia.
Contrato Python estável (sps.xml, sps.xref, sps.utils, sps.exceptions) consumível por qualquer app Django ou script do projeto (manuscrito, spsvalidator, integrações futuras).
Auto-suficiente no âmbito da conformidade SPS: registo em INSTALLED_APPS, settings documentados, dependências explícitas em requirements/, smoke tests próprios.
Sem modelos de base de dados — módulo de lógica pura (models.py vazio); não exige migrations.
Âmbito:
Módulo
Responsabilidade
sps/xml.py
Geração de XML SPS a partir de DOCX + estrutura editorial (get_xml)
sps/xref.py
Marcação e validação de citações no DOCX (ABNT, Vancouver bracket/superscript)
sps/utils.py
Validação packtools (XML e pacote .zip), geração HTML e PDF
sps/exceptions.py
Exceções de domínio (XMLFileValidationError, SPSPackageValidationError, etc.)
sps/apps.py
Registo Django (SPSConfig)
Fora do âmbito desta issue:
Adição do app manuscrito, ia, referencia ou periodico.
API REST / JWT (DRF) — contrato inicial é biblioteca Python; API pode ser issue futura.
Migração de manuscrito/utils/xml_utils.py para sps/ (melhoria posterior).
Integração do pipeline editorial completo (DOCX → artigo → publicação).
Subtarefas
Copiar o pacote sps/`` para a raiz de scielo-tools(6 ficheiros:apps.py, exceptions.py, models.py, utils.py, xml.py, xref.py`).
Registar "sps" em LOCAL_APPS em config/settings/base.py.
Reutilização: o app sps já é logicamente separado do manuscrito
Sem testes próprios no initial: cobertura indireta em manuscrito/tests/; esta issue introduz testes mínimos em sps/tests/.
packtools via git: CI precisa de acesso a scieloorg/packtools durante o build Docker.
LibreOffice é dependência de sistema, não pip — relevante para Docker, produção e CI se testes de PDF forem incluídos.
Acoplamento Wagtail:sps/xml.py usa get_image_model() para resolver imagens por PK; para reuso fora de Wagtail, considerar callback injetável na fase de implementação.
Nomenclatura RCT vs código: o RCT menciona xml_manager; no initial o equivalente é sps/ + trechos em manuscrito/utils/xml_utils.py. Esta issue cobre apenas sps/.
Distinção de fluxos:sps.xref.mark_references(doc) marca citações no DOCX (hyperlinks/bookmarks); referencia + ia marcam bibliografia estruturada (JSON/XML JATS). São complementares, não substitutos.
Descrição da tarefa
Adicionar o app Django
spsao repositórioscielo-toolsHoje, a lógica de conformidade SPS (geração de XML, marcação de citações no DOCX, validação packtools, HTML e PDF) está implementada no pacote
sps/, mas só é utilizável no monólito quando o appmanuscritoe as dependências satélite (rotulagem,docx_parser) estão presentes e corretamente configurados. O objetivo desta issue é tornar ospsuma camada isolada e reutilizável:manuscrito,iaoureferencia.sps.xml,sps.xref,sps.utils,sps.exceptions) consumível por qualquer app Django ou script do projeto (manuscrito,spsvalidator, integrações futuras).INSTALLED_APPS, settings documentados, dependências explícitas emrequirements/, smoke tests próprios.models.pyvazio); não exige migrations.Âmbito:
sps/xml.pyget_xml)sps/xref.pysps/utils.py.zip), geração HTML e PDFsps/exceptions.pyXMLFileValidationError,SPSPackageValidationError, etc.)sps/apps.pySPSConfig)Fora do âmbito desta issue:
manuscrito,ia,referenciaouperiodico.manuscrito/utils/xml_utils.pyparasps/(melhoria posterior).Subtarefas
Copiar o pacote
sps/`` para a raiz descielo-tools(6 ficheiros:apps.py,exceptions.py,models.py,utils.py,xml.py,xref.py`).Registar
"sps"emLOCAL_APPSemconfig/settings/base.py.Adicionar dependências em
requirements/base.txt:lxml==4.9.4python-docx==1.1.2git+https://git@github.com/scieloorg/packtools@4.12.6#egg=packtoolsAdicionar pacote
rotulagem.Adicionar pacote
docx_parsere layoutdocx_parser/layouts/two_cols.docx.Configurar
HTML_GENERATION_CONFIGemconfig/settings/base.py(paths de CSS/JS estáticos compatíveis com o projeto).Garantir LibreOffice (
soffice) no container Django local ou documentar instalação manual.Avaliar e, se necessário, tornar opcional o uso de
wagtail.images.get_image_modelemsps/xml.py(parâmetroimage_resolverou fallback sem Wagtail).Criar testes smoke mínimos em
sps/tests/(imports,validate_zipcom fixture,xref.validate_markscom DOCX de exemplo).Executar smoke test no shell Django:
API pública a preservar / expor
Contrato consumido por
manuscrito(futuro),spsvalidatore outros apps:sps.xmlget_xml(article_docx, data_front, data, data_back, xref_map=None)sps.xrefis_marked(doc)mark_references(doc)validate_marks(doc)read_marks(doc)build_text_xref_replacer(doc)make_text_xref_fn_from_refs(ref_items)apply_xml_xrefs_to_docx(doc, xml_tree)sps.utilsvalidate_xml_document(xml_file_path, output_root_dir, params)validate_zip(zip_path).zipgenerate_html_for_xml_document(xml_file_path, output_root_dir, config, asset_url_map=None)generate_pdf_for_xml_document(xml_file_path, output_root_dir, params)sps.exceptionsXMLFileParsingError,XMLFileValidationError,XMLFileDocxGenerationErrorXMLFilePDFGenerationError,XMLFileHTMLGenerationError,SPSPackageValidationErrorCritérios de aceite
python manage.py checkexecuta sem erros comspsemLOCAL_APPS.manuscrito,iaoureferenciadentro desps/.make buildresolve dependências (incluindopacktoolsvia git).django_shellsemImportError.HTML_GENERATION_CONFIGacessível viadjango.conf.settings.generate_pdf_for_xml_documentencontradocx_parser/layouts/two_cols.docx.sps/tests/passa no CI.Como testar manualmente
Subir ambiente:
make build && make up && make django_migrate.Abrir shell:
make django_shell.Confirmar imports da API pública (sem
ImportError).Validar um pacote SPS
.zipexistente:(Opcional) Com DOCX de teste, exercitar marcação xref:
Considerações e notas
spsjá é logicamente separado domanuscritomanuscrito/tests/; esta issue introduz testes mínimos emsps/tests/.scieloorg/packtoolsdurante o build Docker.sps/xml.pyusaget_image_model()para resolver imagens por PK; para reuso fora de Wagtail, considerar callback injetável na fase de implementação.xml_manager; no initial o equivalente ésps/+ trechos emmanuscrito/utils/xml_utils.py. Esta issue cobre apenassps/.sps.xref.mark_references(doc)marca citações no DOCX (hyperlinks/bookmarks);referencia+iamarcam bibliografia estruturada (JSON/XML JATS). São complementares, não substitutos.docs/plans/2026-06-28-fragmentar-manuscrito.md(issue chore(deps): bump actions/checkout from 6 to 7 #3 na sequência sugerida).Referências