Project

General

Profile

Fonctionnalité #14435

[Versement] Connecteurs pour transformation des flux en entrée

Added by Cyril VAZQUEZ 3 months ago. Updated 26 days ago.

Status:
En cours
Priority:
2-Sérieux
Assignee:
-
Target version:
Start date:
07/13/2020
Due date:
Spent time:
Itération:
200811, 200824, 200907
Extension/Module:
MEDONA
Fonction:
Versement
SCRUM - Valeur:
3 - Must

Description

En tant que SV, je veux utiliser des connecteurs spécifiques à certains outils tiers qui génèrent des bordereaux afin d'adapter automatiquement les données et permettre leur acceptation ar le système sans intervention manuelle dans les paquets versés.

Détail
Certains logiciels tiers qui génèrent des bordereaux de versement et plus généralement des paquets versés fournissent des données incomplètes ou erronées:
- Octave
- Resip
- logiciels métiers autres...

Le besoin consiste à modifier automatiquement, selon des règles prédéfinies, les données entrantes au moment de la réception:
- adapter des valeurs comme l'algorithme de hachage, le format de dates (d/m/Y -> Y-m-d)
- ajouter des valeurs constantes OU saisies par l'utilisateur/fournies lors de l'appel : producteur, accord de versement, SA, SV, identifiant de bordereau...

Analyse préliminaire
En plus du formalisme d'échange, la fonction de réception de SIP de Medona doit permettre de sélectionner un connecteur dédié à une source, parmi les connecteurs configurés.

Le connecteur est déclaré dans la configuration, pour un format d'échange, et indique
- un service à appeler, qui respecte une interface précise
- une liste de paramètres possibles, obligatoires et facultatifs, avec leur type

Par exemple :

packageSchemas = "{
    'seda2' : {
        'label' : 'SEDA 2',
        'xmlNamespace' : 'fr:gouv:culture:archivesdefrance:seda:v2.1',
        'phpNamespace' : 'seda2',
        'presenter' : 'seda2/message',
        'sources' : {
            'octave' : {
                'service': 'seda2/octave',
                'params' : {
                    'originator': { 
                         'source': 'input',
                         'type' : 'string',
                         'required' : true,
                         'label': 'Identifiant du service producteur' 
                    },
                    'messageIdentifier': { 'source': 'input', 'type' : 'string', 'required' : false },
                    'comment': { 'source': 'param', 'value' : 'Transformé par...' },
                }
            }
        }
    }
}"

Lors de la réception, avant validation du schéma, le service est appelé et peut générer une nouvelle version du paquet qui sera prise en compte à la place de celui reçu.

La signature de la fonction CREATE medona/archiveTransfer::receive (et services associés, IHM, etc) sera modifiée :

receive($messageFile, $attachments = array(), $schema = null, $filename = false, $source = null, $params = [])

Voir s'il est possible de modifier le service plus profondément pour ne recevoir que
- message
- format
- source
- params

