Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.                                                             

  

Informações Gerais

Especificação

Produto

TOTVS

Módulo

EAI

Segmento Executor

Framework

Projeto1

DEAI1

IRM/EPIC1


Requisito/Story/Issue1

DEAI1-1160

Subtarefa1

DEAI1-1608

Chamado/Ticket2


País

(  ) Brasil  (  ) Argentina  (  ) Mexico  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colombia   ( X ) TODOS.

Outros

<Caso necessário informe outras referências que sejam pertinentes a esta especificação. Exemplo: links de outros documentos ou subtarefas relacionadas>.

   Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos). 

Objetivo

Elaborar a especificação que orientará a implementação do Identificador Global de Recursos nas respectivas linhas de produto com EAI.


Informações
titlePara sua informação

Este documento leva em consideração que o leitor tenha um conhecimento prévio da mensagem padronizada TOTVS. Caso algum termo não esteja suficientemente descrito aqui, recomenda-se consultar o documento Padrão para criação de mensagem padronizada, disponível no portal de Integrações TOTVS.


Definições da Regra de Negócio

Estamos propondo a criação de um Identificador Global de Recursos para as entidades trafegadas entre os ERP's da TOTVS afim de substituir o uso de "Internal ID" nas integraçõesem todas as integrações SOAP e REST.

Pré-requisitos

As marcas deverão atender os seguintes pré-requisitos:

  • Devem respeitar a sintaxe de URI descrita na RFC-3986;
  • Devem respeitar a sintaxe de URN descrita na RFC-8141;
  • Devem respeitar a definição de UUID descrita na RFC-4122;

Termos e Nomenclaturas

Os termos "DEVE", "NÃO DEVE", "REQUERIDO", "PODE", "NÃO PODE", "DEVERIA", "NÃO DEVERIA", "RECOMENDADO", "NÃO RECOMENDADO" e "OPCIONAL" devem ser interpretados como descritos na BCP-14, RFC-2119 e RFC-8174.


Informações
titleRecursos

Definimos RECURSO como entidade que é trafegada Recursos podem ser compreendidos como as Entidades que são trafegadas através das mensagens padronizadas a partir do EAI das linhas de produtos dos ERP's da TOTVS.

Definições Gerais

Em termos gerais, o ERP de onde se origina a entidade a ser trafegada através do EAI (RM, Datasul, Protheus, Logix) irá realizar a geração do UUID v4, que identificará este recurso através de todas as linhas de produtos que compartilhem esta integração.

Nossa proposta inicial é de se utilizar UUID's (Universally Unique Identifier), também conhecidos por GUID's (Globally Unique IDentifier), como URN (Uniform Resource Name) de entidades sendo trafegadas entre os ERP's da TOTVS.


Informações
titlePara sua informação

Um UUID é composto por 128 bits de informação e não requer um processo de geração centralizado.


Uma das principais razões pela escolha do UUID é que, além de sua geração poder ser descentralizada e automatizada, o algoritmo de geração do UUID suporta geração concorrente de até 10 milhões de registros por segundo por máquina, permitindo seu uso até como identificador de transações.


Informações
titlePara sua informação

Exemplo de uma representação em texto de um UUID como URN:

urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6


Foi escolhida a versão 4 (UUID v4) por se tratar de um algoritmo que utiliza geração de valores randômicos e que não se baseia no MAC Address da máquina que realiza a geração do identificador (UUID v1).O sistema de onde se origina a informação a ser trafegada através da integração EAI 2.0 (RM, Datasul, Protheus, Logix) irá realizar a geração do UUID v4, que identificará este recurso através de todas as linhas de produtos que compartilhem esta integração

Funcionamento

Elaboramos duas propostas de implementação para o Identificador Global de Recursos

Proposta 1

Todas as linhas irão adequar seus adapters para enviar o Identificador Global de Recursos através da entidade "InternalId" no conteúdo de uma mensagem padronizada.

Proposta 2

Todas as linhas irão adequar seus adapters para enviar o Identificador Global de Recursos através da entidade "GlobalId" no conteúdo de uma mensagem padronizada.

Estrutura

A especificação atual das mensagens será alterada para discriminar o tipo de identificador de recursos sendo utilizado na mensagem disparada.

Cabeçalho XML/SOAP

Iremos incluir um atributo "GlobalIdType" no elemento "MessageInformation"

Bloco de código
languagexml
<xs:attribute name="GlobalIdType" use="optional">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="UUID"></xs:enumeration>
            <xs:enumeration value="INTERNALID"></xs:enumeration>
            <xs:enumeration value="internalid"></xs:enumeration>
            <xs:enumeration value="uuid"></xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
</xs:attribute>

Especificação do elemento MessageInformation

