> For the complete documentation index, see [llms.txt](https://docs.thewalletcrew.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.thewalletcrew.io/connectors/fr/custom-connector/reference-de-script-des-connecteurs-personnalises/transformation-des-lignes-de-mise-a-jour-groupee-de-carte.md).

# Transformation des lignes de mise à jour groupée de Carte

Personnalisez le débit et l’analyse des lignes pour les imports en masse de « mise à jour des cartes », à l’aide de \`runtime.import.updatePasses.rowTransformer\`.

Ces deux crochets facultatifs personnalisent le pipeline d'importation en masse des "mises à jour de cartes" (fichiers CSV déposés pour importation, y compris via SFTP). Ils existent pour les fichiers dont les colonnes ne suivent pas la [référence de colonnes documentée](/configure/fr/advanced-configuration/wallet/import-and-export/update-pass-using-flat-files.md), généralement une exportation depuis un CRM ou un POS qui ne peut pas être modifiée. Chaque crochet peut être implémenté indépendamment, et aucun n'a besoin de configuration supplémentaire au-delà de l'enregistrement du point de terminaison dans un script.

```js
/**
 * @param {string} fileName - Nom du fichier importé.
 * @returns {number|null} Un débit de remplacement pour ce fichier, ou null pour utiliser la valeur par défaut.
 */
function getThroughput(fileName) {
  return fileName.startsWith("priority-") ? 20 : null;
}

/**
 * @typedef {Object} UpdateCarteInformation
 * @property {Record<string, string>} Identifiants
 * @property {string} [CarteType]
 * @property {string} [ThemeId]
 * @property {string} [BenefitTemplateId]
 * @property {Record<string, string|null>} [AdditionalData]
 * @property {boolean} UpdateMetadata
 * @property {Record<string, string|null>} [NewIdentifiers]
 * @property {string} [Notification]
 * @property {Record<string, string>} [NotificationLocalizations]
 */

/**
 * @param {Record<string, string>} row - La ligne CSV actuelle, sous la forme nom de colonne → valeur.
 * @returns {UpdatePassInformation|null} La ligne transformée, ou null pour appliquer l'analyse par défaut des colonnes.
 */
function transform(row) {
  return null; // revenir à l'analyse par défaut pour chaque ligne
}

export default function (context) {
  context.register('runtime.import.updatePasses.rowTransformer', {
    GetThroughput: getThroughput,
    Transform: transform
  });
}
```

`GetThroughput` est appelé une fois par fichier, avant la lecture des lignes. `Transform` est appelé une fois par ligne. L'une ou l'autre fonction peut être omise de l'objet enregistré — une fonction omise ou `null`qui renvoie null revient au comportement par défaut de la plateforme pour cette ligne ou ce fichier.

## Débit

Le débit correspond au nombre de mises à jour de cartes délivrées par seconde. Il s'applique à l'ensemble du fichier : les mises à jour sont réparties à ce rythme de la première ligne à la dernière, quel que soit le nombre de lignes du fichier. Retourner `null` conserve le rythme par défaut.

## Champs de UpdatePassInformation

Tout champ omis ou `null` laisse la partie correspondante de la carte inchangée.

| Champ                       | Signification                                                                                                                                                                                          |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Identifiants`              | Les cartes à mettre à jour. Un `id` clé sélectionne une carte par son identifiant de carte ; sinon `id.<name>` les clés sélectionnent toutes les cartes portant tous les identifiants externes donnés. |
| `CarteType`                 | Le modèle de carte vers lequel basculer.                                                                                                                                                               |
| `ThemeId`                   | Le thème à appliquer. Une chaîne vide `""` supprime le thème actuel.                                                                                                                                   |
| `BenefitTemplateId`         | Un modèle d'avantage, accordé à chaque carte avant que la carte ne soit mise à jour.                                                                                                                   |
| `AdditionalData`            | Clés à fusionner dans les données supplémentaires de la carte. Une `null` valeur supprime la clé.                                                                                                      |
| `UpdateMetadata`            | `true` recalcule les métadonnées de la carte avec la mise à jour. Plus lent.                                                                                                                           |
| `NewIdentifiers`            | Identifiants externes à définir, indexés par nom d'identifiant (un `id.` préfixe est accepté et ignoré). Chaque valeur est obligatoire.                                                                |
| `Notification`              | Le texte de notification par défaut, pour les appareils dont la langue n'a aucune entrée dans `NotificationLocalizations`.                                                                             |
| `NotificationLocalizations` | Texte de notification par code de langue, par exemple `{ "fr": "Bonjour !" }`. Lorsque celui-ci et `Notification` sont tous deux vides, aucune notification n'est envoyée.                             |

{% hint style="info" %}
Dans une colonne CSV, un simple tiret `-` supprime le thème. Un script renvoie une chaîne vide `""` à la place : le tiret n'est qu'une convention des colonnes CSV, donc un script qui renvoie `"-"` nomme un thème appelé `-`, et la ligne est refusée si aucun thème de ce nom n'existe.
{% endhint %}

## Validation et erreurs

L'objet renvoyé par `Transform` subit les mêmes vérifications qu'une ligne lue à partir des colonnes documentées. Une ligne dont `CarteType`, `ThemeId` ou `BenefitTemplateId` n'existe pas sur le locataire, ou dont `NewIdentifiers` a une valeur vide, est refusée : rien n'est modifié pour elle, les autres lignes continuent, et le journal d'importation la comptabilise selon son motif.

Une erreur levée par `Transform` est différente. Cela signifie que le script ne peut pas traiter le fichier, donc l'importation s'arrête à cette ligne et le journal d'importation affiche **Échec de l'importation**. Les lignes mises en file d'attente avant elle sont tout de même appliquées. Pour exclure une ligne sans arrêter le fichier, renvoyez-la avec un `Identifiants`: elle ne cible aucune carte et compte comme **Aucune correspondance**.

Lorsqu'un script mappe les lignes, le journal d'importation n'énumère pas les colonnes ignorées : les colonnes lues par le script relèvent du script.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.thewalletcrew.io/connectors/fr/custom-connector/reference-de-script-des-connecteurs-personnalises/transformation-des-lignes-de-mise-a-jour-groupee-de-carte.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
