Skip to content

Commit bc5b461

Browse files
docs: add non-functional requirements and roadmap; restore production.yml mention
Agent-Logs-Url: https://github.com/scieloorg/markapi/sessions/2734776c-1774-4ae9-96da-9bf7d163345b Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
1 parent f4d3cb6 commit bc5b461

1 file changed

Lines changed: 131 additions & 5 deletions

File tree

docs/proposta.rst

Lines changed: 131 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,14 @@ em servidores institucionais:
3939
diferentes localidades.
4040

4141
Em 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
4343
serviç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

4951
Requisitos 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+
382508
Referências
383509
----------------------------------------------------------------------
384510

0 commit comments

Comments
 (0)