Bloco de código
languagexml
<xs:element name="MessageInformation" type="MessageInformationType" />
Bloco de código
languagexml
    <xs:complexType name="MessageInformationType">
        <xs:annotation>
            <xs:documentation>
                Bloco com informações sobre a origem da mensagem.
            </xs:documentation>
        </xs:annotation>

        <xs:sequence>
            <xs:element name="UUID" type="UUIDType" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        Define um identificador universal para esta
                        mensagem. Duas mensagens não podem ter o mesmo
                        UUID e este valor permanece sempre o mesmo, seja
                        no aplicativo que gera a mensagem, seja no que
                        recebe.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="Type" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        Identifica o tipo de mensagem: a. Business
                        Message: Mensagem “real”, sobre um evento
                        ocorrido (quando for de saída) ou de atualização
                        do produto (quando entrada). Pode ser de dois
                        subtipos (ver atributos da tag BusinessMessage):
                        i. Transaction: Mensagem utilizada para fins de
                        replicação de dados que contém um evento
                        ocorrido no sistema (upsert ou delete). Se
                        recebido, resulta na execução da operação sobre
                        na base de dados. Se Enviado, significa que o
                        sistema de origem está notificando esta
                        operação. Transactions refletem a atividade de
                        uma aplicação (CrUD) tendem a ser utilizadas de
                        forma assíncrona. ii. Request: Mensagem
                        utilizada para solicitar a execução de um
                        procedimento. Este procedimento pode ser uma
                        consulta (getOrders, countCustomers), cálculo
                        (calculateTaxes) ou atualização do banco de
                        dados (updateAverageCost). Requests promovem o
                        compartilhamento de serviços e tendem a ser
                        utilizados de forma síncrona. b. Receipt: Quando
                        a mensagem for recebida de forma assíncrona, o
                        produto devolve um recibo com status de
                        recebimento e com o UUID de rastreabilidade da
                        mensagem dentro do produto que recebeu c.
                        Response: Mensagem retornada pelo processamento
                        da Business Message. Pode trazer apenas o status
                        (OK ou não), a lista de erros (se houver) ou
                        informações relevantes (como número de pedido
                        gerado, por exemplo). Pode ser devolvida na
                        chamada de uma business message (quando
                        síncrono) ou enviada de forma assíncrona.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="BusinessMessage"></xs:enumeration>
                        <xs:enumeration value="Response"></xs:enumeration>
                        <xs:enumeration value="Receipt"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Transaction" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        Identifica o nome da transação que esta mensagem
                        contém. Exemplo: Branch.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:whiteSpace value="collapse"></xs:whiteSpace>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="ContextName" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        Campo opcional que identifica o(s) contexto(s) associado(s)
                        a transação. O contexto pode ser o módulo que gerou a 
                        mensagem, pode identificar a integração entre aplicativos,
                        enfim, pode ser qualquer informação que permita delimitar
                        a mensagem, de modo a orientar o roteamento da mensagem
                        ou o recebimento.
                        Exemplos: Financeiro, Datasul CRM, Manufatura, APS-Logix, etc.                        
                    </xs:documentation>
                </xs:annotation>                
            </xs:element>
            <xs:element name="StandardVersion" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="\d+.\d+"></xs:pattern>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="SourceApplication" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        Identifica, dentre os aplicativos integrados,
                        qual instância gerou a mensagem.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:whiteSpace value="collapse"></xs:whiteSpace>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="CompanyId" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Representa o id da empresa do usuário que enviou a mensagem.</xs:documentation>
                </xs:annotation></xs:element>
            <xs:element name="BranchId" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Representa o id do estabelecimento do usuário que enviou a mensagem.</xs:documentation>
                </xs:annotation></xs:element>
            <xs:element name="UserId" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Representa o id do usuário que enviou a mensagem. </xs:documentation>
                </xs:annotation></xs:element>
                <xs:element name="Enterprise" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Representa, para o Protheus, o valor da empresa no sistema </xs:documentation>
                </xs:annotation></xs:element>
                <xs:element name="BusinessUnit" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Representa, para o Protheus, o valor da unidade de negócios </xs:documentation>
                </xs:annotation></xs:element>
            <xs:element name="CompanySharingMode"  minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Indica o modo de compartilhamento no nível da Empresa. C para Compartilhada e E para Exclusiva.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="C"></xs:enumeration>
                        <xs:enumeration value="E"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="BusinessUnitySharingMode"  minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Indica o modo de compartilhamento no nível da Unidade de Negócio. C para Compartilhada e E para Exclusiva.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="C"></xs:enumeration>
                        <xs:enumeration value="E"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="BranchSharingMode"  minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Indica o modo de compartilhamento no nível da Filial. C para Compartilhada e E para Exclusiva.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="C"></xs:enumeration>
                        <xs:enumeration value="E"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Product" maxOccurs="1" minOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        Define qual o produto que originou esta
                        mensagem. Não confundir o produto com a
                        instância (atributo de TOTVSMessage).
                    </xs:documentation>
                </xs:annotation>

                <xs:complexType>
                    <xs:attribute name="name" type="xs:string" use="required">
                        <xs:annotation>
                            <xs:documentation>
                                Nome do Produto.
                            </xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="version" type="xs:string" use="optional">
                        <xs:annotation>
                            <xs:documentation>
                                Versão do Produto
                            </xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                </xs:complexType>
            </xs:element>



            <xs:element name="GeneratedOn" type="xs:dateTime" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        Registra a data e hora em que a mensagem foi
                        gerada. Observe que este campo é do tipo
                        datetime e que é sugerido que se acrescente a
                        identificação do fuso horário. Caso a informação
                        de fuso não esteja presente, os sistemas
                        entenderão o horário como GMT-0.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element name="DeliveryType" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Forma de entrega da mensagem que foi gerada. Será definida por quem entrega a mensagem.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Sync"></xs:enumeration>
                        <xs:enumeration value="Async"></xs:enumeration>
                        <xs:enumeration value="sync"></xs:enumeration>
                        <xs:enumeration value="async"></xs:enumeration>                        
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>


        </xs:sequence>
        <xs:attribute name="version" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern value="\d+.\d+.\d+"></xs:pattern>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        
    </xs:complexType>

