Déploiement du MAARCH2MAARCH (M2M)

La fonctionnalité M2M, permet d'envoyer un courrier et des pièces jointes entre deux instances de Maarch Courrier, ou entre Maarch Courrier et une autre GEC.

L'expéditeur du courrier sera automatiquement créé dans la base de données s'il n'existe pas.
Il est également possible de recevoir un accusé de réception et de suivre l'avancement de notre courrier chez le destinataire.

Les données sont transmises dans une archive ZIP soit par l'envoi de mail (et Maarch Capture), soit par web service REST, soit manuellement. Cette archive ZIP est appelée par la suite "Pli numérique"

Dans les trois cas, une configuration doit être faite dans l'administration de l'application

Configuration M2GEC

Voir la configuration dans l'administration des paramètres

Docservers M2GEC

1) Vérifier que le docserver_id ARCHIVETRANSFER existe dans la table docservers. S'il n'existe pas, passer cette commande dans la base de données :

INSERT  INTO docservers (docserver_id, docserver_type_id, device_label, is_readonly, enabled, size_limit_number, actual_size_number, path_template, ext_docserver_info, chain_before, chain_after, creation_date, closing_date, coll_id, priority_number, docserver_location_id, adr_priority_number)
VALUES ('ARCHIVETRANSFER', 'ARCHIVETRANSFER', 'Fast internal disc bay for archive transfer', 'N', 'Y', 50000000000, 1, '/opt/maarch/docservers/archive_transfer/', NULL, NULL, NULL, '2017-01-13 14:47:49.197164', NULL, 'archive_transfer_coll', 10, 'NANTERRE', 2);

Vérifier également que le chemin /opt/maarch/docservers/archive_transfer/ existe sur votre serveur et que les droits soient correctement positionnés. Sinon modifier ce chemin, ou créer le dossier.

2) Vérifier que le docserver_type ARCHIVETRANSFER existe dans la table docserver_types. S'il n'existe pas, passer cette commande dans la base de données :

INSERT  INTO docserver_types (docserver_type_id, docserver_type_label, enabled, is_container, container_max_number, is_compressed, compression_mode, is_meta, meta_template, is_logged, log_template, is_signed, fingerprint_mode)
VALUES ('ARCHIVETRANSFER', 'Archive Transfer', 'Y', 'N', 0, 'N', 'NONE', 'N', 'NONE', 'N', 'NONE', 'Y', 'SHA256');

Communication des données

Afin de transférer les documents entre les deux instances, le protocole utilisé est SEDA2.

Le pli numérique est une archive ZIP, contenant :

  • Un bordereau au format SEDA2 décrivant le package
  • Le document principal et ses pièces jointes

Exemple de paquet transféré :
ArchiveTransfer_20181008_164539_bblier.zip

  • ArchiveTransfer_20181008_164539_bblier.xml
  • 0030_1200000707.pdf

Exemple de bordereau SEDA2 généré : (Par soucis de lisibilité, le fichier encodé en base64 a été enlevé)

<?xml version="1.0" encoding="UTF-8"?>
<ArchiveTransfer xmlns="fr:gouv:culture:archivesdefrance:seda:v2.0">
    <Comment>Bernard BLIER (Ville de Maarch-les-bains - Service Courrier - support@maarch.org) :  Votre message est prêt à  être envoyé avec les fichiers joints suivants :&#13;
 &#13;
