============================================================
 DIAMANTE - BUSCADOR XML (SEFAZ)  |  INSTALACAO NO CLIENTE
============================================================

Esse servico so faz UMA coisa: busca periodicamente na SEFAZ (DistribuicaoDFe,
via ACBrLib) as notas fiscais de terceiros destinadas ao CNPJ do cliente,
envia a Ciencia da Operacao (210210) e baixa o XML completo, gravando tudo em
manifestacao_nota. Nao tem IA nenhuma aqui (a associacao de produto por IA e
outra coisa, roda manualmente pela tela do Retaguarda, nao por este servico).

------------------------------------------------------------
 ATENCAO AO COPIAR O INSTALAR-SERVICO.bat PRO CLIENTE
------------------------------------------------------------
Copie o arquivo .bat DIRETO (pendrive, rede, RDP) -- NUNCA cole o conteudo
via WhatsApp/e-mail/chat e salve como .bat por la. Esses apps costumam trocar
a codificacao/quebra de linha do arquivo, e o Windows passa a nao reconhecer
comandos do .bat (ex.: reporta "arquivo nao encontrado" mesmo com o .exe
presente na pasta). Se isso acontecer: teste "cmd /c if exist NOME.exe (echo
SIM) else (echo NAO)" pra confirmar que o arquivo existe de verdade, e recrie
o .bat direto no cliente (Bloco de Notas, salvar como ANSI, nao UTF-8).

------------------------------------------------------------
 ANTES DE COMECAR - tenha em maos
------------------------------------------------------------
 [ ] .NET Framework 4.8 instalado no servidor do cliente -- o BuscadorXML.Service.exe
     e o instalador do proprio .bat (sc create) DEPENDEM disso; sem o runtime o
     executavel simplesmente nao roda (e pode dar erro confuso, tipo o .bat parecer
     nao achar o .exe). Verifique em: Painel de Controle > Programas > Ativar ou
     desativar recursos do Windows > ".NET Framework 4.8 Advanced Services", ou
     baixe o instalador em https://dotnet.microsoft.com/download/dotnet-framework/net48
     antes de tentar instalar o servico.
 [ ] Connection string do banco do cliente (SQL Server)
 [ ] empresa_id (ou lista de empresas, se o servidor atender mais de uma)
 [ ] Certificado digital A1/A3 e configuracao do ACBr ja feitos no ERP
     (o servico reaproveita a MESMA config do ACBr usada pelo Retaguarda)
 [ ] As DLLs nativas do ACBr (ACBrNFe32.dll e as que ele carrega) precisam
     estar NESTA MESMA PASTA do BuscadorXML.Service.exe -- o servico e x86
     obrigatoriamente por causa dessas DLLs.

============================================================
 CERTIFICADO: 2 modos -- REPOSITORIO (padrao) ou ARQUIVO (.pfx)
============================================================
O parametro <certificado_modo> escolhe como o servico usa o certificado:

  repositorio  (PADRAO) = comportamento ANTIGO. Usa o certificado configurado no
                ERP (repositorio do Windows, pela serie). Quem ja roda assim NAO
                muda nada -- pode nem mexer no config. Os campos cert_* sao ignorados.

  arquivo      = usa o .pfx em ARQUIVO (campos cert_* abaixo). Independe de conta e
                de repositorio do Windows. Bom quando o servico roda como LocalSystem
                ou uma conta que nao enxerga o certificado do usuario (erro
                "Certificado Serie X nao encontrado").

Pode ser GLOBAL (Config/certificado_modo) e/ou por EMPRESA (o da empresa vence).

QUANDO USAR ARQUIVO:
 1) Exporte o A1 para .pfx COM a chave privada + senha (certmgr.msc -> Pessoal ->
    o certificado -> Exportar -> "Sim, exportar a chave privada" -> .PFX -> senha).
    Salve na pasta do servico, ex.: empresa.pfx. De LEITURA no .pfx a conta do servico.
 2) No config.xml, marque o modo e preencha os campos:

    <certificado_modo>repositorio</certificado_modo>   <!-- padrao global -->
    ...
    <Empresa>
      <empresa_id>2</empresa_id>
      <connection_string></connection_string>
      <certificado_modo>arquivo</certificado_modo>       <!-- so esta empresa por arquivo -->
      <cert_arquivo_pfx>C:\Diamante\Retaguarda\diamante_svc_buscador\empresa.pfx</cert_arquivo_pfx>
      <cert_senha>SENHA_DO_PFX</cert_senha>
      <cert_cript>cryOpenSSL</cert_cript>      <!-- le o .pfx direto, sem repositorio -->
      <cert_httplib>httpOpenSSL</cert_httplib>  <!-- opcional; se der erro de SSL -->
    </Empresa>

 - Da pra MISTURAR: umas empresas por repositorio, outras por arquivo.
 - O modo arquivo vale SO no servico; a configuracao_sistema no banco NAO muda,
   entao o certificado/CryptLib do PDV/NFCE/Retaguarda continua exatamente igual.
 - O modo arquivo com cryOpenSSL/httpOpenSSL precisa das DLLs OpenSSL na pasta
   (libcrypto-1_1.dll / libssl-1_1.dll), junto com as demais dependencias do ACBr.

============================================================
 INSTALACAO NO SERVIDOR DO CLIENTE
============================================================

1) Copie a pasta do servico (bin\Release, ou bin\Debug em teste) para o
   servidor, por exemplo:
     C:\DiamanteBuscadorXML\
   Coloque o INSTALAR-SERVICO.bat e este LEIAME na MESMA pasta do
   BuscadorXML.Service.exe -- e confirme que as DLLs nativas do ACBr
   tambem estao la (copie da pasta do Retaguarda se precisar).