Proposta de alteração para o Identificador Global de Recursos

Iremos adotar o padrão de compatibilidade total com as mensagens atualmente em uso, sendo assim, mesmo que uma mensagem não utilize a estrutura proposta, o EAI irá entender que esta mensagem será processada através de De-Para na entidade "InternalId"

XML/SOAP

Cabeçalho

Iremos incluir um atributo "GlobalIdType" no elemento "MessageInformation"

Bloco de código
languagexml
<xs:attribute name="GlobalIdType" use="optional">
    <xs:simpleType>
Bloco de código
languagexml
    <xs:complexType name="MessageInformationType">
        <xs:annotation>
            <xs:documentation>
                Bloco com informações sobre a origem da mensagem.
            </xs:documentation>
        </xs:annotation>

        <xs:sequence>
            <xs:element name="UUID" type="UUIDType" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
        <xs:restriction base="xs:string">
               Define um identificador universal para esta<xs:enumeration value="UUID"></xs:enumeration>
            <xs:enumeration value="INTERNALID"></xs:enumeration>
           mensagem. Duas mensagens não podem ter o mesmo
                   <xs:enumeration value="internalid"></xs:enumeration>
     UUID e este valor permanece sempre o mesmo, seja<xs:enumeration value="uuid"></xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
</xs:attribute>

Especificação do elemento MessageInformation

Bloco de código
languagexml
<xs:element name="MessageInformation" type="MessageInformationType" />
Bloco de código
languagexml
    <xs:complexType name="MessageInformationType">
    no aplicativo que gera a mensagem, seja no que
 <xs:annotation>
            <xs:documentation>
               recebe.
 Bloco com informações sobre a origem da mensagem.
            </xs:documentation>
                </xs:annotation>

            </xs:element><xs:sequence>
            <xs:element name="Type"UUID" type="UUIDType" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>
                        IdentificaDefine oum tipoidentificador deuniversal mensagem: a. Businesspara esta
                        Message: Mensagem “real”, sobre um evento
                        ocorrido (quando for de saída) ou de atualização
                        do produto (quando entrada). Pode ser de dois
mensagem. Duas mensagens não podem ter o mesmo
                        UUID e este valor permanece sempre o mesmo, seja
 subtipos (ver atributos da tag BusinessMessage):
                  no aplicativo que gera a mensagem, i.seja Transaction:no Mensagemque
 utilizada para fins de
                    recebe.
    replicação de dados que contém um evento
          </xs:documentation>
              ocorrido no sistema (upsert ou delete). Se
 </xs:annotation>
            </xs:element>
            <xs:element name="Type" minOccurs="1"  recebido, resulta na execução da operação sobre
maxOccurs="1">
                <xs:annotation>
               na base de dados. Se Enviado, significa que o
 <xs:documentation>
                        Identifica o  sistematipo de origemmensagem: está notificando estaa. Business
                        operação.Message: TransactionsMensagem refletem“real”, asobre atividadeum deevento
                        uma aplicaçãoocorrido (CrUD)quando tendemfor ade sersaída) utilizadasou de atualização
                        do produto forma(quando assíncronaentrada). Pode ii.ser Request:de Mensagemdois
                        utilizadasubtipos para(ver solicitaratributos ada execução de umtag BusinessMessage):
                        procedimentoi. Transaction: EsteMensagem procedimentoutilizada podepara serfins umade
                        replicação de dados consultaque (getOrders, countCustomers), cálculo
