> For the complete documentation index, see [llms.txt](https://docs.enapi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.enapi.com/enapi-documentation-pt/funcionalidades-avancadas/plug-and-charge-iso-15118.md).

# Plug & Charge (ISO 15118)

A ENAPI suporta totalmente o roaming baseado em Plug & Charge (PnC) sobre OCPI, implementado de acordo com as melhores práticas do white paper da EV Roaming Foundation [*Suporte de autenticação Plug and Charge ISO 15118 em OCPI*](https://evroaming.org/wp-content/uploads/2025/04/EVRF-Whitepaper-ISO15118-Plug-and-Charge-Authentication-Support-In-OCPI.pdf). Pode fazer roaming usando PnC através do ENAPI Transaction Broker em qualquer versão OCPI suportada.

### Como o Plug & Charge funciona sobre OCPI

A PKI e o aprovisionamento de certificados acontecem independentemente do protocolo de roaming. O OCPI é agnóstico em relação ao serviço PKI subjacente do PnC, pelo que o tratamento de certificados fica fora do âmbito da ligação de roaming.

No ponto de carregamento, o veículo apresenta o seu certificado de contrato, o CPO valida-o e extrai o **EMAID** (o Identificador de Conta de e-Mobilidade incorporado no certificado). O EMAID é o único identificador necessário para autorizar a sessão: os dados de roaming são trocados apenas depois de a comunicação EV-to-EVSE estar estabelecida e o certificado ter sido validado.&#x20;

Dois módulos OCPI transportam PnC:

* **Tokens** — representa e autoriza o contrato PnC através do seu EMAID. Como o PnC requer autorização online, a ENAPI encaminha um pedido de autorização em tempo real para o MSP em cada sessão, em vez de depender de uma whitelist de tokens enviada previamente.
* **Localizações** — indica se um conector suporta PnC, para que os condutores possam tomar uma decisão informada antes de se dirigirem a um ponto de carregamento.

### Suporte de versões

O PnC funciona em todas as versões de OCPI suportadas pela ENAPI. A mecânica difere consoante a versão:

* **OCPI 3.0 / 2.3.0 (suporte nativo)** — `EMAID` é um tipo dedicado `TokenType`. O Token `uid` e `contract_id` são definidos como o EMAID, e a `authorization_policy` é `ASK_DEFAULT_DENY` para forçar a autorização online. No lado de Locations, o conector `capabilities` campo contém `ISO_15118_2_PLUG_AND_CHARGE` e/ou `ISO_15118_20_PLUG_AND_CHARGE`, definido pelo CPO quando o hardware, a configuração da EVSE (incluindo os certificados folha da PKI do PnC) e a integração do backend suportam PnC.
* **OCPI 2.2.1 e anteriores** — estas versões antecedem o suporte dedicado a PnC. Seguindo a recomendação da EVRF, o Token `tipo` é definido como `OTHER` com `uid` = EMAID (o que corresponde a `contract_id`/`auth_id`), e `whitelist = NEVER` para impor a autorização online. A capacidade PnC do conector é adaptada retroativamente usando o `capabilities` campo, conforme definido a partir da 2.3.0.

Se precisar de mover uma ligação com PnC entre versões, [contacte-nos](mailto:support@enapi.com) — o caminho de atualização é simples.

### Normalização do EMAID

**É aqui que a ENAPI elimina uma fonte recorrente de autorizações Plug & Charge falhadas.**&#x20;

O EMAID é definido na ISO 15118-1 com separadores opcionais e um dígito de controlo opcional, pelo que o mesmo contrato pode ser representado de várias formas válidas, mas não idênticas:

```
DE-ABC-C12345678-X      (com separadores e dígito de controlo)
DEABCC12345678X         (canónico: sem separadores, com dígito de controlo)
DEABCC12345678          (sem dígito de controlo)
deabcc12345678x         (minúsculas)
```

Na prática, as partes implementam estas representações de forma inconsistente. Um lado pode emitir EMAIDs com hífenes enquanto o outro os espera sem hífenes; o tratamento de maiúsculas/minúsculas e o dígito de controlo variam ainda mais. Quando o PnC faz roaming sobre OCPI **fora da ENAPI**, isto faz frequentemente com que os pedidos de autorização falhem ou sejam encaminhados para a parte errada, porque uma comparação literal de duas EMAIDs válidas para o mesmo contrato não coincide.

A ENAPI resolve isto na camada da plataforma. Nós **normalizamos os EMAIDs tanto no tráfego de entrada como de saída e convertemo-los para o formato que cada parceiro recetor espera**, para que os pedidos de autorização coincidam e sejam encaminhados de forma fiável, independentemente de diferenças de separadores, dígito de controlo ou maiúsculas/minúsculas entre contrapartes. Isto é aplicado uniformemente em toda a plataforma:

* A normalização é interna: os dados que a sua plataforma envia e recebe são preservados, e continua a trabalhar na sua própria representação.

Em linha com a recomendação da EVRF, incentivamos os parceiros a transmitir EMAIDs **com o dígito de controlo e sem separadores** — uma string alfanumérica de 14 caracteres. A ENAPI não o exige: se a sua representação for diferente, normalizamo-la para si, dando a cada parceiro interoperabilidade total em todo o ecossistema de roaming.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.enapi.com/enapi-documentation-pt/funcionalidades-avancadas/plug-and-charge-iso-15118.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
