/iso8583-validator

Ferramenta para auxiliar nos testes de validação da mensageria ISO8583

Primary LanguageJava

ISO8583 Validator


Ferramenta para auxiliar na validação da mensageria ISO8583


Pre-requisitos

Mensagens para validação

Na pasta do da aplicação tem dois arquivos xml.

  • logiso.xml : Colocar o conteudo do log xml transação que quer validar
  • logiso_original_req.xml : Opcional. Para casos de transações que precisam de transação original para ser validada. Como por exemplo: Pré-autorização Substitutiva, Confirmação de Pré-autorização, Estornos ... precisam da transação original pra validar o bit 90, bit 120 e outros
  • logiso_original_resp.xml : Opcional. A mesma utilidade do logiso_original_req.xml só que para o log de resposta da transação original.

Criação dos Validators

É nécessário configurar os validators através do arquivo validators.json. Ver sessão Validators para mais informações sobre como fazer isso.


Como Usar

Executar a transção

Execute a transação desejada para o ambiente montado de sua preferência

Coletar logs

  • Colete o os logs xml da transação feita e da transação original, se for necessário.
  • O conteúdo log do da transação a ser validada coloque no arquivo logiso.xml
  • O conteúdo do log da transação original, se for necessário, coloque no arquivo logiso_original.xml

Executar a aplicaçao

iso8583-validator [nome_do_validador]

pode-se passar um segundo argumento (opcional), informando o caminho do arquivo que contém os validadores. Por default será usado o validators.json da raiz da apalicação

iso8583-validator [nome_do_validador] [caminho_do_arquivo_validator]

Validators

Os validators são as regras que o Iso8583-validator irá seguir para fazer a validação da mensagem informada nos arquivos .xml. Estes deverão ser definidos no arquivo validators.json que está na raiz da aplicação.

Campos

Um validador sempre tem como o atributo inicial o nome validador, este será usando como uma chave que o identifica. Deve ser único. Este será usado como argumento da linha de comando da aplicação:

Exemplo:

{
  "nome_do_validador": { 
	"mandatoryFields": [
		3,
		4
	],
	"fields": [
		{
		"id": "22",
		"mandatory": true,
		"regex": "051"
		}
	}
}

Comando na hora de chamar na aplicação:

iso8583-validator nome_do_validador

Exemplo com todos campos possíveis:

{
  "cenario_1_id_1-Crédito": {
    "extendsOf": "cenario_5_id_1-Débito",
    "extendsOfRemoveFields": [55],
    "notExistsFields": [35],
    "mandatoryFields": [ 3, 4, 7, 11, 12, 13],
    "fields": [
      {
        "id": "48",
        "description": "Dados adicionais da transação",
        "mandatory": true,
        "regex": "[A-Z][a-z][0-9]",
        "mandatoryIfExistsField": "11",
        "mandatoryIfNotExistsField": "55",
        "containsOriginalFields":[11,7],
        "contains": "alguma string no bit para validar",
        "subfields": [  (Todos os campos dos "fields" vale para os "subfields")
          {
            "id": "001",
            "description": "Subcampo 1",
            "mandatory": true,
            "regex": "[A-Z][a-z][0-9]",
            "mandatoryIfExistsField": "11",
            "mandatoryIfNotExistsField": "55",
            "containsOriginalFields":[11,7],
            "containsOriginalRespFields": [12],
            "contains": "alguma string no bit para validar",
          },
          {
              Subcampo 2....
          },
          {
              Subcampo 3....
          }
        ]
      },
	  {
	   "id":"35",
	   "description":"Track two",
	   "mandatory":false,
	   "fieldsDependency":[
		  {
			 "id":"22",
			 "content":[
				"000",
				"001",
				"002"
			 ],
			 "checkMethod":"match"
		  }
	   ]
	  },
      {
          Campo 3....
      },
       {
          Campo 4....
      }
  }

Descrição dos campos

Validator

Campo Tipo Descrição
mandatoryFields Array Integer Informa os campos que devem ser tratados como obrigatórios na mensageria para esse validador
extendsOf String Informa o nome de outro validator que você deseja ter como base. Todos os campos desse validador "pai" serão importados para o novo. Os campos definidos no novo validador terão prioridade em relação aos que serão importados
extendsOfRemoveFields Array String Informa os campos que não queremos que seja importado do validador que foi informado em "extendsOf"
notExistsFields Array String Valida se o campo não existe na mensageria. Útil para validar campos que não deveriam vir.
fields FieldValidator Estrutura com regras para validação específica para cada campo.
fieldsDependency FieldDependency Campos do qual o campo depende para existir

FieldValidator

Campo Tipo Obrigatório Descrição
id String Sim Id do campo. Corresponte ao bit do ISO8583. Ex: "2", "11", "55", "127"
description String Não Descrição do campo
mandatory Boolean Sim Informa se é obrigatório ou não
regex String Não Valida o conteúdo da mensagem através de uma Expressão Regular. Pode ser usar também para validação de um texto literal. Por exemplo, para validar se todo bit 11 é igual a "12456": "regex": "123456"
mandatoryIfExistsField String Não Valida o campo como obrigatório se o bit informado existir
mandatoryIfNotExistsField String Não Valida o campo como obrigatório se o bit informado não existir
containsOriginalFields Array Integer Não Valida se no conteúdo do bit contém o valor do bit informado na requisição da transação original. Esse campo serve para validar bits que possuem informações da transação original, como por exemplo o bit 90 e bit 120. É preciso informar o conteúdo da transação original no arquivo logiso_original_req.xml que está na raiz da aplicação.
containsOriginalRespFields Array Integer Não Valida se no conteúdo do bit contém o valor do bit informado na resposta transação original. Esse campo serve para validar bits que possuem informações da transação original, como por exemplo o bit 90 e bit 120. É preciso informar o conteúdo da transação original no arquivo logiso_original_resp.xml que está na raiz da aplicação.
contains String Não Valida se dentro do conteúdo do bit contém o valor informada.
subfields FieldValidator Não Valida os subcampos que são em formato TLV. Essa estrutura suporta todos campos dos "fields" já descritos acima. Obs: Os ids dos subcampos TLV possuem 3 posições. Por exemplo o subcampo 1 deverá ser informado da seguinte forma: "id": "003"
contentType String Não Tipo do conteudo:
  • text
  • binary

FieldDependency

Campo Tipo Obrigatório Descrição
id String Sim Id do campo independente. Corresponte ao bit do ISO8583. Ex: "2", "11", "55", "127"
content Array String Sim Conteúdos que o campo independente pode conter para o que campo dependente exista
checkMethod String Sim Tipo de checagem do conteudo:
  • match