contém um evento
                        ocorrido no sistema (calculateTaxes)upsert ou atualização do banco de
delete). Se
                        recebido, resulta dados (updateAverageCost). Requests promovem o
na execução da operação sobre
                        na compartilhamentobase de serviços e tendem a serdados. Se Enviado, significa que o
                        utilizadossistema de formaorigem síncrona.está b. Receipt: Quandonotificando esta
                        aoperação. mensagemTransactions forrefletem recebida de forma assíncrona, o
a atividade de
                        uma produtoaplicação devolve(CrUD) umtendem reciboa comser statusutilizadas de
                        recebimentoforma eassíncrona. comii. o UUID de rastreabilidade daRequest: Mensagem
                        mensagemutilizada dentropara dosolicitar produtoa queexecução recebeude c.um
                        procedimento. Response:Este Mensagemprocedimento retornadapode peloser processamentouma
                        daconsulta Business Message. Pode trazer apenas o status(getOrders, countCustomers), cálculo
                        (OKcalculateTaxes) ou não),atualização ado listabanco de erros (se houver) ou
                        informações relevantesdados (comoupdateAverageCost). númeroRequests depromovem pedidoo
                        gerado,compartilhamento porde exemplo).serviços Podee sertendem devolvidaa naser
                        chamadautilizados de forma umasíncrona. businessb. messageReceipt: (quandoQuando
                        a síncrono)mensagem oufor enviadarecebida de forma assíncrona., o
                    </xs:documentation>
    produto devolve um recibo com        </xs:annotation>status de
                <xs:simpleType>
        recebimento e com o UUID de rastreabilidade da
     <xs:restriction base="xs:string">
                  mensagem dentro do    <xs:enumeration value="BusinessMessage"></xs:enumeration>produto que recebeu c.
                        <xs:enumeration value="Response"></xs:enumeration>Response: Mensagem retornada pelo processamento
                        <xs:enumeration value="Receipt"></xs:enumeration>
      da Business Message. Pode trazer apenas o status
              </xs:restriction>
          (OK ou não), a lista  </xs:simpleType>
    de erros (se houver) ou
        </xs:element>
            <xs:element name="Transaction" minOccurs="1" maxOccurs="1">
 informações relevantes (como número de pedido
          <xs:annotation>
              gerado, por exemplo). Pode ser devolvida <xs:documentation>na
                        chamada Identificade ouma nomebusiness damessage transação(quando
 que esta mensagem
                     síncrono) ou enviada contém.de Exemplo:forma Branchassíncrona.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:whiteSpaceenumeration value="collapseBusinessMessage"></xs:whiteSpace>enumeration>
                    </xs:restriction>
                <<xs:enumeration value="Response"></xs:simpleType>enumeration>
            </xs:element>
            <xs:elementenumeration namevalue="ContextName" type="xs:string" minOccurs="0" maxOccurs="1">
Receipt"></xs:enumeration>
                    <xs</xs:annotation>restriction>
                </xs:simpleType>
    <xs:documentation>
        </xs:element>
            <xs:element name="Transaction" minOccurs="1"  Campo opcional que identifica o(s) contexto(s) associado(s)
maxOccurs="1">
                <xs:annotation>
                a transação. O contexto pode<xs:documentation>
 ser o módulo que gerou a 
                 Identifica o nome da transação que esta mensagem,
 pode identificar a integração entre aplicativos,
                  contém. Exemplo: Branch.
    enfim,    pode ser qualquer informação que permita delimitar
      </xs:documentation>
                </xs:annotation>
  a mensagem, de modo a orientar o roteamento da mensagem
     <xs:simpleType>
                   ou o recebimento.<xs:restriction base="xs:string">
                        Exemplos<xs: Financeiro, Datasul CRM, Manufatura, APS-Logix, etc.whiteSpace value="collapse"></xs:whiteSpace>
                    </xs:restriction>
         
       </xs:simpleType>
             </xs:documentation>element>
            <xs:element name="ContextName" type="xs:string"  </xs:annotation>minOccurs="0" maxOccurs="1">
                <xs:annotation>
            </xs:element>
        <xs:documentation>
    <xs:element name="StandardVersion" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
 Campo opcional que identifica o(s) contexto(s) associado(s)
             <xs:restriction base="xs:string">
          a transação. O contexto pode ser o módulo que gerou a 
   <xs:pattern value="\d+.\d+"></xs:pattern>
                    </xs:restriction>
      mensagem, pode identificar a integração entre aplicativos,
          </xs:simpleType>
            </xs:element>
  enfim, pode ser qualquer informação que permita delimitar
   <xs:element name="SourceApplication" minOccurs="1" maxOccurs="1">
                <xs:annotation>
  a mensagem, de modo a orientar o roteamento da mensagem
         <xs:documentation>
               ou o recebimento.
       Identifica, dentre os aplicativos integrados,
             Exemplos: Financeiro, Datasul CRM, Manufatura, APS-Logix, etc.     qual instância gerou a mensagem.
               
     </xs:documentation>
                </xs:annotation>documentation>
                <xs:simpleType>
     </xs:annotation>               <xs:restriction base="xs:string">
            </xs:element>
            <xs:whiteSpace value="collapse"></xs:whiteSpace>element name="StandardVersion" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
    </xs:restriction>
                </<xs:restriction base="xs:simpleType>string">
            </xs:element>
            <xs:elementpattern namevalue="CompanyId" type="xs:string" minOccurs="0">\d+.\d+"></xs:pattern>
                <xs:annotation>
              </xs:restriction>
      <xs:documentation>Representa o id da empresa do usuário que enviou a mensagem.</xs:documentation>simpleType>
                </xs:annotation></xs:element>
            <xs:element name="BranchIdSourceApplication" type="xs:string" minOccurs="01" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Representadocumentation>
   o id do estabelecimento do usuário que enviou a mensagem.</xs:documentation>
            Identifica, dentre os  </xs:annotation></xs:element>
