Arquitetura

O Speco segue uma arquitetura modular baseada no framework Tryton 8.0, com submódulos git que podem ser carregados independentemente.

Hierarquia de Módulos

A seguir a hierarquia de dependências dos submódulos Speco:

speco_suspend       → ir (MÓDULO BASE)
    ↓
speco_core          → ir, res, party, speco_suspend
    ↓
speco_group         → ir, res, party, speco, speco_core, speco_suspend
    ↓
speco_production    → ir, res, party, product, country, speco, speco_core, speco_suspend
    ↓
speco_production_agroindustry → party, speco_production (extensão)
    ↓
speco_family        → ir, res, speco_production
    ↓
speco_management_scheme → ir, res, speco_production + speco_family
    ↓
speco_documents     → ir, res, speco
    ↓
speco_extend        → TODOS OS MÓDULOS ANTERIORES (MÓDULO PRINCIPAL)
    ↓
speco_annuity       → ir, speco_extend, notification_email
    ↓
speco_ecovida       → ir, speco_extend, notification_email

Descrição dos Módulos Base

speco_suspend

Módulo base que fornece o mixin Suspend para controle de estado:

  • speco.suspend - Mixin com estados: active, inactive, suspended, excluded, detached

  • speco.suspend_type - Tipos de suspensão

  • speco.suspend_history - Histórico de suspensões

  • speco.suspension_request - Solicitação de suspensão

speco_core

Módulo de nucleação (Core):

  • speco.core - Modelo de Núcleo SPG

  • speco.core_supporting_entity - Entidades de suporte

  • party.party - Extensão com supporting_entities

  • speco.suspension_request - Extensão com campo core

speco_group

Módulo de Grupos:

  • speco.group - Modelo de Grupo

  • speco.group_coordinator - Coordenadores de grupo

  • party.party - Extensão com current_group e group

speco_production

Módulo de Entidades de Produção:

  • speco.production_entity - UP ou Agroindústria

  • speco.production_scope - Escopo de produção (vegetal, animal, mudas)

  • speco.production_entity_production - Produções vinculadas

  • Helpers para coordenadas (latitude/longitude/DMS)

speco_family

Módulo de Famílias:

  • speco.family - Modelo de Família

  • speco.family_members - Membros da família

  • speco.family_change_group_history - Histórico de mudança de grupo

speco_management_scheme

Módulo de PMO/PPO:

  • speco.production_entity.management_scheme - Esquema de gestão

  • Extensões em ProductionEntityProduction e ProductionQuantity

speco_documents

Módulo base de documentos:

  • speco.process_management - Processo de gestão

  • DeliveryDocumentValidator - Validador de documentos

speco_extend

MÓDULO PRINCIPAL - Contém as regras de negócio principais:

  • speco.certification - Certificação (Workflow)

  • speco.certificate_line - Linha de certificado

  • speco.dac - DAC (Workflow)

  • speco.delivery_document - Documentos de entrega

  • speco.main_models_fields - Mixin de notificações

  • speco.version - Mixin de versionamento

speco_annuity

Módulo de Anualidades:

  • speco.annual - Anualidade hierárquica

  • speco.annuity.line - Linha de anualidade

  • speco.annuity.payment - Pagamento

speco_notifications

Módulo de Notificações:

  • ExpirationDocumentMixin - Mixin para cálculo de expiração

speco_ecovida

Módulo específico da Rede Ecovida:

  • res.user - Extensão com default_language = pt

  • Reportes HTML de notificações

  • Scripts de importação

Padrões de Desenvolvimento

  1. Extensões com PoolMeta: Nunca modificar módulos base, sempre usar PoolMeta

  2. Mixins reutilizáveis: Código compartilhado em mixins (Suspend, Version)

  3. Estados em Python: Estados de campos definidos em Python, não em XML

  4. Herança de vistas: Usar xpath para extender vistas, não criar duplicatas

Erros Comuns

  1. Imports circulares: Solução - constants.py centralizado

  2. AttributeError em __setup__(): Solução - guard clause com hasattr()

  3. XMLs duplicados: Solução - manter apenas no módulo base

  4. Referências sem prefixo: Solução - usar prefixo do módulo (speco_core.menu_speco_core)