sdfsddf: sdfsddf.pdf&#13;
    </Comment>
    <Date>2018-10-08T16:45:39+02:00</Date>
    <MessageIdentifier>ArchiveTransfer_20181008_164539_bblier</MessageIdentifier>
    <CodeListVersions>
        <ReplyCodeListVersion>""</ReplyCodeListVersion>
        <MessageDigestAlgorithmCodeListVersion>""</MessageDigestAlgorithmCodeListVersion>
        <MimeTypeCodeListVersion>""</MimeTypeCodeListVersion>
        <EncodingCodeListVersion>""</EncodingCodeListVersion>
        <FileFormatCodeListVersion>""</FileFormatCodeListVersion>
        <CompressionAlgorithmCodeListVersion>""</CompressionAlgorithmCodeListVersion>
        <DataObjectVersionCodeListVersion>""</DataObjectVersionCodeListVersion>
        <StorageRuleCodeListVersion>""</StorageRuleCodeListVersion>
        <AppraisalRuleCodeListVersion>""</AppraisalRuleCodeListVersion>
        <AccessRuleCodeListVersion>""</AccessRuleCodeListVersion>
        <DisseminationRuleCodeListVersion>""</DisseminationRuleCodeListVersion>
        <ReuseRuleCodeListVersion>""</ReuseRuleCodeListVersion>
        <ClassificationRuleCodeListVersion>""</ClassificationRuleCodeListVersion>
        <AuthorizationReasonCodeListVersion>""</AuthorizationReasonCodeListVersion>
        <RelationshipCodeListVersion>""</RelationshipCodeListVersion>
    </CodeListVersions>
    <DataObjectPackage>
        <BinaryDataObject id="res_letterbox_0_104">
            <Attachment filename="0030_1200000707.pdf">BASE64_DU_DOCUMENT</Attachment>
            <MessageDigest algorithm="sha256">d4ae804a0e20cd61d63a92056506fe40fe6d46ade73a5803c54cf5ebf024cc2896133f7314da49edcaab61f9c3049f74030d153b30566f9822f2722173105e95</MessageDigest>
            <Size>111108</Size>
            <FormatIdentification>
                <MimeType>application/pdf</MimeType>
            </FormatIdentification>
        </BinaryDataObject>
        <DescriptiveMetadata>
            <ArchiveUnit id="mail_1">
                <Content>
                    <DescriptionLevel>File</DescriptionLevel>
                    <Title>[CAPTUREM2M]Réponse à votre courrier du 27-06-2018</Title>
                    <OriginatingSystemId>104</OriginatingSystemId>
                    <Status>Nouveau courrier ou document non qualifié</Status>
                    <Writer>
                        <FirstName>Barbara</FirstName>
                        <BirthName>BAIN</BirthName>
                    </Writer>
                    <CreatedDate>2018-06-27</CreatedDate>
                </Content>
                <ArchiveUnit id="archiveUnit_res_letterbox_0_104">
                    <Content>
                        <DescriptionLevel>Item</DescriptionLevel>
                        <Title>sdfsddf</Title>
                        <OriginatingSystemId>104</OriginatingSystemId>
                        <Status>Nouveau courrier ou document non qualifié</Status>
                        <Writer>
                            <FirstName>Barbara</FirstName>
                            <BirthName>BAIN</BirthName>
                        </Writer>
                        <CreatedDate>2018-06-27</CreatedDate>
                    </Content>
                    <DataObjectReference>
                        <DataObjectReferenceId>res_letterbox_0_104</DataObjectReferenceId>
                    </DataObjectReference>
                </ArchiveUnit>
            </ArchiveUnit>
        </DescriptiveMetadata>
        <ManagementMetadata></ManagementMetadata>
    </DataObjectPackage>
    <ArchivalAgency>
        <Identifier>org_987654321_DGS_SF</Identifier>
        <OrganizationDescriptiveMetadata>
            <Name>Préfecture de Maarch Les Bains</Name>
            <Communication>
                <Channel>url</Channel>
                <CompleteNumber>https://cchaplin:maarch@demo.maarchcourrier.com/rest/saveNumericPackage</CompleteNumber>
            </Communication>
            <Contact>
                <PersonName>MARTIN Nicolas</PersonName>
                <Communication>
                    <Channel>phone</Channel>
                    <CompleteNumber></CompleteNumber>
                </Communication>
                <Communication>
                    <Channel>email</Channel>
                    <CompleteNumber>info@maarch.org</CompleteNumber>
                </Communication>
                <Address>
                    <CityName>MAARCH LES BAINS</CityName>
                    <Country>FRANCE</Country>
                    <PostOfficeBox>13</PostOfficeBox>
                    <StreetName>RUE LA PREFECTURE</StreetName>
                </Address>
            </Contact>
        </OrganizationDescriptiveMetadata>
    </ArchivalAgency>
    <TransferringAgency>
        <Identifier>org_987654321_DGS_SF</Identifier>
        <OrganizationDescriptiveMetadata>
            <LegalClassification>Ville de Maarch-les-bains</LegalClassification>
            <Name>Service Courrier</Name>
            <Communication>
                <Channel>url</Channel>
                <CompleteNumber>https://cchaplin:maarch@localhost/maarch_v2</CompleteNumber>
            </Communication>
            <Contact>
                <DepartmentName>Service Courrier</DepartmentName>
                <PersonName>Bernard BLIER</PersonName>
                <Communication>
                    <Channel>phone</Channel>
                </Communication>
                <Communication>
                    <Channel>email</Channel>
                    <CompleteNumber>florian.azizian@maarch.org</CompleteNumber>
                </Communication>
                <Address></Address>
            </Contact>
        </OrganizationDescriptiveMetadata>
    </TransferringAgency>
