Skip to content

Faciliter le suivi du budget pour les acquéreurs (bidouille SIGB)

13/05/2011

Préambule : débats intérieurs

L’utilisation d’API (ces trucs qui vous font apparaître une géolocalisation Google Maps sur les exemplaires Sudoc, par exemple) c’est très bien, l’usage des API pour rendre les catalogues plus ergonomiques ou simplement plus normaux attrayants, c’est une très bonne démarche. Mais pourquoi limiter leur utilisation aux lecteurs-internautes ? Il y a des outils internes qui pourraient aussi en bénéficier.

A ce stade, j’en suis encore aux expérimentations : ce qui améliorerait vraiment la vie des collègues, je ne l’ai pas encore trouvé. Mais c’est en testant qu’on devient testeron…

Donc je suis un peu dans la même démarche que Symac dans ce billet sur les QR Codes : on s’approprie un outil, ses techniques, son langage (ses limites aussi), sur une utilisation peut-être non pertinente, avec l’idée que, le jour où un besoin se fera sentir, on saura mieux faire l’association avec l’outil testé quelques mois plus tôt sur tout autre chose.

Bref

Dans le SIGB Aleph, un acquéreur peut visualiser sa balance budgétaire assez facilement : s’affiche un beau tableau qui liste

  • la somme qui lui a été allouée
  • la somme qu’il a déjà dépensée
  • la somme engagée (les commandes en cours, essentiellement)
  • la somme encore disponible
  • et d’autres montants ou calculs, sommes et pourcentages divers

donc une liste de chiffres extrêmement utile, mais qui nécessite toujours (à mon sens) pas mal de concentration pour comprendre où on en est.

La manière dont Aleph affiche ces informations dans un onglet « Balance budgétaire » ne permet pas d’y ajouter des graphiques dynamiques (façon Excel) sur la base de ces chiffres : ce sont des pages HTML générées à partir d’un code « maison », qui dispose de peu de fonctionnalités, et pas celles de générer une URL un peu complexe.

En revanche à côté de cette balance, l’acquéreur dispose d’un bouton , pour afficher les mêmes informations en pleine page. Ce bouton génère lui aussi une page HTML, mais en exploitant des feuilles XSL, donc permettant beaucoup plus de choses.

Les API Google Charts

Google fournit l’outil suivant : on structure une URL contenant des données chiffrées, et l’URL obtenue est en fait celle d’un graphique (image au format PNG).

Vous pouvez commencer par cette page pour voir rapidement des cas concrets.

Exemple : l’URL https://chart.googleapis.com/chart?chs=400×150&chd=t:60,40&cht=p3&chl=Personnels|Etudiants comporte les éléments suivants

  • la racine de l’API : https://charts.googleapis.com/chart
  • le paramètre chs, qui donne les dimensions de l’image (largeur X hauteur)
  • le paramètre chd (chart datas) fournit les données à traiter : 60% et 40%
  • le paramètre cht (chart type) précise le type de graphique : « p » signifie pie (« tarte », ou, en bon français, « camembert ») et « p3 » désigne le camembert en 3D
  • le paramètre chl (chart legend) indique les catégories correspondant aux données, à indiquer dans le même ordre évidemment.

D’autres paramètres existent, permettant par exemple de préciser la couleur (chaque morceau du camembert se verra attribuer une couleur, dans le même ordre que leur ordre d’apparition après le paramètre chart datas), etc.
Certains paramètres dépendent évidemment du type (cht) choisi, parmi la liste des codes de types fournis par l’API de Google.

Le résultat est :

camembert utilisant une API Google Charts

(vous pouvez aussi cliquer sur l’image).

L’objectif est donc de générer l’URL souhaitée sur le même modèle, en récupérant les différentes variables importantes d’un budget.

Résumé budgétaire dans Aleph

Je suis allé modifier le fichier budget-information.xsl (qui est caché derrière ce fameux bouton ). A la fin du template <xsl:template name="section-01"/>, j’ai collé le code suivant :

<update>J’ai intégré la valeur de la somme facturée. On a donc : les sommes : disponible, engagée, facturée, payée</update>

  <xsl:variable name="free_pourcent">