aplicativos integrados,
                <xs:element name="UserId" type="xs:string" minOccurs="0" maxOccurs="1">
    qual instância gerou a mensagem.
        <xs:annotation>
            </xs:documentation>
        <xs:documentation>Representa o id do usuário que enviou a mensagem. </xs:documentation>annotation>
                </xs:annotation></xs:element>
<xs:simpleType>
                    <xs:elementrestriction namebase="Enterprise" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
          <xs:whiteSpace value="collapse"></xs:whiteSpace>
          <xs:documentation>Representa, para o Protheus, o valor da empresa no sistema </xs:documentation>restriction>
                </xs:annotation><simpleType>
            </xs:element>
    
            <xs:element name="BusinessUnitCompanyId" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Representa, parao oid Protheus,da oempresa valordo dausuário unidadeque deenviou negóciosa mensagem.</xs:documentation>
                </xs:annotation></xs:element>
            <xs:element name="CompanySharingModeBranchId" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Indicadocumentation>Representa o modoid dedo compartilhamentoestabelecimento nodo nívelusuário daque Empresa.enviou C para Compartilhada e E para Exclusivaa mensagem.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
  
                  <xs:restriction base="xs:string">
    </xs:annotation></xs:element>
                    <xs:enumerationelement valuename="UserId"C type="></xs:enumeration>string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
        <xs:enumeration value="E"></xs:enumeration>
           <xs:documentation>Representa o id do usuário que enviou a mensagem. </xs:restriction>documentation>
                </xs:annotation></xs:simpleType>element>
            </xs:element>
            <xs:element name="BusinessUnitySharingMode"  element name="Enterprise" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Indicadocumentation>Representa, para o Protheus, o modovalor deda compartilhamentoempresa no nível da Unidade de Negócio. C para Compartilhada e E para Exclusiva.</xs:documentation> sistema </xs:documentation>
                </xs:annotation></xs:element>
                </xs:annotation><xs:element name="BusinessUnit" type="xs:string" minOccurs="0" maxOccurs="1">
                <xs:simpleType>annotation>
                    <xs:restriction base="xs:string">
documentation>Representa, para o Protheus, o valor da unidade de negócios </xs:documentation>
                </xs:annotation></xs:element>
            <xs:enumerationelement valuename="C"></xs:enumeration>
CompanySharingMode"  minOccurs="0" maxOccurs="1">
                     <xs:enumeration value="E"></xs:enumeration>annotation>
                    </xs:restriction>
                <xs:documentation>Indica o modo de compartilhamento no nível da Empresa. C para Compartilhada e E para Exclusiva.</xs:simpleType>documentation>
                </xs:element>annotation>
                <xs:element name="BranchSharingMode"  minOccurs="0" maxOccurs="1">
simpleType>
                    <xs:annotation>restriction base="xs:string">
                    <xs:documentation>Indica o modo de compartilhamento no nível da Filial. C para Compartilhada e E para Exclusiva.</xs:documentation>
