Introdução

Um poderoso e versátil sistema de bilhética.

O que é a APEX?

A APEX é o sistema de bilhética utilizado pela Carris Metropolitana, e que está a ser implementado em todos os operadores da AML. É o que suporta todas as funcionalidades do cartão navegante® — compra e carregamentos de títulos em cartões físicos e digitais, gestão de perfis de cliente, ativação de descontos e muitas outras funcionalidades fundamentais à bilhética dos transportes públicos.

A bilhética no GO

O GO está intimamente relacionado com a APEX, permitindo uma enorme agilidade no consumo de todas as informações que um sistema de bilhética unificado torna possível. A APEX descreve o catálogo de "produtos" disponíveis num sistema de transportes: a analogia mais simples será a de uma loja online, onde é possível adquirir um enorme número de itens, cada um com uma configuração específica. Aqui o processo é exato, mas me vez de t-shirts com múltiplas utilizações, foram criadas várias estruturas de dados simplificadas, que aqui documentamos, para permitir ainda mais agilidade na disponibilização de relatórios e cálculos operacionais. Estas estruturas têm as propriedades essenciais de cada um dos tipos de transações para permitir uma rápida extração de informações sobre a procura do sistema de transportes — passageiros transportados, consolidação de valores, pressão sobre determinados percursos, e muitos outros.

Tudo são transações

A APEX é uma biblioteca de software que é instalada nos softwares dos validadores. É um API local que "descodifica" as mensagens que são trocadas entre os cartões navegante® e o leitor NFC do validador. A biblioteca APEX implementa o standard internacional Calypso que define o tipo de comunicações, assim como as estruturas dos dados que ficam guardados nos cartões e são processados pelos validadores.

Sempre que um cartão navegante® se encosta a um validador, é gerada uma transação. Estas transações não são mais do que ficheiros de texto que contêm todas as informações necessárias para descrever a ação que acabou de ocorrer. Por exemplo, quando um cartão navegante® toca no validador de um autocarro é gerada uma transação de validação, onde ficam registadas informações como o ID da Linha (ex: 1715), o ID do veículo, a data e hora, o número do cartão, o título utilizado para "validar" o acesso, e muitos outros dados essenciais para as equipas de gestão.

Aqui está um exemplo de uma transação de validação APEX:

{
	"transactionInfo": {
		"apexTransactionType": 11,
		"apexTransactionVersion": "3.0",
		"transactionId": "ABC-1234567890",
		"transactionGroupId": "ABC-1234567890",
		"transactionDate": "2025-01-01T10:15:30"
	},
	"versionInfo": {
		"apexVersion": "3.2.6",
		"vivaVersion": "1.59.2",
		"technicalParametersVersion": "16.0",
		"commercialOfferVersion": "116.0",
		"networkVersion": "145.0",
		"actionListsVersion": "5.0"
	},
	"operatorInfo": {
		"operatorLongID": "41",
		"networkID": "id-network-lisboa",
		"channelID": "id-channel-val",
		"deviceID": "berlioz_1234567890"
	},
	"cardInfo": {
		"cardTypeID": "id-cardtype-lisboaviva",
		"cardPhysicalType": 3,
		"cardNetworkID": "id-network-lisboa",
		"cardIssuer": 1,
		"cardNumber": 1234567890,
		"cardSerialNumber": "0000000000000000"
	},
	"serviceInfo": {
		"blockID": "1234",
		"vehicleID": 1234,
		"dutyID": "1234",
		"journeyID": "1234_0_1_1000_1029_0_1",
		"validatorID": 2784,
		"lineLongID": "1234",
		"patternLongID": "1234_0_1",
		"stopLongID": "123456",
		"outOfBoundsType": 0,
		"onBehalfOfOperatorLongID": "41"
	},
	"validationInfo": {
		"validationType": 0,
		"contractNumber": 0,
		"eventType": 1,
		"validationStatus": 12,
		"profilesUsedCount": 0,
		"profilesUsedData": [],
		"greylistItemsCount": 0,
		"greylistItemsData": []
	},
	"signedData": {
		"raw": "000",
		"eventBinaryRead": "000",
		"eventBinaryWritten": "000",
		"contractBinaryRead": "000"
	},
	"mac": {
		"raw": "000",
		"interruptedStatus": 0,
		"macVersion": 4,
		"binaryDataMask": 9,
		"samModel": 7,
		"samWorkingMode": 255,
		"samTypeVersion": 2,
		"fullMacFlag": 0,
		"samSerialNumber": 1234567890,
		"aseCounterValue": 0,
		"transactionCounter": 0
	}
}

Existem vários tipos de transações, onde cada uma representa um tipo de ação em particular (venda de bilhete, carregamento de zapping, etc.). Cada tipo de transação tem uma estrutura própria, e todas relacionam-se entre si através de propriedades comuns.

Nesta secção vamos focar-nos nas propriedades principais dos tipos de transação principais.

O GO está intimamente relacionado com a APEX, permitindo uma enorme agilidade no consumo de todas as informações que este sistema permite. Tendo a APEX com múltiplas utilizações, foram criadas várias estruturas de dados simplificadas, que aqui documentamos, para permitir ainda mais agilidade na disponibilização de relatórios e cálculos operacionais. Estas estruturas têm as propriedades essenciais de cada um dos tipos de transações para permitir uma rápida extração de informações sobre a procura do sistema de transportes — passageiros transportados, consolidação de valores, pressão sobre determinados percursos, e muitos outros.

On this page