Este parser foi desenvolvido para processar ficheiros MEPS (Pagamento Serviço) de acordo com as especificações da SISP (Sociedade Interbancária e Sistemas de Pagamentos). O parser suporta ambas as versões do formato de registo tipo 2 (versão 1 e versão 2) e realiza validações automáticas dos dados.
- Python 3.7 ou superior
- Não são necessárias bibliotecas externas além da biblioteca padrão Python
- Copie o ficheiro
meps_parser.pypara o seu projeto - Importe a classe e funções necessárias:
from meps_parser import MEPSFileParserO ficheiro MEPS é composto por três tipos de registos:
- Registo Header (tipo 0): Contém informações gerais do ficheiro
- Registo Detalhe (tipo 2): Contém detalhes das transações
- Registo Trailer (tipo 9): Contém totais e sumários
- Versão 1: Campo TARIFAPS com 5 dígitos
- Versão 2: Campo TARIFAPS com 10 dígitos
from meps_parser import MEPSFileParser
# Processar um ficheiro MEPS
def process_meps_file(file_path: str):
parser = MEPSFileParser()
try:
resultado = parser.parse_file(file_path)
# Acessar dados do header
header = resultado['header']
print(f"ID do Ficheiro: {header.idfich}")
print(f"Entidade: {header.entidade}")
# Acessar transações
detalhes = resultado['details']
for detalhe in detalhes:
print(f"Referência: {detalhe.refpag}")
print(f"Montante: {detalhe.montpgps}")
print(f"Tarifa: {detalhe.tarifaps}")
# Acessar totais
trailer = resultado['trailer']
print(f"Total de Transações: {trailer.totreg}")
print(f"Montante Total: {trailer.montranps}")
print(f"Total de Tarifas: {trailer.tottarps}")
except Exception as e:
print(f"Erro ao processar ficheiro: {str(e)}")
raise
if __name__ == "__main__":
file_path = "files/MEPS_00029_20241027011323_1"
process_meps_file(file_path)from meps_parser import MEPSFileParser
# Criar uma instância do parser
parser = MEPSFileParser()
# Processar ficheiro com acesso a todos os métodos
resultado = parser.parse_file("caminho_do_ficheiro.txt")
# Acessar campos específicos
for detalhe in resultado['details']:
# Verificar versão do registo
if detalhe.version == 1:
print("Registo Versão 1")
else:
print("Registo Versão 2")
# Acessar informações do terminal
print(f"Tipo de Terminal: {detalhe.tipoterm}")
print(f"ID do Terminal: {detalhe.idterminal}")
print(f"Localização: {detalhe.locmorter}")tipreg: Tipo de registo (0)fich: Tipo de ficheiro ("MEPS")idinstori: ID da instituição de origemidinstdes: ID da instituição de destinoidfich: ID do ficheiroidfichant: ID do ficheiro anteriorentidade: Entidadecodmoeda: Código da moedataxaiva: Taxa de IVAidfichedst: ID do ficheiro EDST
tipreg: Tipo de registo (2)codproc: Código de processamentoidlog: ID do lognrlog: Número do log centraldthora: Data/horamontpgps: Montante do pagamentotarifaps: Tarifatipoterm: Tipo de terminalidterminal: ID do terminalidentranps: ID da transação locallocmorter: Localização do terminalrefpag: Referência do pagamentomodenv: Modo de enviocodresp: Código de respostanridresps: ID da mensagem da empresaversion: Versão do registo (1 ou 2)
tipreg: Tipo de registo (9)totreg: Número total de registosmontranps: Montante total das transaçõestottarps: Total das tarifasvaliva: Valor do IVA
O parser realiza as seguintes validações:
- Presença de todos os registos obrigatórios
- Contagem correta de registos
- Consistência dos totais monetários
- Cálculos de tarifas e montantes
O parser lança exceções específicas em caso de:
- Ficheiro mal formatado
- Registos em falta
- Inconsistências nos totais
- Erros de validação
- Todos os valores monetários são convertidos para Decimal com 2 casas decimais
- Os campos são automaticamente limpos de espaços em branco
- A versão do registo tipo 2 é detectada automaticamente
- As validações são realizadas após a leitura completa do ficheiro
Em caso de dúvidas ou problemas, contacte:
- Email: DSI-DEV-RPA@cvt.cv