<xs:enumeration value="C"></xs:enumeration>
                          <<xs:enumeration value="E"></xs:annotation>enumeration>
                <xs:simpleType>
    </xs:restriction>
                <xs:restriction base="</xs:string">simpleType>
            </xs:element>
            <xs:enumerationelement valuename="C"></xs:enumeration>
        BusinessUnitySharingMode"  minOccurs="0" maxOccurs="1">
                <xs:enumeration value="E"></xs:enumeration>annotation>
                    </xs:restriction>
                <xs:documentation>Indica o modo de compartilhamento no nível da Unidade de Negócio. C para Compartilhada e E para Exclusiva.</xs:simpleType>documentation>
            </xs:element>
            <xs:element name="Product" maxOccurs="1" minOccurs="1"></xs:annotation>
                <xs:annotation>simpleType>
                    <xs:documentation>restriction base="xs:string">
                        Define qual o produto que originou esta
    <xs:enumeration value="C"></xs:enumeration>
                   mensagem. Não confundir o produto com a<xs:enumeration value="E"></xs:enumeration>
                    </xs:restriction>
    instância  (atributo de TOTVSMessage).
        </xs:simpleType>
            </xs:documentation>element>
            <xs:element name="BranchSharingMode"   </xs:annotation>

minOccurs="0" maxOccurs="1">
                <xs:complexType>annotation>
                    <xs:attribute name="name" type="xs:string" use="required">
        documentation>Indica o modo de compartilhamento no nível da Filial. C para Compartilhada e E para Exclusiva.</xs:documentation>
                <xs</xs:annotation>
                <xs:simpleType>
            <xs:documentation>
        <xs:restriction base="xs:string">
                       Nome do Produto.<xs:enumeration value="C"></xs:enumeration>
                            <<xs:enumeration value="E"></xs:documentation>enumeration>
                        </xs:annotation>restriction>
                    </xs:attribute>simpleType>
            </xs:element>
            <xs:attributeelement name="versionProduct" typemaxOccurs="xs:string1" useminOccurs="optional1">
                        <xs:annotation>
                            <xs:documentation>
                        Define qual o produto que originou esta
  Versão do Produto
                    mensagem. Não confundir o produto com a
  </xs:documentation>
                      instância  </xs:annotation>(atributo de TOTVSMessage).
                    </xs:attribute>documentation>
                </xs:complexType>annotation>

             </xs:element>



   <xs:complexType>
                    <xs:elementattribute name="GeneratedOnname" type="xs:dateTimestring" minOccursuse="1" maxOccurs="1required">
                <xs:annotation>
                    <xs:documentation>annotation>
                        Registra a data e hora em que a mensagem foi
 <xs:documentation>
                           gerada. Observe que este campo éNome do tipoProduto.
                        datetime e que é sugerido que se acrescente a
 </xs:documentation>
                        </xs:annotation>
    identificação do fuso horário. Caso a informação
          </xs:attribute>
              de fuso não esteja presente, os sistemas
   <xs:attribute name="version" type="xs:string" use="optional">
                     entenderão o horário como GMT-0. <xs:annotation>
                    </xs:documentation>
          <xs:documentation>
      </xs:annotation>
             </xs:element>

            <xs:element name="DeliveryType" minOccurs="0" maxOccurs="1"> Versão do Produto
                <xs:annotation>
            </xs:documentation>
        <xs:documentation>Forma   de entrega da mensagem que foi gerada. Será definida por quem entrega a mensagem.</xs:documentation>annotation>
                    </xs:annotation>attribute>
                <xs</xs:simpleType>complexType>
            </xs:element>



            <xs:restriction baseelement name="GeneratedOn" type="xs:stringdateTime">
        minOccurs="1" maxOccurs="1">
                <xs:enumeration value="Sync"></xs:enumeration>
    annotation>
                    <xs:enumeration value="Async"></xs:enumeration>documentation>
                        <xs:enumeration value="sync"></xs:enumeration>
        Registra a data e hora em que a mensagem foi
                <xs:enumeration value="async"></xs:enumeration>       gerada. Observe que este campo é do tipo
          
              datetime e que é sugerido  </xs:restriction>
  que se acrescente a
              </xs:simpleType>
            </xs:element>


        </xs:sequence>
identificação do fuso horário. Caso a informação
          <xs:attribute name="version" use="required">
            <xs:simpleType>
de fuso não esteja presente, os sistemas
          <xs:restriction base="xs:string">
             entenderão o horário como GMT-0.
   <xs:pattern value="\d+.\d+.\d+"></xs:pattern>
                </xs:restriction>documentation>
            </xs:simpleType>
        </xs:attribute>annotation>
            </xs:element>

    
        <xs:attribute nameelement name="DeliveryType" minOccurs="GlobalIdType0" usemaxOccurs="optional1">
            <xs:simpleType>
    <xs:annotation>
            <xs:restriction base="xs:string">
       <xs:documentation>Forma de entrega da mensagem que foi gerada. Será definida por quem entrega <xs:enumeration value="UUID"><a mensagem.</xs:enumeration>documentation>
                    <xs:enumeration value="INTERNALID"><</xs:enumeration>annotation>
                    <xs:enumeration value="internalid"></xs:enumeration>simpleType>
                    <xs:enumerationrestriction valuebase="uuid"></xs:enumeration>string">
                </xs:restriction>
            <<xs:enumeration value="Sync"></xs:simpleType>enumeration>
        </xs:attribute>
          
    </xs:complexType>