Les valeurs de attachment et filename étant traitées comme des paramètres complémentaires lorsque le SIP est en mode "multipart" (fichier joints à côté du bordereau, venant de l'écran) et "zip" (nom du bordereau nécessaire lorsque compressé)

Tests - Archifiltre-ReSip-Maarch.md (1.42 KB) Tests - Archifiltre-ReSip-Maarch.md Incompatibilités & anomalies Elodie SOME-BLAD, 07/13/2020 06:16 PM
Capture du 2020-08-08 13-11-28.png (37.9 KB) Capture du 2020-08-08 13-11-28.png Benjamin ROUSSELIERE, 08/08/2020 01:16 PM
OctaveConnector.php (2.54 KB) OctaveConnector.php Benjamin ROUSSELIERE, 08/08/2020 01:16 PM
mini_doc_connectors.txt (890 Bytes) mini_doc_connectors.txt Benjamin ROUSSELIERE, 08/08/2020 01:33 PM
5765

Related issues

Blocks Maarch RM - Product Backlog - Fonctionnalité #13901: [Versement] Connecteur OctaveA livrer2020-05-25
Blocks Maarch RM - Product Backlog - Fonctionnalité #14436: [Versement] Connecteur ReSIPA traiter2020-07-13
Precedes Maarch RM - Product Backlog - Fonctionnalité #14765: [Versement] Aide sur paramètres et valeurs par défautA livrer2020-07-152020-07-15
Precedes Maarch RM - Product Backlog - Fonctionnalité #14778: [Versement] Contraintes sur les paramètres de versement de paquetA tester2020-07-142020-07-14

History

#1 Updated by Cyril VAZQUEZ 3 months ago

#2 Updated by Cyril VAZQUEZ 3 months ago

  • Description updated (diff)

#3 Updated by Cyril VAZQUEZ 3 months ago

#5 Updated by Elodie SOME-BLAD 2 months ago

  • Itération 200811 added

#6 Updated by Cyril VAZQUEZ 2 months ago

  • Description updated (diff)

#7 Updated by Cyril VAZQUEZ 2 months ago

Phase 1

Interface des connecteurs

Créer l'interface medona/Controller/archiveTransferConnectorInterface avec une méthode transform()

Paramètres
- flux reçu (zip, json avec message et attachments)
- paramètres (reçus de la config ou de l'appel)

Point de branchement

Créer une nouvelle fonction archiveTransfer::receiveSource($message, $schema, $source = null, $params = [])
Créer la route d'API qui va avec

Reprendre la logique de receive SAUF l'appel à receivePackage, remplacée par la logique d'appel au connecteur

Créer un connecteur de test simple

Par exemple, suffixer l'identifiant de bordereau SEDA (messageIdentifier) par une valeur arbitraire (rand, chaîne en dur...)
Génère un nouveau XML à la place de celui reçu

Configurer le connecteur
Test via API

Modifier l'écran de versement manuel

Ajouter le select des sources associées au schéma choisi

Phase 2

Créer un connecteur de test avec paramètres

Par exemple, utiliser une valeur saisie par l'utilisateur pour le suffixe ou tout l'identifiant de message

Ecran avec paramètres

Ajouter des inputs en fonction des paramètres attendus par le connecteur (config)
Prendre en compte les inputs dans l'appel au service (params)

Phase 3

Créer les connecteurs pour Octave et ReSIP (autres tickets)

#8 Updated by Cyril VAZQUEZ 2 months ago

  • Description updated (diff)

#9 Updated by Benjamin ROUSSELIERE 2 months ago

  • Status changed from A traiter to En cours

#10 Updated by Benjamin ROUSSELIERE about 2 months ago

5765

Exemple de source à rajouter en dessous de 'presenter' dans la variable 'descriptionSchemes' (configuration.ini):

'sources' : {
'octave' : {
'service' : 'seda2/OctaveConnector',
'params' : {
'MessageIdentifier' : {
'source' : 'input',
'label' : 'Message Identifier',
'required' : true,
'position' : 'suffix'
},
'Comment' : {
'source' : 'param',
'type' : 'value',
'value' : 'Transformé par ',
'position' : 'prefix'
}
}
}
}

En pièce jointe le connecteur de test allant avec la configuration ci-dessus

#11 Updated by Benjamin ROUSSELIERE about 2 months ago

Mini doc en pièce jointe pour les devs

#12 Updated by Elodie SOME-BLAD about 2 months ago

  • Itération 200824 added

#13 Updated by Elodie SOME-BLAD about 2 months ago

  • Target version changed from Product Backlog to 2.7

#14 Updated by Cyril VAZQUEZ about 1 month ago

Configuration: Nouvelle directive qui inverse l'arbre schéma/source pour simplifier l'usage avec le choix d'un connecteur seulement

IHM et scénario proposés :

Le versement manuel prend désormais en compte un seul fichier/flux pour le paquet + un nom de connecteur

Au choix du connecteur, le formulaire complémentaire est affiché.

La configuration prévoit maintenant des paramètres de type "file" qui peuvent être "multiple":

packageConnectors = "{
    'octave' : {
        'label' : 'Octave SEDA 2.1',
        'service' : '',
        'schema' : 'seda2',
        'params' : {
            'identifier' : {
                'label' : 'Identifiant',
                'source' : 'input',
                'required' : true
            },
            'attachments' : {
                'label' : 'Pièces',
                'source' : 'input',
                'type' : 'file',
                'multiple' : true
            },
            'ack' : {
                'label' : 'AR',
                'source' : 'input',
                'type' : 'file'
            },
            'comment' : {
                'source' : 'param',
                'value' : 'Somme constant comment...'
            }
        }
    }

Pour la rétro-compatibilité de l'écran :
- versement en zip nécessite un connecteur zip (à réaliser) qui définit un paramètre "Nom de fichier bordereau"
- versement seulement d'un bordereau XML et connecteur (à réaliser) qui définit un paramètre "Pièces jointes" de type fichiers multiple

#15 Updated by Elodie SOME-BLAD about 1 month ago

  • Status changed from A tester to En cours
  • Itération 200907 added

#16 Updated by Benjamin ROUSSELIERE 26 days ago

Le connecteur par défaut ne peut plus recevoir de pièces.
Le fichier xml transformé, enregistré dans 'data/maarchRM/medona', n'a pas d'extension.

#17 Updated by Cyril VAZQUEZ 21 days ago

#18 Updated by Cyril VAZQUEZ 20 days ago

Also available in: Atom PDF