Construction de chronologies dans des règles CER

Généralement, les données chronologiques sont créées en dehors des règles par les clients de CER et utilisées pour remplir la valeur d'un attribut CER à l'aide du mécanisme de spécification.

Toutefois, CER contient également des expressions permettant de créer des chronologies directement dans des règles CER :

Chronologie et intervalle

Vous pouvez créer une chronologie de manière native dans des règles CER en créant d'abord explicitement une liste d'intervalles, puis en utilisant cette liste pour créer une chronologie.

Dans la pratique, ces chronologies fixes tendent à être utiles uniquement comme mesure temporaire, lorsque vous étoffez votre jeu de règles.

Figure 1. Exemple d'utilisation de Timeline et d'Interval pour créer une chronologie
<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_Timeline"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">

  <Class name="CreateTimelines">

    <!-- Cet exemple utilise <initialvalue> pour définir la valeur valide
         à partir du début de la durée. -->
    <Attribute name="aNumberTimeline">
      <type>
        <javaclass name="curam.creole.value.Timeline">
          <javaclass name="Number"/>
        </javaclass>
      </type>
      <derivation>
        <Timeline>
          <intervaltype>
            <javaclass name="Number"/>
          </intervaltype>
          <!-- Valeur de début de durée -->
          <initialvalue>
            <Number value="0"/>
          </initialvalue>
          <!-- Intervalles restants -->
          <intervals>
            <fixedlist>
              <listof>
                <javaclass name="curam.creole.value.Interval">
                  <javaclass name="Number"/>
                </javaclass>
              </listof>
              <members>
                <Interval>
                  <intervaltype>
                    <javaclass name="Number"/>
                  </intervaltype>
                  <start>
                    <Date value="2001-01-01"/>
                  </start>
                  <value>
                    <Number value="10000"/>
                  </value>
                </Interval>
                <Interval>
                  <intervaltype>
                    <javaclass name="Number"/>
                  </intervaltype>
                  <start>
                    <Date value="2004-12-01"/>
                  </start>
                  <value>
                    <Number value="12000"/>
                  </value>
                </Interval>

              </members>
            </fixedlist>

          </intervals>
        </Timeline>

      </derivation>
    </Attribute>


    <!-- Cet exemple n'utilise pas <initialvalue>. -->
    <Attribute name="aStringTimeline">
      <type>
        <javaclass name="curam.creole.value.Timeline">
          <javaclass name="String"/>
        </javaclass>
      </type>
      <derivation>
        <Timeline>
          <intervaltype>
            <javaclass name="String"/>
          </intervaltype>

          <!-- La liste d'intervalles doit contenir une valeur valide à partir de
             la date nulle (début de durée), sinon une erreur
             se produit lors de l'exécution, si cette expression est évaluée. -->
          <intervals>
            <fixedlist>
              <listof>
                <javaclass name="curam.creole.value.Interval">
                  <javaclass name="String"/>
                </javaclass>
              </listof>
              <members>
                <Interval>
                  <intervaltype>
                    <javaclass name="String"/>
                  </intervaltype>
                  <start>
                    <!-- "à partir du début de la durée" -->
                    <null/>
                  </start>
                  <value>
                    <String value="Start of time string"/>
                  </value>
                </Interval>
                <Interval>
                  <intervaltype>
                    <javaclass name="String"/>
                  </intervaltype>
                  <start>
                    <Date value="2001-01-01"/>
                  </start>
                  <value>
                    <String value="2001-only String"/>
                  </value>
                </Interval>
                <Interval>
                  <intervaltype>
                    <javaclass name="String"/>
                  </intervaltype>
                  <start>
                    <Date value="2002-01-01"/>
                  </start>
                  <value>
                    <String value="2002-onwards String"/>
                  </value>
                </Interval>
              </members>
            </fixedlist>
          </intervals>
        </Timeline>
      </derivation>
    </Attribute>
  </Class>
</RuleSet>

existencetimeline

Certains objets métier possèdent des dates de début et de fin naturelles, qui spécifient une période pour laquelle l'objet métier exists. L'une ou les deux dates de début et de fin peuvent être facultatives, auquel cas la période d'existence de l'objet métier est à durée indéterminée.

Exemples :

Les dates de début et de fin d'un objet métier peuvent être utilisées pour diviser une durée en ces trois périodes (ou moins, si la date de début ou la date de fin est vide) :

Il peut souvent s'avérer utile d'attribuer une valeur différente à chacune de ces périodes pour un objet métier, et de créer une chronologie à partir de ces valeurs. CER contient une expression existencetimeline permettant de créer une chronologie de valeurs de pré-existence/existence/post-existence basée sur des dates de début et de fin facultatives.

Si la date de début n'existe pas, il n'y aura aucun intervalle de pré-existence dans la chronologie. Par exemple, si un actif ne comporte pas de date d'achat enregistrée, sa valeur effective s'applique à partir du début de la durée, sans période de valeur zéro.

Si la date de fin n'existe pas, il n'y aura aucun intervalle de post-existence dans la chronologie. Par exemple, si un actif ne comporte aucune date de vente, alors la valeur de cet actif est valable jusqu'à nouvel ordre (c'est-à-dire arbitrairement à long terme).

Voir Existence Timeline pour plus de détails sur la manière d'utiliser les chronologies d'existence dans l'éditeur CER.