</ArchiveTransfer>

Envoi d'un pli numérique

Afin de pouvoir envoyer un pli numérique, un utilisateur doit faire parti d'un groupe qui a le privilège "Enregistrer un pli numérique".

L'envoi de pli numérique se fait dans la partie "Eléments envoyés" visible dans la fiche détaillée, ou la page de traitement. Cliquer ensuite sur le logo "Envoyer un pli numérique" afin d'accéder au formulaire d'envoi.

Creation Pli Numérique

  • Contact : Seuls les contacts ayant des moyens de communication apparaissent dans l'autocomplétion. Cette information peut être renseigné dans les champs "Moyen de communication/Valeur" de la fiche d'un contact. Le champ Identifiant contact externe de l'adresse du contact doit correspondre au numéro SIRET d'une entité dans l'instance destinatrice. Dans le cas contraire, une erreur s'affichera.
  • Fichiers joints : Sélectionner les éléments (Courrier, pièce jointe, note) que vous voulez intégrer dans le pli numérique. Le premier élément sera positionné en tant que document principal (celui qui s'affiche dans la partie droite sur la page de traitement dans Maarch Courrier)

Le pli numérique peut être transmis selon 3 méthodes. Cela dépend du moyen de communication de l'expéditeur et du destinataire.

Envoi par webservice

Aucun paramétrage à faire en plus. Les courriers, accusé de réception et suivi des demandes seront visible en tant réelle (sauf ralentissement réseau).

Envoi manuel

Si les 2 instances ne sont pas joignable, il est possible d'enregistrer le pli numérique et de le transférer au destinataire "manuellement".
Pour cela :

  • Enregistrer un pli numérique.
  • Cliquer sur le bouton "Télécharger" dans la liste des pli numérique.
  • Transmettre le pli numérique complet au destinataire (par messagerie instantanée, par clé usb, ...)
  • Le destinataire va importer le pli numérique via le menu "Enregistrer un pli numérique". Pour avoir accès à ce menu, il faut que l'un de ses groupes ait le privilège "Enregistrer un pli numérique".

Import Pli Numérique

Envoi par mail automatisé

Attention, avec cette méthode, la transmission des pli numérique, des accusés de réception et de la suivi des demande ne sont pas instantanée. Cela dépend de la fréquence d'exécution des scripts d'envoi de mail et de capture.

Pour utiliser cette méthode, il faut paramétrer Maarch Capture :

1) Copier le fichier [racine_Maarch_Capture]/config/samples/Capture_m2m_sample.xml.default vers [racine_Maarch_Capture]/config/Capture.xml. Et modifier les chemins des attributs maarchLogParam et directory en fonction de votre environnement.

2) Copier les 4 fichiers [racine_Maarch_Capture]modules/MailCapture/samples/MailCapture_M2M{_ACK, _NOTIFICATION, _REPLY}.xml.default vers [racine_Maarch_Capture]modules/MailCapture/MailCapture_M2M{_ACK, _NOTIFICATION, _REPLY}.xml.default

3) Copier le fichier [racine_Maarch_Capture]/modules/MaarchWSClient/samples/MaarchWSClient_m2m_sample.xml.default vers [racine_Maarch_Capture]/modules/MaarchWSClient/MaarchWSClient_m2m_sample.xml. Et modifier l'attribut uri en fonction de votre environnement.

4) Copier le script [racine_Maarch_Capture]/scripts/samples/linux/CAPTURE_M2M.sh.default en [racine_Maarch_Capture]/scripts/samples/linux/CAPTURE_M2M.sh

Rendre ce script exécutable avec la commande "chmod +x", puis lancer le en tâche planifié.
Les logs de Maarch Capture sont visible dans le fichier que vous avez indiqué dans l'attribut directory du fichier Capture.xml

De plus, il faut que l'envoi de mail soit correctement configuré dans votre application (Voir la documentation).

Liste des plis numérique envoyés