Cabeçalho JSON/REST

Iremos incluir um atributo "GlobalIdType" no 'Header' da mensagem

Bloco de código
languagejs
{ "GlobalIdType" <xs:enumeration value="string" }

Especificação do 'Header'

Bloco de código
languagejs
{Async"></xs:enumeration>
    "Header" : {
        "UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
        "Type" <xs:enumeration value="BusinessMessage",sync"></xs:enumeration>
        "SubType" : "event",
        "Transaction" : "CostCenter",
       <xs:enumeration value="Versionasync" ></xs:enumeration> "2.000",
        "SourceApplication": "P1299",
        "ProductName" : "PROTHEUS",
    
    "ProductVersion" : "12.1.17",
        "CompanyId" : "99",
    </xs:restriction>
    "BranchId" : "01",
        "GeneratedOn" : "2017-11-14T11:47:00-03:00",
 </xs:simpleType>
           "DeliveryType" : "async"</xs:element>


    }
}

Proposta de alteração para o Identificador Global de Recursos

Bloco de código
languagejs
{
    "Header" : {
</xs:sequence>
        <xs:attribute name="UUIDversion" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
use="required">
          "Type"  <xs: "BusinessMessage",
simpleType>
               "SubType" <xs:restriction base="eventxs:string",>
        "Transaction"  : "CostCenter",
        "Version" <xs:pattern "2.000",value="\d+.\d+.\d+"></xs:pattern>
        "SourceApplication": "P1299",
        "ProductName" : "PROTHEUS",
</xs:restriction>
           "ProductVersion" </xs: "12.1.17",
simpleType>
        </xs:attribute>
  "CompanyId"   : "99",
        "BranchId" : "01",
        "GeneratedOn<xs:attribute name="GlobalIdType" : "2017-11-14T11:47:00-03:00",
use="optional">
           "DeliveryType" <xs: "async",simpleType>
        "GlobalIdType" : "uuid"
    }
}

Compatibilização com versões legadas

Bloco de código
languagejs
{
  <xs:restriction  "Header" : {
base="xs:string">
          "UUID" : "d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
        "Type" <xs:enumeration value="BusinessMessage",
UUID"></xs:enumeration>
         "SubType" : "event",
        "Transaction" <xs:enumeration value="CostCenter",
INTERNALID"></xs:enumeration>
          "Version" : "2.000",
        "SourceApplication"<xs:enumeration value="P1299",internalid"></xs:enumeration>
        "ProductName"  : "PROTHEUS",
        "ProductVersion" <xs:enumeration "12.1.17",value="uuid"></xs:enumeration>
        "CompanyId" : "99",
      </xs:restriction>
  "BranchId" : "01",
        "GeneratedOn" : "2017-11-14T11:47:00-03:00",
  </xs:simpleType>
      "DeliveryType" : "async",
  </xs:attribute>
      "GlobalIdType" : "internalid"
    }
}

Proposta 1

Todas as linhas irão adequar seus adapters para enviar o identificador global de recurso através da entidade "InternalId".

Conteúdo XML/SOAP

Especificação da entidade "InternalId"
</xs:complexType>

Conteúdo

Especificação do tipo 'UUIDType'

Bloco de código
languagexml
<xs:elementsimpleType name="InternalIdUUIDType" type>
    <xs:restriction base="xs:string" maxOccurs="1" minOccurs="0">
>
        <xs:annotation>
        <xs:documentation>InternalId da entidade</xs:documentation>pattern value="\w{8}-\w{4}-\w{4}-\w{4}-\w{12}"></xs:pattern>
    </xs:annotation>restriction>
</xs:element>
Proposta de alteração para o Identificador Global de Recursos
simpleType>
Proposta 1

Especificação da entidade "InternalId"

Bloco de código
languagexml
<xs:element name="InternalId" type="UUIDType" minOccurs="1" maxOccurs="1">
    <xs:annotation>
        <xs:documentation>
            Define um identificador universal para este
            recurso. Todas as mensagens que enviem um mesmo
            recurso terão o mesmo UUID e este valor permanece
            sempre o mesmo, seja no aplicativo que gera a 
            mensagem, seja no que recebe.
        </xs:documentation>
    </xs:annotation>
</xs:element>

Especificação do tipo 'UUIDType'

Bloco de código
languagexml
<xs:simpleType name="UUIDType">
    <xs:restriction base="xs:string">
        <xs:pattern value="\w{8}-\w{4}-\w{4}-\w{4}-\w{12}"><</xs:pattern>documentation>
    </xs:restriction>annotation>
