Skip to main content
Em vez de strings e inteiros soltos, todos os campos de domínio nos SDKs SUOT são representados por Value Objects — objetos imutáveis que carregam um valor validado, transmitem o significado exato do campo e são completamente compreensíveis por IDEs, PHPStan e agentes de IA. Se um CNPJ inválido for fornecido, o erro acontece na construção do objeto, não em algum ponto imprevisível durante a execução.

O que é um Value Object

Um Value Object é um objeto cujo valor define sua identidade — dois Cnpj com o mesmo número são equivalentes, independentemente de serem instâncias diferentes. Nos SDKs SUOT, Value Objects têm três propriedades fundamentais:
  • Imutabilidade — após construído, o valor não pode ser alterado
  • Validação no construtor — dados inválidos lançam exceção imediatamente, na origem
  • Tipagem explícitaCnpj não é intercambiável com Cpf, mesmo que ambos sejam strings por baixo
Essa abordagem elimina uma categoria inteira de bugs: passar um CPF onde um CNPJ é esperado torna-se um erro de tipo detectado pelo PHPStan, não um erro em produção.

Value Objects disponíveis

A tabela abaixo lista os Value Objects presentes nos SDKs SUOT. Consulte a documentação de cada SDK para o conjunto completo.
Value Objects aceitam strings com ou sem formatação (pontos, barras, hífens). A normalização ocorre internamente — você não precisa limpar a string antes de construir o objeto.

Validação embutida

A validação acontece no construtor, não em um método validate() separado que você precisa lembrar de chamar. Isso significa que um Value Object que existe em memória é, por definição, válido.
Nunca capture InvalidValueException para silenciar o erro e continuar o fluxo. Essa exceção indica que os dados de entrada são inválidos — a aplicação deve rejeitá-los antes de tentar qualquer operação fiscal ou regulatória.

Value Objects e PHPStan

Os SDKs SUOT são desenvolvidos com PHPStan ao nível máximo. Todos os métodos de Commands, Handlers e Results usam tipos concretos de Value Objects em suas assinaturas — nunca string onde um Cnpj é esperado.
Isso significa que erros de integração que normalmente só apareceriam em produção são detectados no pipeline de CI — ou diretamente na sua IDE, antes mesmo de rodar o código.

Usando Value Objects com named arguments

A combinação de Value Objects e named arguments torna o código de integração autoexplicativo. Não é necessário consultar a documentação para entender o que cada argumento representa.
Se a sua IDE exibir o tipo incorreto para um Value Object (por exemplo, inferir mixed em vez do tipo concreto), verifique se o PHPStan e o servidor de linguagem PHP da sua IDE estão usando a mesma versão do php.ini e do autoloader. Editores como PhpStorm e VS Code com Intelephense resolvem tipos de Value Objects automaticamente quando o Composer autoload está configurado corretamente.