<?php
+require_once(__DIR__."/lib/RelaxNgImportAgapeAnnotation.class.php");
+require_once(__DIR__."/lib/GenerateXMLFromAnnotedRelaxNG.class.php");
+
+require_once(__DIR__."/lib/AnnotationWrapper.class.php");
+require_once(__DIR__."/lib/GenerateBordereauSEDA.class.php");
+require_once(__DIR__."/lib/GenerateBordereauSEDA.class.php");
+require_once(__DIR__."/lib/SedaValidation.class.php");
+
+
class SedaNG extends Connecteur {
/** @var DonneesFormulaire */
$this->connecteurConfig = $connecteurConfig;
}
- public function test(){
- //$this->generateFromSchema($this->connecteurConfig->getFilePath('schema_xml'));
+ public function getBordereau(){
+ $relax_ng_path = $this->connecteurConfig->getFilePath('schema_rng');
+ $agape_file_path = $this->connecteurConfig->getFilePath('profil_agape');
+
+ $relaxNGImportAgapeAnnotation = new RelaxNgImportAgapeAnnotation();
+ $relaxNG_with_annotation = $relaxNGImportAgapeAnnotation->importAnnotation($relax_ng_path, $agape_file_path);
+
+ $generateXMLFromAnnotedRelaxNG = new GenerateXMLFromAnnotedRelaxNG();
+ $bordereau_seda_with_annotation = $generateXMLFromAnnotedRelaxNG->generateFromRelaxNGString($relaxNG_with_annotation);
+
+ $annotationWrapper = new AnnotationWrapper();
+ $generateBordereauSEDA = new GenerateBordereauSEDA();
+ $xml = $generateBordereauSEDA->generate($bordereau_seda_with_annotation, $annotationWrapper);
+
+ return $xml;
+ }
+
+ public function validateBordereau($bordereau_content){
+ $relax_ng_path = $this->connecteurConfig->getFilePath('schema_rng');
+ $sedaValidation = new SedaValidation();
+ if (! $sedaValidation->validateRelaxNG($bordereau_content, $relax_ng_path)) {
+ $this->last_validation_error = $sedaValidation->getLastErrors();
+ throw new Exception("Erreur lors de la validation du bordereau (validation du schéma RelaxNG)", $sedaValidation);
+ }
+
+ if (! $sedaValidation->validateSEDA($bordereau_content)){
+ $this->last_validation_error = $sedaValidation->getLastErrors();
+ throw new Exception("Erreur lors de la validation du bordereau (validation du schéma SEDA)", $sedaValidation);
+ }
+ return true;
}
public function validateFromRelaxNG($xml_content,$shema_path){
--- /dev/null
+<?php
+
+class SedaNGConnecteurInfo extends ChoiceActionExecutor {
+
+ public function go(){
+
+
+ }
+
+ public function display() {
+
+
+
+ $this->renderPage("Propriété du connecteur",__DIR__."/../template/SedaNGConnecteurProperties.php");
+ }
+
+ public function displayAPI() {
+
+ }
+
+}
\ No newline at end of file
public function go(){
/** @var SedaNG $sedaNG */
$sedaNG = $this->getMyConnecteur();
- return $sedaNG->test();
+
+ header("Content-type: text/xml");
+ header("Content-disposition: inline; filename=bordereau.xml");
+
+ echo $sedaNG->getBordereau();
+ exit;
}
}
\ No newline at end of file
--- /dev/null
+<?php
+
+class SedaNGValidationTest extends ActionExecutor {
+
+
+ public function go(){
+
+ /** @var SedaNG $sedaNG */
+ $sedaNG = $this->getMyConnecteur();
+
+ header("Content-type: text/xml");
+ header("Content-disposition: inline; filename=bordereau.xml");
+
+ $bordereau = $sedaNG->getBordereau();
+
+ $is_valide = $sedaNG->validateBordereau($bordereau);
+
+ if ($is_valide){
+ $this->setLastMessage("Le bordereau généré est valide");
+ return true;
+ }
+
+
+
+
+ }
+}
\ No newline at end of file
name: Bordereau SEDA NG
description: |
- Permet de générer des bordereaux SEDA avec un fichier relaxNG
+ Permet de générer des bordereaux SEDA avec un fichier relaxNG
type: seda_ng
formulaire:
-
- onglet:
- schema_xml:
- name: Schéma XML
- type: file
-
+ onglet:
+ schema_rng:
+ name: Schéma RNG
+ type: file
+ profil_agape:
+ name: Fichier de profil Agape
+ type: file
+ connecteur_info:
+ name: Connecteur info
+ link_name : propriétés du connecteur
+ type: externalData
+ choice-action: connecteur_info
action:
- test-generate-bordereau:
- name: Tester la génération d'un bordereau
- action-class: SedaNGTEstBordereau
\ No newline at end of file
+
+ test-generate-bordereau:
+ name: Tester la génération d'un bordereau
+ action-class: SedaNGTEstBordereau
+ test-validate-bordereau:
+ name: Valider le bordereau de test
+ action-class: SedaNGValidationTest
+ connecteur_info:
+ action-class: SedaNGConnecteurInfo
+ rule:
+ role_id_e: no-role
<?php
+class AnnotationReturn {
+
+ const EMPTY_RETURN = "empty";
+ const STRING = "string";
+ const XML_REPLACE = "xml_replace";
+
+ public $type;
+ public $string;
+
+}
+
class AnnotationWrapper {
+
public function wrap($string){
if (preg_match("#{{pastell:now}}#",$string)){
- return date("c");
+ $return = new AnnotationReturn();
+ $return->type = AnnotationReturn::STRING;
+ $return->string = date("c");
+ return $return;
}
if (preg_match("#{{pastell:string:(.*)}}#",$string,$matches)){
- return $matches[1];
+ $return = new AnnotationReturn();
+ $return->type = AnnotationReturn::STRING;
+ $return->string = $matches[1];
+ return $return;
+ }
+ if (preg_match("#{{pastell:integrity}}#",$string,$matches)){
+ $return = new AnnotationReturn();
+ $return->type = AnnotationReturn::XML_REPLACE;
+ $return->string = "<Integrity><Contains algorithme=\"http://www.w3.org/2001/04/xmlenc#sha256\">5f330f324ee15d9a043381750c29a2fb484ef10803ef20d26a8dc5e50a22a77c</Contains><UnitIdentifier>pes_aller.xml</UnitIdentifier></Integrity><Integrity><Contains algorithme=\"http://www.w3.org/2001/04/xmlenc#sha256\">3101c90cebbe6136c118e369c839aa452ae1893056eb7cd84ef4420b596642b5</Contains><UnitIdentifier>pes_acquit.xml</UnitIdentifier></Integrity>";
+ return $return;
}
- return "";
-
+ $return = new AnnotationReturn();
+ $return->type = AnnotationReturn::EMPTY_RETURN;
+ $return->string = "";
+ return $return;
}
}
\ No newline at end of file
+++ /dev/null
-<?php
-
-class BordereauImportAgapeAnnotation {
-
- const XSD_SHEMA = "http://www.w3.org/2001/XMLSchema";
-
- /** @var AnnotationWrapper */
- private $annonationWrapper;
-
- public function __construct(AnnotationWrapper $annotationWrapper) {
- $this->annonationWrapper = $annotationWrapper;
- }
-
- public function import($bordereau_content, $agape_content){
- $bordereau = simplexml_load_string($bordereau_content);
- $agape = simplexml_load_string($agape_content);
-
- /** @var SimpleXMLElement $first_element */
- $first_element = $agape->children(self::XSD_SHEMA)->{'element'};
- $this->validationWalk($bordereau,$first_element);
- return $bordereau->asXML();
- }
-
- private function validationWalk(SimpleXMLElement $bordereau_node,SimpleXMLElement $agape_node){
- $agape_element_name = $agape_node->attributes()->{'name'};
- $bordereau_element_name = $bordereau_node->getName();
- if ($bordereau_element_name != $agape_element_name){
- throw new Exception("Element {$agape_element_name} not found. {$bordereau_element_name} found instead");
- }
-
- $children = $bordereau_node->children();
- /** @var SimpleXMLElement $child */
- foreach($children as $child){
- $node_name = $child->getName();
- $agape_child_node = $agape_node->xpath("xsd:element[@name='$node_name']");
- $result = false;
- foreach($agape_child_node as $agape_child){
- try {
- $this->validationWalk($child, $agape_child);
- $result = true;
- break;
- } catch(Exception $e){}
- }
- if (! $result){
- throw new Exception("Element {$node_name} can't be validated against Agape Schema");
- }
- }
- $annotation = $agape_node->xpath("xsd:annotation");
- if ($annotation) {
- //TODO il faut juste ajouter un noeud texte, sinon, ca marche pas...
- //$bordereau_node->
- $bordereau_node->{0} = $this->annonationWrapper->wrap((string) $annotation[0]);
- }
- }
-
-}
\ No newline at end of file
$xpath->registerNamespace("pastell", RelaxNgImportAgapeAnnotation::PASTELL_ANNOTATION_NS);
$annotation_list = $xpath->query("//pastell:annotation");
+ $nodeToRemove = array();
+ $nodeToReplace = array();
/** @var DOMElement $annotation */
foreach($annotation_list as $annotation){
- $content = $annotationWrapper->wrap((string) $annotation->nodeValue);
- $annotation->parentNode->nodeValue = $content;
+
+ $annotationReturn = $annotationWrapper->wrap((string) $annotation->nodeValue);
+ if ($annotationReturn->type == AnnotationReturn::STRING){
+ $annotation->parentNode->nodeValue = $annotationReturn->string;
+ } elseif ($annotationReturn->type == AnnotationReturn::XML_REPLACE){
+ $nodeToReplace[] = array($annotation->parentNode,$annotationReturn->string);
+ } elseif ($annotationReturn->type == AnnotationReturn::EMPTY_RETURN){
+ $nodeToRemove[] = $annotation;
+ } else {
+ throw new Exception("annotationReturn inconnu");
+ }
+
+ }
+ /** @var DOMElement $node */
+ foreach($nodeToRemove as $node){
+ $node->parentNode->removeChild($node);
+ }
+ foreach($nodeToReplace as $node_info){
+ $fragment = $dom->createDocumentFragment();
+ $fragment->appendXML($node_info[1]);
+ $node = $node_info[0];
+ $node->parentNode->replaceChild($fragment,$node);
}
- return $dom->saveXML();
+ return $dom->saveXML();
}
}
\ No newline at end of file
<?php
+require_once(__DIR__."/GenerateXMLFromRelaxNG.class.php");
class GenerateXMLFromAnnotedRelaxNG extends GenerateXMLFromRelaxNg {
protected function getElementNode(SimpleXMLElement $element,DOMNode $domNodeResult){
$element_name = $element->attributes()->{'name'};
- $domNode = $this->domDocument->createElementNS($this->domResultNamespace,$element_name);
+ if (! $element_name){
+ return;
+ }
+ $domNode = $this->domDocument->createElementNS($this->domResultNamespace, $element_name);
$domNodeResult->appendChild($domNode);
$this->walkChildren($element,$domNode);
}
}
protected function getDataNode(SimpleXMLElement $element,DOMNode $domNodeResult){
- $domNode = $this->domDocument->createTextNode(self::STRING_MOCK);
- $domNodeResult->appendChild($domNode);
+ /*$domNode = $this->domDocument->createTextNode(self::STRING_MOCK);
+ $domNodeResult->appendChild($domNode);*/
}
protected function getAttributeNode(SimpleXMLElement $element,DOMNode $domNodeResult){
}
protected function getZeroOrMoreNode(SimpleXMLElement $element,DOMNode $domNodeResult){
- //nothing for the moment
+ $this->walkChildren($element,$domNodeResult);
}
protected function getOptionalNode(SimpleXMLElement $element,DOMNode $domNodeResult){
- //nothing for the moment
+ //on ne traite pas le cas des élements "optionnel" => ils sont soit interdit soit obligatoire
+ //$this->walkChildren($element,$domNodeResult);
}
}
\ No newline at end of file
public function importAnnotation($relaxNG_path, $agape_file_path){
+ libxml_use_internal_errors(true);
$agape = simplexml_load_file($agape_file_path);
+
+ if (! $agape){
+ throw new Exception("Impossible de lire le fichier $relaxNG_path");
+ }
+
/** @var SimpleXMLElement $first_agape_children */
$first_agape_children = $agape->children(self::XSD_SHEMA)->{'element'};
--- /dev/null
+
+<form action="connecteur/external-data-controler.php" method="post">
+
+ <input type="hidden" name="id_e" value="<?php echo $id_e ?>"/>
+ <input type="hidden" name="id_ce" value="<?php echo $id_ce ?>"/>
+ <input type="hidden" name="field" value="<?php echo $field ?>" />
+ <input type="hidden" name="go" value="true"/>
+
+ Test12: <input name="test1"/>
+
+ <input type="submit">
+</form>
\ No newline at end of file
require_once __DIR__."/../connecteur/seda-ng/lib/GenerateXMLFromRelaxNg.class.php";
require_once __DIR__."/../connecteur/seda-ng/lib/GenerateXMLFromAnnotedRelaxNg.class.php";
-require_once __DIR__."/../connecteur/seda-ng/lib/BordereauImportAgapeAnnotation.class.php";
require_once __DIR__."/../connecteur/seda-ng/lib/SedaValidation.class.php";
require_once __DIR__."/../connecteur/seda-ng/lib/AnnotationWrapper.class.php";
require_once __DIR__."/../connecteur/seda-ng/lib/RelaxNgImportAgapeAnnotation.class.php";
}
private function assertAnnotation($expeted_output,$input){
- $this->assertEquals($expeted_output,$this->annotationWrapper->wrap($input));
+ $this->assertEquals($expeted_output,$this->annotationWrapper->wrap($input)->string);
}
public function testWrap(){
}
public function testDateNow(){
- $date = $this->annotationWrapper->wrap("{{pastell:now}}");
+ $date = $this->annotationWrapper->wrap("{{pastell:now}}")->string;
$this->assertRegExp("#^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}#",$date); //2012-04-04T16:05:30Z
}
+++ /dev/null
-<?php
-
-class BordereauImportAgapeAnnotationTest extends PHPUnit_Framework_TestCase {
-
- /** @var BordereauImportAgapeAnnotation */
- private $agapeValidation;
-
- protected function setUp(){
- $annotationWrapper = new AnnotationWrapper() ;
- $this->agapeValidation = new BordereauImportAgapeAnnotation($annotationWrapper);
- }
-
- public function generateXML($xml_string){
- $xml = simplexml_load_string($xml_string);
- $xml->addAttribute('xmlns',"fr:gouv:ae:archive:draft:standard_echange_v0.2");
- return $xml->asXML();
- }
-
- public function generateAgape($xml_string){
- $xml = "<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" attributeFormDefault=\"unqualified\" elementFormDefault=\"qualified\" targetNamespace=\"fr:gouv:ae:archive:draft:standard_echange_v0.2\" version=\"1.1\">";
- $xml .= $xml_string;
- $xml .= "</xsd:schema>";
- return simplexml_load_string($xml)->asXML();
- }
-
- public function testValidateFirstElement(){
- $xml = $this->generateXML("<ArchiveTransfer/>");
- $agape = $this->generateAgape("<xsd:element name=\"ArchiveTransfer\"/>");
- $this->assertEquals($xml,$this->agapeValidation->import($xml,$agape));
- }
-
- public function testValidateFirstElementFailed(){
- $xml = $this->generateXML("<ArchiveTransfer2/>");
- $agape = $this->generateAgape("<xsd:element name=\"ArchiveTransfer\"/>");
- $this->setExpectedException("Exception","Element ArchiveTransfer not found. ArchiveTransfer2 found instead");
- $this->agapeValidation->import($xml,$agape);
- }
-
- public function testValidateNestedElement(){
- $xml = $this->generateXML("<ArchiveTransfer><Comment/></ArchiveTransfer>");
- $agape = $this->generateAgape("<xsd:element name=\"ArchiveTransfer\"><xsd:element name='Comment'/></xsd:element>");
- $this->assertEquals($xml,$this->agapeValidation->import($xml,$agape));
- }
-
- public function testValidateNestedElementFailed(){
- $xml = $this->generateXML("<ArchiveTransfer><Toto/></ArchiveTransfer>");
- $agape = $this->generateAgape("<xsd:element name=\"ArchiveTransfer\"><xsd:element name='Comment'/></xsd:element>");
- $this->setExpectedException("Exception","Element Toto can't be validated against Agape Schema");
- $this->agapeValidation->import($xml,$agape);
- }
-
- public function testValidateNestedNested(){
- $xml = $this->generateXML("<ArchiveTransfer><TransferringAgency><Description/></TransferringAgency></ArchiveTransfer>");
- $agape = $this->generateAgape("<xsd:element name=\"ArchiveTransfer\"><xsd:element name='TransferringAgency'><xsd:element name='Description'/></xsd:element></xsd:element>");
- $this->assertEquals($xml,$this->agapeValidation->import($xml,$agape));
- }
-
- public function testAddAnnotation(){
- $xml = $this->generateXML("<ArchiveTransfer></ArchiveTransfer>");
- $agape = $this->generateAgape("<xsd:element name=\"ArchiveTransfer\"><xsd:annotation>{{pastell:string:Test annotation}}</xsd:annotation></xsd:element>");
- $this->assertRegExp("#Test annotation#",$this->agapeValidation->import($xml,$agape));
- }
-
- public function testValidate(){
- $relaxNgGenerateXML = new GenerateXMLFromRelaxNg();
- $relaxng_path = __DIR__."/../../../fixtures/EMEG_PROFIL_PES_0002_v1_schema.rng";
- $xml = $relaxNgGenerateXML->generateFromRelaxNG($relaxng_path);
- $agape_content = file_get_contents(__DIR__."/../../../fixtures/EMEG_PROFIL_PES_0002_v1.5.xml");
- $result = $this->agapeValidation->import($xml,$agape_content);
- $this->assertRegExp("#ArchiveTransfer#",$result);
-
- $sedaValidation = new SedaValidation();
- $sedaValidation->validateSEDA($result);
- //TODO a supprimé!
- /*print_r($sedaValidation->getLastErrors());
- echo $result;*/
- }
-}
\ No newline at end of file
public function testGenerate() {
+ $relax_ng_path = __DIR__ . "/../../../fixtures/EMEG_PROFIL_PES_0002_v1_schema.rng";
+
$relaxNGImportAgapeAnnotation = new RelaxNgImportAgapeAnnotation();
$relaxNG_with_annotation = $relaxNGImportAgapeAnnotation->importAnnotation(
- __DIR__ . "/../../../fixtures/EMEG_PROFIL_PES_0002_v1_schema.rng",
+ $relax_ng_path,
__DIR__ . "/../../../fixtures/EMEG_PROFIL_PES_0002_v1.5.xml"
);
$bordereau_seda_with_annotation = $generateXMLFromAnnotedRelaxNG->generateFromRelaxNGString($relaxNG_with_annotation);
+ //print_r($bordereau_seda_with_annotation);
+
$annotationWrapper = new AnnotationWrapper();
$generateBordereauSEDA = new GenerateBordereauSEDA();
$xml = $generateBordereauSEDA->generate($bordereau_seda_with_annotation, $annotationWrapper);
-
+
print_r($xml);
+ $sedaValidation = new SedaValidation();
+ $is_valide = $sedaValidation->validateRelaxNG($xml, $relax_ng_path);
+ if (! $is_valide){
+ print_r($sedaValidation->getLastErrors());
+ }
+ $this->assertTrue($is_valide);
+
+ $is_valide = $sedaValidation->validateSEDA($xml);
+
+ if (! $is_valide){
+ print_r($sedaValidation->getLastErrors());
+ }
+
+ $this->assertTrue($is_valide);
+
+
}
public function testDataElement(){
$domElement = $this->getDocumentElementFromTest("TestDataElement");
- $this->assertEquals(GenerateXMLFromRelaxNg::STRING_MOCK,$domElement->nodeValue);
+ $this->assertEmpty($domElement->nodeValue);
}
public function testAttributeElement(){
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="fr:gouv:ae:archive:draft:standard_echange_v0.2" xmlns:qdt="fr:gouv:ae:archive:draft:standard_echange_v0.2:QualifiedDataType:1" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:6" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="fr:gouv:ae:archive:draft:standard_echange_v0.2" version="1.1">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="fr:gouv:ae:archive:draft:standard_echange_v0.2" xmlns:qdt="fr:gouv:ae:archive:draft:standard_echange_v0.2:QualifiedDataType:1" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:6" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="fr:gouv:ae:archive:draft:standard_echange_v0.2" version="1.1">
<xsd:element name="ArchiveTransfer">
<xsd:element fixed="Transfert des flux comptables (données et pièces justificatives conformes au PES V2) transmis à HELIOS via le tiers de télétransmission mutualisé Mégalis Bretagne (TdT Mégalis solution S²LOW)" minOccurs="1" name="Comment" type="udt:TextType">
<xsd:attribute name="languageID" type="xsd:language" use="prohibited"/>
</xsd:element>
</xsd:element>
<xsd:element maxOccurs="unbounded" minOccurs="1" name="Integrity" type="HashCodeType">
- <xsd:annotation>Empreinte du transfert pour contrôler l'intégrité <BR> Calcul SHA1 <BR> EncodingCode : "http://www.w3.org/2000/09/xmldsig#sha1"</xsd:annotation>
+ <xsd:annotation>{{pastell:integrity}} Empreinte du transfert pour contrôler l'intégrité <BR> Calcul SHA1 <BR> EncodingCode : "http://www.w3.org/2000/09/xmldsig#sha1"</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" name="Contains" type="ArchiveType">
<xsd:element fixed="EMEG_ACCORD_PES_0001" minOccurs="1" name="ArchivalAgreement" type="qdt:ArchivesIDType">
<xsd:attribute fixed="edition 2009" name="listVersionID" type="xsd:token" use="required"/>
</xsd:element>
<xsd:element minOccurs="1" name="LatestDate" type="udt:DateType">
- <xsd:annotation>Date de récupération du PES ACK intégration au format ISO 8601</xsd:annotation>
+ <xsd:annotation>Date de récupération du PES ACK intégration au format ISO 8601 {{pastell:string:2016-02-18}}</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="1" name="OldestDate" type="udt:DateType">
- <xsd:annotation>Date de génération du flux PES au format ISO 8601</xsd:annotation>
+ <xsd:annotation>Date de génération du flux PES au format ISO 8601 {{pastell:string:2016-03-15}}</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Size" type="udt:MeasureType">
<xsd:attribute fixed="2P" name="unitCode" type="clm6Recommendation20:MeasurementUnitCommonCodeContentType" use="required"/>
- <xsd:annotation>Taille totale de l'Archive (données envoyées pour archivage) en ko.</xsd:annotation>
+ <xsd:annotation>Taille totale de l'Archive (données envoyées pour archivage) en ko. {{pastell:string:12}}</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="OriginatingAgency" type="OrganizationType">
<xsd:annotation>exemple : Direction des finances, Direction de l'action sociale et de la santé...</xsd:annotation>
</xsd:element>
<xsd:element fixed="P10Y" name="Duration" type="qdt:ArchivesDurationType"/>
<xsd:element name="StartDate" type="udt:DateType">
- <xsd:annotation>Date de récupération du PES ACK Intégration par le tiers de télétransmission au format ISO 8601</xsd:annotation>
+ <xsd:annotation>Date de récupération du PES ACK Intégration par le tiers de télétransmission au format ISO 8601 {{pastell:string:2015-12-02}}</xsd:annotation>
</xsd:element>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="AccessRestriction" type="AccessRestrictionRulesType">
<xsd:attribute fixed="edition 2009" name="listVersionID" type="xsd:token" use="required"/>
</xsd:element>
<xsd:element name="StartDate" type="udt:DateType">
- <xsd:annotation>[DteStr]</xsd:annotation>
+ <xsd:annotation>{{pastell:string:2016-02-01}}</xsd:annotation>
</xsd:element>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Contains" type="ArchiveObjectType">
</xsd:element>
<xsd:element fixed="false" minOccurs="1" name="Copy" type="udt:IndicatorType"/>
<xsd:element minOccurs="1" name="Creation" type="udt:DateTimeType">
- <xsd:annotation>Date de mandatement au format ISO 8601 [DteStr]</xsd:annotation>
+ <xsd:annotation>Date de mandatement au format ISO 8601 [DteStr] {{pastell:now}}</xsd:annotation>
</xsd:element>
<xsd:element fixed="Flux PES" minOccurs="1" name="Description" type="udt:TextType">
<xsd:attribute name="languageID" type="xsd:language" use="prohibited"/>
</xsd:element>
<xsd:element fixed="false" minOccurs="1" name="Copy" type="udt:IndicatorType"/>
<xsd:element minOccurs="1" name="Creation" type="udt:DateTimeType">
- <xsd:annotation>Date de génération de l'accusé de réception ou de non réception au format ISO 8601 [DteStr] du fichier d'acquittement</xsd:annotation>
+ <xsd:annotation>Date de génération de l'accusé de réception ou de non réception au format ISO 8601 [DteStr] du fichier d'acquittement {{pastell:now}}</xsd:annotation>
</xsd:element>
<xsd:element fixed="PES ACK" minOccurs="1" name="Description" type="udt:TextType">
<xsd:attribute name="languageID" type="xsd:language" use="prohibited"/>
</xsd:element>
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
</xsd:element>
-</xsd:schema>
+</xsd:schema>
\ No newline at end of file