</xs:simpleType>
Conteúdo JSON/REST
element>
Proposta 2

Especificação da entidade "

InternalId

GlobalId"

Bloco de código
languagejsxml
{<xs:element name="InternalIdGlobalId" : "string" }

Utilização da entidade "InternalId" em mensagens

Bloco de código
languagejs
{type="UUIDType" minOccurs="1" maxOccurs="1">
    "Content" : {
<xs:annotation>
        <xs:documentation>
    "CompanyId" : "99",
      Define um identificador "BranchId"universal : "01",para este
        "CompanyInternalId" : "99",
  recurso. Todas as mensagens que enviem "Code" : "ABC001",um mesmo
        "InternalId" : "99|ABC001",
  recurso terão o mesmo UUID e "RegisterSituation"este : "Active",valor permanece
        "Name"  : "Centro desempre Custoo ABC001",
    mesmo, seja no aplicativo que gera a 
    "ShortCode"   : "ABC001",
    mensagem, seja no  "SPED" : true,
que recebe.
        </xs:documentation>
  "Class" : 2
    }
}
Proposta de alteração para o Identificador Global de Recursos
  </xs:annotation>
</xs:element>

JSON/REST

Cabeçalho

Iremos incluir um atributo "GlobalIdType" no 'Header' da mensagem

Bloco de código
languagejs
{ "GlobalIdType" : "string" }

Especificação do 'Header'

Bloco de código
languagejs
{
    "ContentHeader" : {
        "CompanyIdUUID" : "99d6bbfa63-ca27-e2ac-0b14-101970f59a5b",
        "BranchIdType" : "01BusinessMessage",
        "CompanyInternalIdSubType" : "99event",
        "CodeTransaction" : "ABC001CostCenter",
        "InternalIdVersion" : "f81d4fae-7dec-11d0-a765-00a0c91e6bf62.000",
        "RegisterSituationSourceApplication" : "ActiveP1299",
        "NameProductName" : "Centro de Custo ABC001PROTHEUS",
        "ShortCodeProductVersion" : "ABC00112.1.17",
        "SPEDCompanyId" : true"99",
        "ClassBranchId" : 2"01",
     }
}

Proposta 2

Todas as linhas irão adequar seus adapters para enviar o identificador global de recurso através da entidade "UUID".

Conteúdo XML/SOAP

Especificação da entidade "UUID"

Bloco de código
languagexml
<xs:element name="GlobalId" type="UUIDType" minOccurs="1" maxOccurs="1">   "GeneratedOn" : "2017-11-14T11:47:00-03:00",
    <xs:annotation>
    "DeliveryType" : "async",
  <xs:documentation>
      "GlobalIdType" : "uuid"
    }
}

Conteúdo

Proposta 1

Especificação da entidade "InternalId"

Bloco de código
languagejs
{ "InternalId" : "string" }

Utilização da entidade "InternalId" em mensagens padronizadas

Bloco de código
languagejs
{Define um identificador universal para este
    "Content" : {
      recurso. Todas as"CompanyId" mensagens que enviem um mesmo
: "99",
         "BranchId" : "01",
   recurso terão o mesmo UUID e"CompanyInternalId" este valor permanece: "99",
        "Code" : "ABC001",
  sempre o mesmo, seja no aplicativo que"InternalId" gera a : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6",
        "RegisterSituation" : "Active",
  mensagem, seja no que recebe.
  "Name" : "Centro de Custo  </xs:documentation>
ABC001",
     </xs:annotation>
</xs:element>

Especificação do tipo 'UUIDType'

Bloco de código
languagexml
<xs:simpleType name="UUIDType">
   "ShortCode" : "ABC001",
       <xs:restriction base="xs:string"> "SPED" : true,
        <xs:pattern value="\w{8}-\w{4}-\w{4}-\w{4}-\w{12}"></xs:pattern>"Class" : 2
    </xs:restriction>
</xs:simpleType>
Conteúdo JSON/REST
}
}
Proposta 2

Especificação da entidade "

UUID

GlobalId"

Bloco de código
languagejs
{ "GlobalId" : "string" }
Proposta de alteração para o Identificador Global de Recursos

Utilização da entidade "GlobalId" em mensagens padronizadas

Bloco de código
languagejs
{
    "Content" : {
        "GlobalId" : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
        "CompanyId" : "99",
        "BranchId" : "01",
        "CompanyInternalId" : "99",
        "Code" : "ABC001",
        "InternalId" : "99|ABC001",
        "RegisterSituation" : "Active",
        "Name" : "Centro de Custo ABC001",
        "ShortCode" : "ABC001",
        "SPED" : true,
        "Class" : 2
    }
}











 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.