> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Exemples de scripts d’assemblage

> Exemples de scripts d’assemblage pour les jeux de documents d’ABBYY FlexiCapture : l’un ajoute les documents obligatoires selon le montant du prêt, l’autre vérifie les documents manquants.

Ces exemples de scripts assemblent des documents en jeux de documents définis par une définition de jeu de documents et signalent les problèmes d’assemblage via l’objet `AssemblingErrors`. Le premier script requiert différents documents selon le montant du prêt. Le second vérifie qu’un jeu contient les pièces d’identité attendues.

<div id="require-documents-based-on-the-loan-sum">
  ## Exiger des documents en fonction du montant du prêt
</div>

Ce script assemble des documents en jeux de documents définis par une définition de jeu de documents. La définition de jeu de documents contient une section intitulée **Formulaire de l’emprunteur** et des références aux définitions de documents suivantes :

* Passeport
* Documents du garant
* Documents du coemprunteur
* Attestation de l’employeur

La section **Formulaire de l’emprunteur** inclut les champs suivants :

* Nom du coemprunteur
* Montant du prêt

Les documents que le jeu de documents doit contenir dépendent de la valeur du champ **Montant du prêt**. Le script utilise deux valeurs seuils pour déterminer quels documents sont obligatoires :

| Montant du prêt                                                   | Documents obligatoires                                               |
| ----------------------------------------------------------------- | -------------------------------------------------------------------- |
| Inférieur à la première valeur seuil                              | Passeport                                                            |
| Supérieur à la première valeur seuil, mais inférieur à la seconde | Passeport et une attestation de l’employeur                          |
| Supérieur à la seconde valeur seuil                               | Passeport, une attestation de l’employeur et les documents du garant |

Si le champ **Nom du coemprunteur** contient une valeur, le jeu de documents doit également contenir les documents du coemprunteur.

Le script suivant utilise cette logique pour assembler des jeux de documents :

```csharp theme={null}
using System.Collections.Generic;
int creditSum = 0;
bool creditSumFound = false;
string cocreditor = "";
int formCount = 0;
string formName = "Borrower's form";
// Définitions de document utilisées dans le jeu de documents
int referenceFromWorkCount = 0;
string referenceFromWorkName = "Employer reference";
int guaranteeDocsCount = 0;
string guaranteeDocsName = "Guarantor's documents";
int cocreditorDocsCount = 0;
string cocreditorDocsName = "Co-borrower's documents";
int passportCount = 0;
string passportName = "Passport";
foreach( IBatchItem item in BatchItems ) {
    // Rechercher le formulaire et déterminer le montant du prêt
    if (item.Type == TBatchItemType.BIT_Page)
    {
        if (item.AsPage.SectionName != formName)
            AssemblingErrors.AddCustomError("Cannot contain the following sections: " + item.AsPage.SectionName, 1);
        else
        {
            cocreditor = item.AsPage.Document.IndexedItemValue("Borrower's name").ToString();
            string creditSumText = item.AsPage.Document.IndexedItemValue("Loan sum").ToString();
            if (!int.TryParse(creditSumText, out creditSum))
                AssemblingErrors.AddCustomError("Loan sum was not recognized: " + creditSumText, 1);
            else
                creditSumFound = true;
            formCount++;
        }
    }
    // Compter les documents dans le jeu
    else if (item.Type == TBatchItemType.BIT_Document) {
        if (item.AsDocument.TemplateName == referenceFromWorkName)
            referenceFromWorkCount++;
        else if (item.AsDocument.TemplateName == guaranteeDocsName)
            guaranteeDocsCount++;
        else if (item.AsDocument.TemplateName == passportName)
            passportCount++;
        else if (item.AsDocument.TemplateName == cocreditorDocsName)
            cocreditorDocsCount++;
        else
            AssemblingErrors.AddCustomError("The document set cannot contain the document " + item.AsDocument.TemplateName, 1);
    }
}
// Vérifier le nombre de sections et de documents dans le jeu
if (formCount > 1)
    AssemblingErrors.AddCustomError("There are too many documents of the type: " + formName, formCount);
else if (formCount < 1)
    AssemblingErrors.AddCustomError("Missing the following documents: " + formName, 1);
if (passportCount > 1)
    AssemblingErrors.AddCustomError("There are too many documents of the type: " + passportName, passportCount);
else if (passportCount < 1)
    AssemblingErrors.AddCustomError("Missing the following documents: " + passportName, 1);
// Vérifier que le jeu de documents contient un co-emprunteur si un nom de co-emprunteur figure dans le formulaire
if (cocreditor != "" && cocreditorDocsCount < 1)
    AssemblingErrors.AddCustomError("Missing the following documents: " + cocreditorDocsName, 1);
else if (cocreditor != "" && cocreditorDocsCount > 1)
    AssemblingErrors.AddCustomError("There are too many documents of the type: " + cocreditorDocsName, cocreditorDocsCount);
else if (cocreditor == "" && cocreditorDocsCount > 0)
    AssemblingErrors.AddCustomError("There are too many documents of the type: " + cocreditorDocsName, cocreditorDocsCount);
// Vérifier que le jeu de documents contient tous les documents requis du fait que le montant du prêt dépasse l'un des seuils
if (creditSumFound)
{
    if (creditSum > 50000) // nécessite une attestation de l’employeur
    {
        if (referenceFromWorkCount > 1)
            AssemblingErrors.AddCustomError("There are too many documents of the type: " + referenceFromWorkName, referenceFromWorkCount);
        else if (referenceFromWorkCount < 1)
            AssemblingErrors.AddCustomError("Missing the following documents: " + referenceFromWorkName, 1);
    }
    if (creditSum > 500000) // nécessite les documents du garant
    {
        if (guaranteeDocsCount > 1)
            AssemblingErrors.AddCustomError("There are too many documents of the type: " + guaranteeDocsName, guaranteeDocsCount);
        else if (guaranteeDocsCount < 1)
            AssemblingErrors.AddCustomError("Missing the following documents: " + guaranteeDocsName, 1);
    }
}
```

