# Modèle de carte Wallet et mappage des champs

Votre template Wallet définit ce que voient les utilisateurs à la porte. Le mapping des champs définit quelles données Secutix se retrouvent dans chaque champ du Wallet. Commencez simple. Faites en sorte que le code-barres, le nom de l'événement, la date, le lieu et le siège soient corrects. Ajoutez des champs supplémentaires uniquement lorsque vous savez pourquoi ils sont importants.

## Créer le modèle de billet d'événement

Un template est le « modèle » de votre billet dans Apple Wallet et Google Wallet. C’est ce qui fait que la Carte ressemble à votre marque et ce qui décide quelles informations sont affichées au participant.

Vous le créez une fois, puis vous le réutilisez pour chaque billet émis. La plupart des équipes commencent avec un seul template de billet d'événement. Même avec de petites variations, vous pouvez souvent conserver un seul template car le moteur de template prend en charge les variables et les conditions dans chaque champ personnalisable, y compris les couleurs et les images.

Vous ne créez davantage de templates que lorsque vous avez besoin d’un aspect complètement différent ou d’un contenu différent pour certains billets. Si vous voulez une explication plus longue, voir [Modèle](https://docs.thewalletcrew.io/fr/conception/general#template).

<details>

<summary><strong>Cas d’utilisation réels</strong></summary>

Utilisez plusieurs templates lorsque vous avez besoin d’une mise en page ou d’un ensemble de champs clairement différent.

* **Différents types de produits :** un template pour un **pass visite**, un autre pour un **billet d'événement**, et un autre pour un **abonnement saisonnier**.
* **Différentes salles / halls :** un template par salle dans un lieu multi-salles, afin que la Carte mette en avant le bon nom de salle et les bonnes informations d’entrée.
* **Changements de configuration du lieu :** différents templates lorsque le même endroit a des configurations différentes (assis, debout, en arène).
* **Placement numéroté vs libre :** un template qui affiche **section/rang/siège**, et un autre qui se concentre sur **placement libre**.
* **Différentes expériences d'accès :** différents templates lorsque certains spectacles nécessitent des instructions supplémentaires (entrée VIP, accès anticipé, flux d’entrée spécifique).

</details>

{% stepper %}
{% step %}

#### Créer un nouveau template

<p align="center"><a href="https://admin.thewalletcrew.io/tenant/~/passTypes" class="button secondary" data-icon="chevrons-right">Créer un nouveau template</a></p>
{% endstep %}

{% step %}

#### Choisissez « Utiliser un pré-construit »

<div data-with-frame="true"><figure><img src="https://3097111101-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2F3avOpFUuDwQu4SNxtLqD%2Fimage.png?alt=media&#x26;token=4cb6ec73-419e-4263-8485-255660262470" alt="Template creation options with “Use a pre-built” selected" width="375"><figcaption><p>Sélectionner <strong>Utiliser un pré-construit</strong> pour commencer depuis la bibliothèque.</p></figcaption></figure></div>
{% endstep %}

{% step %}

#### Choisir le template « Billet d'événement »

<div data-with-frame="true"><figure><img src="https://3097111101-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2FYZYAh1xcmBWKfNquX9eL%2Fimage.png?alt=media&#x26;token=4290fa72-32d0-4267-bfdd-d93f93b375a1" alt="Wallet template selection when creating a new template" width="375"><figcaption><p>Choisissez le <strong>Billet d’événement</strong> template lors de la création de votre Carte.</p></figcaption></figure></div>
{% endstep %}

{% step %}

#### Définir le nom du template

Le nommage des templates est important. Secutix peut cibler des templates par nom lors de la distribution. Si vous prévoyez plusieurs templates, configurez des règles de routage dans [Sélection du template (routage)](https://docs.thewalletcrew.io/fr/connecter/ticketing/secutix/template-selection).
{% endstep %}
{% endstepper %}

## Mapping des champs

Le connecteur mappe par défaut les champs de billet les plus courants. Dans votre template, ouvrez l’éditeur de configuration avancée pour parcourir les données Secutix disponibles avec autocomplétion. Utilisez la liste des champs ci-dessous pour planifier votre mapping et déboguer les valeurs.

<div data-with-frame="true"><figure><img src="https://3097111101-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2FpnUOtIhnkLdv5zXgPO2G%2Fimage.png?alt=media&#x26;token=3f065b1a-dae7-4381-9ad7-da7704bc1461" alt="Field mapping UI: autocomplete information from Secutix" width="375"><figcaption><p>Interface de mapping des champs avec autocomplétion Secutix.</p></figcaption></figure></div>

Utilisez cette page lorsque vous devez :

* Confirmer quels champs Secutix sont disponibles.
* Ajouter des champs calculés supplémentaires à la charge utile de votre Carte.
* Déboguer quels champs de billet vous pouvez réutiliser dans votre template.

Pour en savoir plus sur la configuration des templates de billets, voir [Billet d’événement](https://docs.thewalletcrew.io/fr/conception/event-ticket).

### Champs disponibles

<details>

<summary><strong>Champs disponibles (liste complète)</strong></summary>

Voici le catalogue brut des champs exposé par le connecteur. Considérez-le comme une boîte à outils. Vous avez rarement besoin de tout.

| L'équipe Wallet      | Secutix                                                                             | Exemple                                       |
| -------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------- |
| firstName            | movementData.beneficiaryFirstname                                                   | Cyril                                         |
| lastName             | movementData.beneficiaryLastname                                                    | DURAND                                        |
| barCode              | movementData.barCode                                                                | 085035041335220306680099                      |
| ticket.zone3         | movementData.area                                                                   | Zone unique                                   |
| ticket.seatCategory  | movementData.seatCategory                                                           | Catégorie unique                              |
| address.country      | operationData.siteAddress.countryCode                                               | FR                                            |
| address.address      | operationData.siteAddress.firstAddressLine                                          | 116, Avenue du Président Kennedy              |
| address.city         | operationData.siteAddress.locality                                                  | PARIS                                         |
|                      | operationData.siteAddress.phoneNumber                                               | 33-0156401516                                 |
|                      | operationData.siteAddress.webSite                                                   | <http://www.maisondelaradioetdelamusique.fr/> |
| address.zipCode      | operationData.siteAddress.zipCode                                                   | 75016                                         |
| ticket.zone1         | operationData.site                                                                  | Maison de la Radio et de la Musique           |
| ticket.zone2         | operationData.space                                                                 | Studio 104                                    |
| ticket.price         | operationData.totalAmount                                                           | 0                                             |
| ticket.name          | operationData.performance                                                           | Spectacle Wallet                              |
| ticket.subName       | operationData.performanceAddOnName                                                  | Un spectacle exceptionnel                     |
| ticket.startDate     | operationData.performanceDate                                                       | 2024-07-01T20:00:00.000+02:00                 |
|                      | operationData.product                                                               | Spectacle Wallet                              |
|                      | operationData.productFamilyType                                                     | SINGLE\_ENTRY                                 |
|                      | operationData.productFamilySubType                                                  | SIMPLE\_TICKET                                |
| ticket.taxNumber     | movementData.TaxNumber                                                              | 12010124729                                   |
| expirationDate       | expirationDate                                                                      | 2024-02-23T00:03:46.627+01:00                 |
| ticket.orderId       | orderId                                                                             | 2389856                                       |
| ticket.contactId     | contactReference                                                                    | 897501                                        |
| ticket.fileId        | operationData.fileId                                                                | 2234582                                       |
| ticket.zone5         | movementData.row                                                                    |                                               |
| ticket.seatNumber    | movementData.seatNumber                                                             |                                               |
| ticket.zone4         | movementData.block                                                                  |                                               |
| ticket.priceCategory | operation.AudienceSubCategory                                                       |                                               |
| ticket.priceCurrency | operation.CatalogCurrency.CurrencyCode                                              |                                               |
| ticket.eventId       | operationData.eventId                                                               |                                               |
| ticket.entrance      | operationData.entrance                                                              |                                               |
| ticket.entranceCode  | operationData.entranceCode                                                          |                                               |
| ticket.floor         | operationData.floor                                                                 |                                               |
| ticket.seatQuality   | operationData.seatQuality                                                           |                                               |
| ticket.sector        | operationData.sector                                                                |                                               |
| ticket.canceled      | movementTicketData.TicketState is INVALIDATED or CANCELLED                          |                                               |
| address.longitude    | operationData.siteAddress.gpsLongitude or computed from address via Google Maps API |                                               |
| address.latitude     | operationData.siteAddress.gpsLatitude or computed from address via Google Maps API  |                                               |

</details>

## Personnalisation du mapping (avancé)

N'utilisez le scripting que lorsque le catalogue de champs par défaut n’est pas suffisant. Ajoutez un script personnalisé dans le **Avancé** onglet de la page de configuration Secutix.

<p align="center"><a href="https://admin.thewalletcrew.io/tenant/~/integrations/secutix/settings" class="button secondary" data-icon="chevrons-right">Écran de configuration Secutix</a></p>

Ceci est utile lorsque vous devez :

* Mapper une valeur Secutix qui n’est pas encore exposée.
* Construire un champ calculé (format, concaténation, valeur conditionnelle).
* Normaliser les valeurs pour que les templates restent propres (exemple : toujours produire un seul champ « entranceLabel »).

Enregistrer `extensions.secutix.movement.mapper` et implémenter `MapFromSecutix`.

```javascript
/**
 * Étendre le mapping par défaut de Secutix vers Wallet Crew.
 *
 * Ajouter tous les champs supplémentaires sur `entity`. Ils deviennent disponibles pour le rendu du template.
 *
 * @param {Object} params
 * @param {Object} params.Movement - Informations de Movement depuis le Web Service Secutix.
 * @param {Object} params.Operation- Informations d'opération liées au Movement courant depuis le Web Service Secutix.
 * @param {Object|null|undefined} params.Product - Informations produit annulables liées au Movement courant depuis Secutix.
 * @param {Object} entity - Entité cible du Wallet à enrichir.
 */
function mapFromSecutix(data, entity) {
  // Exemple : exposer un champ Secutix comme champ Wallet supplémentaire
  const stageVisibility = data?.Movement?.StageVisibility;
  if (stageVisibility != null) {
    entity["ticket.stageVisibility"] = stageVisibility;
  }
}

export default function(context) {
  context.register('extensions.secutix.movement.mapper', {
    MapFromSecutix: mapFromSecutix
  });
}
```

Si vous prévoyez d'exécuter plusieurs templates de billets, configurez des règles de routage dans [Sélection du template (routage)](https://docs.thewalletcrew.io/fr/connecter/ticketing/secutix/template-selection).