2) Aponte o banco: edite BuscadorXML.Service.exe.config
   -> connection string chave "a" = banco do cliente.

3) Gere o config: rode o INSTALAR-SERVICO.bat, opcao [1] (roda em console).
   Na 1a vez ele cria o config.xml nesta pasta com um exemplo de 1 empresa.
   Feche com CTRL+C.

4) Edite o config: opcao [2] do bat (abre o config.xml no Bloco de Notas).

   CASO A -- varias empresas em bancos DIFERENTES (cada uma com sua propria
   connection_string, banco separado por loja/cliente):

     <Config>
       <tipo_conexao>1</tipo_conexao>
       <intervalo_minutos>5</intervalo_minutos>
       <Empresas>
         <Empresa>
           <empresa_id>1</empresa_id>
           <connection_string></connection_string>
         </Empresa>
         <Empresa>
           <empresa_id>1</empresa_id>
           <connection_string>Data Source=SERVIDOR2;Initial Catalog=DIAMANTE2;...</connection_string>
         </Empresa>
       </Empresas>
     </Config>

   (empresa_id pode repetir entre bancos diferentes -- cada connection_string
   aponta pra um banco com sua propria tabela empresa.)

   CASO B -- varias empresas no MESMO banco (multi-loja/matriz-filial no
   mesmo SQL Server): NAO precisa listar cada empresa_id na mao. Use
   TodasDoBancoPadrao=true e o servico busca sozinho, a cada ciclo, todas as
   empresas ATIVAS da tabela empresa (ISNULL(inativa,'N')<>'S') no banco
   padrao do BuscadorXML.Service.exe.config:

     <Config>
       <tipo_conexao>1</tipo_conexao>
       <intervalo_minutos>5</intervalo_minutos>
       <Empresas>
         <TodasDoBancoPadrao>true</TodasDoBancoPadrao>
       </Empresas>
     </Config>

   Cadastrou uma loja nova no ERP? O servico ja pega ela sozinho no proximo
   ciclo, sem precisar editar o config.xml. Da pra misturar com o CASO A:
   deixe TodasDoBancoPadrao=true E ainda liste <Empresa> extras de OUTROS
   bancos junto (nao ha duplicidade -- as do banco padrao ja listadas
   explicitamente com connection_string vazia nao sao repetidas).

   IMPORTANTE:
   - intervalo_minutos = intervalo entre CICLOS do servico (ele so consulta
     a SEFAZ de fato a cada ConfiguracaoSistema.tempo_buscaxml minutos,
     minimo 60 -- os ciclos mais curtos so processam retentativas/o
     TodasDoBancoPadrao).
   - TodasDoBancoPadrao SO enxerga empresas do banco padrao (chave "a" do
     .config) -- empresas em OUTROS bancos continuam precisando de <Empresa>
     explicita com connection_string (o servico nao adivinha outros bancos).

5) Teste: opcao [1] do bat. Deve aparecer o CNPJ/razao social da empresa e,
   depois do intervalo minimo, "Consultando SEFAZ..." sem erro.

6) Instale como servico do Windows para subir sozinho:
   Feche o bat e reabra com BOTAO DIREITO > "Executar como administrador".
   Opcao [3] (instalar) -> ele cria e inicia o servico
   "DiamanteBuscadorXMLService".

   Depois, para gerenciar: opcoes [4] iniciar, [5] parar, [6] status,
   [7] desinstalar.

============================================================
 LOG DE ERROS DE INSTALACAO
============================================================
Toda acao do menu (instalar/iniciar/parar/desinstalar) grava a saida do
comando "sc" e o codigo de saida em:
     Logs\instalar-servico.log
Se a opcao [3] (instalar) falhar ou o servico nao ficar "Running" depois de
iniciado, abra esse log pela opcao [8] do menu -- ele mostra a mensagem de
erro exata do Windows (ex.: servico ja existe, caminho invalido, etc.).

Alem disso, o PROPRIO servico grava um log diario de execucao (separado
deste) em Logs\log_AAAA-MM-DD.txt, com o resultado de cada ciclo/consulta
SEFAZ -- esse e o log certo pra ver POR QUE uma nota nao baixou, erro de
certificado, cStat da SEFAZ, etc. Se o servico nao aparece nem como
"Running", confira sempre os dois: instalar-servico.log (instalacao) e o
Visualizador de Eventos do Windows (Log de Aplicativos, origem ".NET
Runtime" ou o nome do servico) para erros de inicializacao do processo.

============================================================
 PROBLEMAS COMUNS
============================================================
 - Servico nao inicia / para sozinho logo depois de "Running":
     confira Logs\log_AAAA-MM-DD.txt (erro de connection string, ACBr nao
     conseguiu carregar as DLLs, ou config.xml ausente/invalido).

 - "sc create" falha com "servico ja existe":
     rode a opcao [7] (desinstalar) antes de instalar de novo.

 - Nenhuma nota baixa mesmo sem erro:
     confira se o certificado digital esta valido e configurado no ACBr do
     Retaguarda (o servico usa a MESMA config), e se
     ConfiguracaoSistema.tempo_buscaxml nao esta configurado alto demais.

 - "cStat 656 - Consumo indevido":
     a SEFAZ bloqueou por excesso de consultas no intervalo minimo (60 min
     por padrao) -- normal se testou o servico varias vezes seguidas; espera
     o proximo ciclo.

Documentacao completa no repositorio: CHANGELOG.md (entrada "AGENTEIA
levado para producao" e "AGENTEIA.Service/.Console renomeados para
BuscadorXML.Service/.Console").