<div id="check-for-missing-or-duplicate-documents">
  ## Vérifier les documents manquants ou en double
</div>

Ce script fonctionne avec la définition de jeu de documents **Identification Documents**, qui fait référence aux définitions de documents suivantes :

* Passeport
* Permis de conduire

Un jeu de documents peut contenir au maximum un document de chaque type et doit contenir au moins l’un de ces documents.

Le script suivant utilise cette logique pour assembler des jeux de documents :

```csharp theme={null}
using System.Collections.Generic;
using System;
string docSetName = "Identification Documents";
int pagesCnt = 0;
// Liste des types de documents pouvant être inclus dans le jeu
List<string> allowed = new List<string> {"Passport", "Driver's license"};
// Limite du nombre de documents de chaque type dans le jeu
List<int> allowedCount = new List<int>{1,1};
// Nombre de documents détectés dans le jeu
List<int> foundCount = new List<int>{0,0};
// Compter le nombre de documents et de pages dans le jeu
foreach (IBatchItem item in BatchItems) {
    if (item.Type == TBatchItemType.BIT_Document) {
        if (item.AsDocument.TemplateName == docSetName)
            AssemblingErrors.AddCustomError("Cannot contain a nested set", 1);
        else if (allowed.Contains(item.AsDocument.TemplateName)) {
            int i = allowed.IndexOf(item.AsDocument.TemplateName);
            foundCount[i]++;
        }
    }
    else if (item.Type == TBatchItemType.BIT_Page) pagesCnt++;
}
// Vérifier le nombre de documents et de pages
if (foundCount[0] + foundCount[1] == 0)
    AssemblingErrors.AddCustomError("At least one identification document is required", 1);
for (int i = 0; i < allowed.Count; i++) {
    if (foundCount[i] > allowedCount[i])
        AssemblingErrors.AddCustomError("Maximum number of documents: " + allowed[i] + ": " + allowedCount[i]);
}
if (pagesCnt > 0) AssemblingErrors.AddCustomError("The document set cannot contain pages that do not belong to a document", pagesCnt);
```
