@@ -39,12 +39,14 @@ em servidores institucionais:
3939 diferentes localidades.
4040
4141Em todos os modos a distribuição é baseada em contêineres Docker.
42- Para desenvolvimento, há um Compose pronto em ``local.yml `` com os
42+ Para desenvolvimento há um Compose pronto em ``local.yml `` com os
4343serviços ``django ``, ``postgres ``, ``redis ``, ``celeryworker ``,
44- ``celerybeat ``, ``flower `` e ``mailhog ``. Para produção em ambientes
45- maiores há manifestos Kubernetes em ``kubernetes/ `` (Deployments para
46- Django/Celery e StatefulSets para PostgreSQL e Redis), o que padroniza
47- o ambiente e simplifica a instalação.
44+ ``celerybeat ``, ``flower `` e ``mailhog ``. Para produção está
45+ prevista a entrega de um ``production.yml `` análogo (ainda em
46+ construção), além dos manifestos Kubernetes em ``kubernetes/ ``
47+ (Deployments para Django/Celery e StatefulSets para PostgreSQL e
48+ Redis) para ambientes maiores. Essa padronização simplifica a
49+ instalação em qualquer um dos modos descritos acima.
4850
4951Requisitos de hardware e opções de LLM
5052^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -379,6 +381,130 @@ Público-alvo
379381 possibilidades descritas em *Modos de Instalação *).
380382
381383
384+ Requisitos não funcionais
385+ ----------------------------------------------------------------------
386+
387+ Estes requisitos orientam o projeto e a evolução do MarkAPI,
388+ independentemente das funcionalidades específicas:
389+
390+ * **Portabilidade de instalação **: a aplicação deve poder ser
391+ instalada nos três modos descritos (desktop monousuário, servidor
392+ em intranet e servidor na internet), reaproveitando o mesmo
393+ conjunto de imagens Docker e o mesmo código-base.
394+ * **Reprodutibilidade do ambiente **: dependências fixadas em
395+ ``requirements/base.txt ``, ``requirements/local.txt `` e
396+ ``requirements/production.txt ``; ambiente padronizado via Docker
397+ Compose (``local.yml ``, ``production.yml `` previsto) e manifestos
398+ Kubernetes (``kubernetes/ ``).
399+ * **Internacionalização (i18n) e localização (l10n) **: suporte a
400+ múltiplos idiomas via ``django.middleware.locale.LocaleMiddleware ``
401+ e ``wagtail-localize ``; conteúdo SPS multilíngue (PDFs por idioma)
402+ com detecção via ``langdetect ``/``langid ``.
403+ * **Escalabilidade horizontal **: separação clara entre processo web
404+ (Django/Gunicorn) e *workers * assíncronos (Celery), permitindo
405+ escalar cada camada de forma independente em Kubernetes.
406+ * **Resiliência e tolerância a falhas **: tarefas idempotentes em
407+ Celery, *retries * com ``tenacity `` para operações sujeitas a
408+ falhas transitórias (downloads, chamadas a serviços externos) e
409+ *broker * Redis com persistência configurável.
410+ * **Observabilidade **: registro estruturado de eventos do domínio
411+ via ``tracker.GeneralEvent ``, monitoramento de *workers * e tarefas
412+ via Flower, integração com Sentry e Elastic APM em produção.
413+ * **Segurança **: autenticação JWT na API REST
414+ (``djangorestframework-simplejwt ``), proteção CSRF/clickjacking,
415+ reCAPTCHA em formulários públicos (``wagtail-django-recaptcha ``)
416+ e gestão de segredos via variáveis de ambiente
417+ (``django-environ ``, arquivos em ``.envs/ ``); nenhum segredo
418+ comitado no repositório.
419+ * **Privacidade dos dados **: a marcação pode ser executada
420+ inteiramente *on-premise * (LLM local), sem envio dos manuscritos
421+ a serviços externos. Quando o usuário/instituição opta por uma
422+ API de LLM contratada, a responsabilidade por custo, política
423+ de privacidade e termos de uso do provedor é do usuário.
424+ * **Desempenho **: aceleração por GPU quando disponível
425+ (``llama-cpp-python ``); processamento assíncrono em segundo plano
426+ para não bloquear a interface; *cache * e reuso de marcações de
427+ referências já processadas (``Reference ``/``ElementCitation ``
428+ controlados por ``ReferenceStatus ``).
429+ * **Conformidade com o SPS **: o XML produzido deve passar nas
430+ validações do ``packtools `` (versão fixada em
431+ ``requirements/base.txt ``), garantindo aderência ao SciELO
432+ Publishing Schema.
433+ * **Manutenibilidade **: organização modular em apps Django
434+ independentes, código sob ``flake8 `` (linha máxima de 120
435+ caracteres) e ``isort ``, conforme ``setup.cfg ``.
436+ * **Auditabilidade **: histórico de alterações de marcações e
437+ status (``ReferenceStatus ``), tarefas Celery persistidas via
438+ ``django_celery_results `` e eventos relevantes em ``tracker ``.
439+ * **Compatibilidade com navegadores modernos ** para a interface
440+ Wagtail e *assets * servidos via ``whitenoise ``/``django-compressor ``.
441+
442+
443+ Perspectivas (funcionalidades futuras)
444+ ----------------------------------------------------------------------
445+
446+ A seguir, sugestões de evolução do MarkAPI a serem priorizadas
447+ conforme a demanda da comunidade SciELO e dos editores parceiros.
448+ Estas são *propostas *, ainda não implementadas:
449+
450+ * **Suporte a novos provedores de LLM **: além do LLaMA local
451+ (``llama-cpp-python ``) e Google Gemini
452+ (``google-generativeai ``), oferecer integração configurável com
453+ outros provedores (OpenAI, Anthropic, Mistral, Azure OpenAI,
454+ modelos locais via Ollama/vLLM), com seleção pelo administrador
455+ via ``core_settings ``.
456+ * **Marcação assistida de outros elementos do SPS **: estender o
457+ serviço atual de referências para outros blocos do XML SPS, como
458+ *afiliações *, *autores *, *agradecimentos *, *financiamento *,
459+ *figuras/tabelas * e *seções do corpo do texto *.
460+ * **Editor visual de XML SPS no navegador **: interface WYSIWYG
461+ integrada ao Wagtail para revisão e ajuste manual do XML gerado,
462+ com destaque das diferenças entre versões (LLM × revisão humana).
463+ * **Importação a partir de outros formatos **: além de ``.docx ``,
464+ aceitar ``.odt ``, ``.rtf ``, LaTeX e PDF (com OCR opcional)
465+ como entrada para conversão em XML SPS.
466+ * **Validação incremental e diagnósticos amigáveis **: feedback em
467+ tempo real durante a marcação, com mensagens de erro do
468+ ``packtools `` traduzidas e contextualizadas para o editor.
469+ * **Integração com fontes externas de metadados **: enriquecimento
470+ automático de referências a partir de Crossref, PubMed, DOI,
471+ ORCID, ROR (afiliações) e SciELO, reduzindo erros de marcação
472+ e padronizando identificadores.
473+ * **Empacotamento e ingestão automatizada **: publicação direta do
474+ ``.zip `` SPS em sistemas downstream (SciELO PS, OJS, repositórios
475+ institucionais) via APIs ou *webhooks *.
476+ * **Integração com fluxos editoriais **: conectores com OJS, ScholarOne
477+ e plataformas similares para importar manuscritos aceitos e
478+ exportar pacotes SPS de volta ao fluxo editorial.
479+ * **Versionamento e auditoria de marcações **: histórico completo
480+ por documento e por referência, com diff entre versões e
481+ possibilidade de *rollback *.
482+ * **Painéis e métricas **: *dashboard * no admin com tempo médio de
483+ marcação por artigo, taxa de revisão manual sobre marcação
484+ automática, qualidade do LLM por tipo de referência e custo
485+ estimado quando usada API externa.
486+ * **Treinamento/ajuste fino do LLM local **: pipeline opcional para
487+ *fine-tuning * do modelo com exemplos curados pela equipe
488+ editorial, melhorando a precisão para o vocabulário e o estilo
489+ de cada periódico.
490+ * **API pública versionada e documentada **: expansão do
491+ ``ReferenceViewSet `` para uma API REST completa (e/ou GraphQL)
492+ com documentação OpenAPI/Swagger e versionamento (``/api/v1 ``,
493+ ``/api/v2 ``).
494+ * **SSO e perfis de acesso **: integração com provedores SAML/OIDC
495+ (Shibboleth, Keycloak, ORCID) e perfis granulares por papel
496+ (autor, marcador, revisor, administrador).
497+ * **Modo *offline* desktop **: empacotamento *all-in-one * (por
498+ exemplo via Docker Desktop ou um instalador específico) para o
499+ modo monousuário, com modelo LLM pequeno embutido e atualizações
500+ controladas pelo próprio usuário.
501+ * **Acessibilidade (WCAG) **: revisão da interface Wagtail para
502+ conformidade com diretrizes de acessibilidade.
503+ * **Telemetria opcional e anonimizada **: coleta opt-in de métricas
504+ agregadas de uso para orientar a evolução do produto, sem
505+ compartilhamento de conteúdo de manuscritos.
506+
507+
382508Referências
383509----------------------------------------------------------------------
384510
0 commit comments