<xsl:choose>
<xsl:when test="contains(./free-balance, '(')">0</xsl:when>
<xsl:otherwise>
<xsl:value-of select="(./free-balance*100) div (./initial-allocation + ./allocation +  ./transferred + ./carry-over)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="encumbrances_pourcent">
<xsl:choose>
<xsl:when test="./encumbrances= 0">0</xsl:when>
<xsl:otherwise>
<xsl:value-of select="(number(substring-before(substring-after(./encumbrances, '('), ')'))*100) div (./initial-allocation + ./allocation +  ./transferred + ./carry-over)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="invoices_pourcent">
<xsl:choose>
<xsl:when test="./invoices= 0">0</xsl:when>
<xsl:otherwise>
<xsl:value-of select="(number(substring-before(substring-after(./invoices, '('), ')'))*100) div (./initial-allocation + ./allocation +  ./transferred + ./carry-over)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="payments_pourcent">
<xsl:choose>
<xsl:when test="./payments= 0">0</xsl:when>
<xsl:otherwise>
<xsl:value-of select="(number(substring-before(substring-after(./payments, '('), ')'))*100) div (./initial-allocation + ./allocation +  ./transferred + ./carry-over)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<img alt="Balance budgetaire">
<xsl:attribute name="src">https://chart.googleapis.com/chart?cht=p&amp;chd=t:<xsl:value-of select="$free_pourcent"/>,<xsl:value-of select="$encumbrances_pourcent"/>,<xsl:value-of select="$invoices_pourcent"/>,<xsl:value-of select="$payments_pourcent"/>&amp;chs=450x200&amp;chl=Disponible (<xsl:value-of select="./free-balance"/>)|Engagé -<xsl:value-of select="./encumbrances"/>|Facturé -<xsl:value-of select="./invoices"/>|Payé -<xsl:value-of select="./payments"/>&amp;chco=D8FFDE|FFE9D8|FF9084|BC6B62</xsl:attribute>
</img>

Et ça donne par exemple :

L’ensemble du camembert représente la somme initiale disponible.

Pour les couleurs, ce n’est pas encore ce qu’il y a de mieux (je ne suis pas graphiste, c’est un métier et ça se voit…), mais il me semble que ça « parle » tout de même assez bien à quelqu’un qui se demande s’il lui reste beaucoup d’argent dans son budget.
Soit dit en passant, la réponse est de toute façon claire : pour toute la France, les caisses sont vides, et donc « Non, il ne reste pas beaucoup d’argent dans ton budget »

Le code XSL utilisé est un peu complexe, parce qu’il me faut traiter des données particulières : les données négatives (dépensées) sont exprimées entre parenthèses (et non précédées du signe -), et pour faire un camembert il faut fournir à Google des pourcentages (un ensemble de chiffres dont la somme = 100), qui ne sont pas fournis par le système. Ensuite, on n’est pas à l’abri d’aberrations : si j’engage plus d’argent que je n’en dispose, par exemple (parce que je sais que sur l’ensemble des commandes passées, 5-10% n’arriveront jamais), on arrive à 114% engagés+dépensés, donc -14% disponible. Va donc exprimer ça dans un camembert.


(et par fainéantise, je n’ai pas pris en compte les sommes « facturées » mais non encore payées, parce qu’une somme facturée, dans notre workflow, est aussitôt – ou presque- mise en statut payé)

Conclusionclés

Si j’étais vous, je me dirais que ça fait un peu gadget. Et je suis d’accord avec moi me mettant à votre place. Mais plein de petits gadgets comme ça, c’est un peu comme la clé de voiture avec fermeture centralisée à distance : C’est un petit plus qui ne change rien aux défauts et qualités de la voiture, et au début on a dû se dire que c’était un luxe superfétatoire — mais comment s’en passer aujourd’hui ?

Vous vous dites aussi que vos équipes ont autre chose à faire que lire la doc Google d’un côté, la doc SIGB de l’autre, pour effectuer ensuite ce genre de tests. Précisément : c’est bien pour vous l’éviter (au moins en partie) que ce blog existe !

————

PS : je crée la catégorie « Just Do It », parce que ça le vaut bien.

5 commentaires
  1. MxSz permalink
    13/05/2011 10:35

    Personne ne t’a encore écrit « merci ! » pour ce billet ?

    Alors c’est fait !

  2. 13/05/2011 10:39

    @MxSz : you’re welcome !

  3. 18/05/2011 13:22

    pour que tu ne prennes pas la grosse tête (et puis je profite des Jabes pour tirer dans le dos ;p je vais jouer au pénible: tu n’en as pas marre de proposer des trucs clé en main qui ne sont finalement pas mis en place par-ce que oui mais bon le responsable n’a pas le temps et puis s’en fout un peu de ces trucs de djeun’z pas très catholiques…? (sur ce je m’en vais manger une cerise…)

  4. 18/05/2011 18:30

    @shaun : je peux répondre simplement par « non je n’en ai pas marre » ? ou bien il te faut une réponse (très) développée, qui risque alors d’être (très) longue ? #joker😉

Trackbacks

  1. Vers la fin du RSS ? « Bibliothèques [reloaded]

Les commentaires sont fermés.

%d blogueurs aiment cette page :