Après l'envoi d'un pli numérique, celui-ci est visible dans la liste des plis numérique.

Liste Pli Numérique

Vous pouvez voir si le pli numérique a été reçu par le destinataire en vérifiant que la date de réception soit bien remplie.

  • De : Expéditeur du message
  • A : Destinataire du message
  • Reçu le : Date de réception du pli numérique par le destinataire. Reste vide tant que l'expéditeur n'a pas reçu le pli numérique. Cela indique que le pli numérique a bien été intégré dans la base de données du destinataire
  • Pris en charge : Date de prise en charge du pli numérique par le destinataire. Reste vide tant que le destinataire n'a pas fait d'action sur le pli numérique. Seule la date de la première action est visible.
  • Statut : Si le pli numérique n'a pas pu être envoyé, il est au statut "Non envoyé"

Suivi de la demande

Dans la liste des plis numérique envoyés, cliquer sur un pli numérique.

Le détail du pli numérique envoyé s'affiche.

Suivi Pli Numérique

Aussi, vous pouvez voir :

  • L'expéditeur, le destinataire, etc...
  • Les éléments envoyés dans le pli numérique
  • Historique des actions : Chaque action de workflow réalisé sur le courrier (chez l'expéditeur) s'affichera ici. Seules les actions avec l'option "Tracer l'action" ajouterons une ligne dans cette partie (Paramétrage des actions ici).

Historique

Les actions sont enregistrés dans l'historique :

  • Pli numérique ajouté sur le document
  • Pli numérique importé

Focus : peut on communiquer avec une instance Maarch Courrier pour différents services destinataires ?

C'est tout à fait possible, grâce au contact que vous créez dans l'instance émettrice via le champ "Identifiant contact externe de l'adresse du contact" qui doit correspondre au numéro SIRET d'une entité de l'instance destinatrice.

Ex : vous pouvez envoyer un pli numérique à la ville de Nancy pour le service informatique, si vous avez créé dans votre instance émettrice l'adresse "service informatique" du contact de la ville de Nancy. L'adresse "service informatique" du contact "ville de Nancy" doit avoir dans le champ "identifiant du contact externe" le numéro de SIRET de l'entité "service informatique" de l'instance de la ville de Nancy.

Pour étayer cet exemple, imaginons que vous souhaitez envoyer deux plis numériques à la ville de Nancy. Un pour le service informatique, un autre pour le service comptabilité

Le paramétrage et les étapes suivantes devront alors être validées :

Etape 0 : dans l'instance destinatrice, la ville de Nancy, il faut que j'ai les deux entités déclarées avec le champ numéro de SIRET unique. J'ai donc créé le service informatique avec le num SIRET 1234NANCY_INFORMATIQUE et le service comptabilité avec le SIRET 1234NANCY_COMPTABILITE.

Etape 0

Etape 0

Etape 1 : je créé le contact "service informatique" du contact de la ville de Nancy avec comme identifiant contact externe "1234NANCY_INFORMATIQUE"

Etape 1

Etape 2 : je créé le contact "service comptabilité" du contact de la ville de Nancy avec comme identifiant contact externe "1234NANCY_COMPTABILITE"

Etape 2

Etape 3 : une fois mon courrier enregistré (associé au contact "ville de Nancy service informatique") j'envoie le pli numérique au service informatique de la ville de Nancy

Etape 3

Etape 4 : une fois mon courrier enregistré (associé au contact "ville de Nancy service comptabilité") j'envoie le pli numérique au service comptabilité de la ville de Nancy

Etape 4

Chargement d'un jeu de contacts

Depuis le répertoire ./sql vous avez à votre disposition un fichier SQL vous permettant de vous aider à charger des contacts candidats au M2GEC. C'est un fichier exemple quand vous êtes en multi-instances. Cela vous permet de charger les contacts des autres instances de votre plateforme. Vous permettant ainsi de faire des transferts de courriers entre vos instances.

./sql/m2m_contacts_samples.sql

Voici son contenu :

    --CREATE GROUP FOR M2GEC
    DELETE FROM usergroups WHERE group_id = 'MAARCHTOGEC';
    INSERT INTO usergroups (group_id,group_desc,enabled) VALUES ('MAARCHTOGEC', 'Envoi dématérialisé','Y');
    DELETE FROM usergroups_services WHERE group_id = 'MAARCHTOGEC';
    INSERT INTO usergroups_services (group_id, service_id) VALUES ('MAARCHTOGEC', 'save_numeric_package');

    --CREATE SECURITY FOR M2GEC
    DELETE FROM security WHERE group_id = 'MAARCHTOGEC';
    INSERT INTO security (group_id, coll_id, where_clause, maarch_comment) VALUES ('MAARCHTOGEC', 'letterbox_coll', '1=0', 'Aucun courrier');

    --CREATE A USER FOR M2GEC
    DELETE FROM users WHERE user_id = 'cchaplin';
    INSERT INTO users (user_id, password, firstname, lastname, mail, enabled, change_password, status, loginmode) VALUES ('cchaplin', '$2y$10$C.QSslBKD3yNMfRPuZfcaubFwPKiCkqqOUyAdOr5FSGKPaePwuEjG', 'Jean', 'WEBSERVICE', 'info@maarch.org', 'Y', 'N', 'OK', 'restMode');
    DELETE FROM usergroup_content WHERE user_id = 'cchaplin';
    INSERT INTO usergroup_content (user_id, group_id, primary_group, role) VALUES ('cchaplin', 'MAARCHTOGEC', 'Y','');

    --CREATE CONTACTS FOR M2GEC
    DELETE FROM contacts_v2 where contact_id >= 1000000;
    DELETE FROM contact_addresses where id >= 1000000;
    DELETE FROM contact_communication where contact_id >= 1000000;
    -- INSTANCE A
    INSERT INTO contacts_v2 (contact_id, contact_type, is_corporate_person, is_external_contact, society, user_id, entity_id, creation_date) VALUES 
    (1000000, 102, 'Y', 'Y', 'Custom 1', 'cchaplin', 'COU', '2019-03-28 21:43:54.97424');
    INSERT INTO contact_addresses (id, contact_id, contact_purpose_id, user_id, entity_id, external_id) 
    VALUES (1000000, 1000000, 1, 'cchaplin', 'COU', '{"m2m": "org_custom_1"}');
    INSERT INTO contact_communication (contact_id, type, value) 
    VALUES (1000000, 'url', 'http://cchaplin:maarch@127.0.0.1/MaarchCourrier/cs_custom_1/');
    -- INSTANCE B
    INSERT INTO contacts_v2 (contact_id, contact_type, is_corporate_person, is_external_contact, society, user_id, entity_id, creation_date) VALUES 
    (1000001, 102, 'Y', 'Y', 'Custom 2', 'cchaplin', 'COU', '2019-03-28 21:43:54.97424');
    INSERT INTO contact_addresses (id, contact_id, contact_purpose_id, user_id, entity_id, external_id) 
    VALUES (1000001, 1000001, 1, 'cchaplin', 'COU', '{"m2m": "org_custom_2"}');
    INSERT INTO contact_communication (contact_id, type, value) 
    VALUES (1000001, 'url', 'http://cchaplin:maarch@127.0.0.1/MaarchCourrier/cs_custom_2/');
    -- INSTANCE C
    INSERT INTO contacts_v2 (contact_id, contact_type, is_corporate_person, is_external_contact, society, user_id, entity_id, creation_date) VALUES 
    (1000002, 102, 'Y', 'Y', 'Custom 3', 'cchaplin', 'COU', '2019-03-28 21:43:54.97424');
    INSERT INTO contact_addresses (id, contact_id, contact_purpose_id, user_id, entity_id, external_id) 
    VALUES (1000002, 1000002, 1, 'cchaplin', 'COU', '{"m2m": "org_custom_2"}');
    INSERT INTO contact_communication (contact_id, type, value) 
    VALUES (1000002, 'url', 'http://cchaplin:maarch@127.0.0.1/MaarchCourrier/cs_custom_3/');

    -- FOR EACH INSTANCE
    DO $$
    BEGIN
        IF (SELECT current_database() = 'custom_1') THEN
            UPDATE entities set business_id = 'org_custom_1';
        END IF;
    END $$;
    DO $$
    BEGIN
        IF (SELECT current_database() = 'custom_2') THEN
            UPDATE entities set business_id = 'org_custom_2';
        END IF;
    END $$;
    DO $$
    BEGIN
        IF (SELECT current_database() = 'custom_3') THEN
            UPDATE entities set business_id = 'org_custom_3';
        END IF;
    END $$;

results matching ""

    No results matching ""