%% -*-TeX-*-
 % ###################################################################
 %  Fred LaTeX Tools - a set of LaTeX tools to perform various tasks
 %  checksum = "26117 664 1986 22226"
 % 
 %  FILE: "paye.cls"
 %                                    created: 1999-09-02 12:25:15 
 %                                last update: 2001-01-23 08:52:12 
 %  Author: Fr\'{e}d\'{e}ric Boulanger
 %  E-mail: Frederic.Boulanger@supelec.fr
 %    mail: Sup\'{e}lec - Service Informatique
 %          Plateau de Moulon, 91192 Gif-sur-Yvette cedex, France
 %     www: http://wwwsi.supelec.fr/fb/fb.html
 %  
 % Copyright (c) 1999  Fr\'{e}d\'{e}ric Boulanger
 % 
 %  Description: 
 %    Une classe de document LaTeX permettant d'{\'e}diter des feuilles 
 %  de paye.
 %  
 %    A LaTeX document class to edit pay sheets.
 % 
 %  History
 % 
 %  modified   by  rev reason
 %  ---------- --- --- -----------
 %  1999-09-02 FBO 1.0 premi{\`e}re version
 %  1999-10-29 FBO 1.1 probl{\`e}mes d'accents (7 bits)
 %  2000-01-30 FBO 1.2 pay@nblignes n'est plus remis {\`a} z{\'e}ro
 %  2000-02-03 FBO 1.3 autorise l'{\'e}dition de plusieurs feuilles de paye
 % ###################################################################
 %%
\NeedsTeXFormat{LaTeX2e}
\newcommand*{\pay@classname}{paye}
\newcommand*{\pay@version}{2000/02/03 v1.3}
\ProvidesClass{\pay@classname}%
  [\pay@version\space (c) Frederic Boulanger^^J
   Feuilles de paye en LaTeX]
\RequirePackage{ifthen}
\DeclareOption{progress}{\setboolean{pay@progress}{true}}
\DeclareOption{noprogress}{\setboolean{pay@progress}{false}}
\DeclareOption{fpmessages}{\pay@tmptoks@a={}}
\DeclareOption{nofpmessages}{\pay@tmptoks@a={[nomessages]}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
%
\newboolean{pay@progress}
\newboolean{pay@percent}
\newboolean{pay@ingroup}
\newcounter{pay@nblignes}
\newcounter{pay@curligne}
\newcounter{pay@tmpcount}
\newtoks\pay@tmptoks@a
\newtoks\pay@tmptoks@b
\newtoks\pay@tmptoks@c
%
\ExecuteOptions{progress,nofpmessages}
\ProcessOptions\relax
%
\LoadClass{article}
\expandafter\RequirePackage\the\pay@tmptoks@a{fp}
\RequirePackage{tabularx}
\RequirePackage{hhlinex}
%
\setlength{\parindent}{0pt}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}
\setlength{\footskip}{0pt}
%
\pagestyle{empty}
%
% Commandes publiques
%
% D{\'e}finition de l'employeur. L'argument peut {\^e}tre compos{\'e}
% de plusieurs paragraphes. Il sera plac{\'e} dans une parbox de largeur 
% 60% de \textwidth.
\newcommand{\Employeur}[1]{\newcommand{\pay@employeur}{#1}}
%
% D{\'e}finition de l'employ{\'e}. L'argument peut {\^e}tre compos{\'e}
% de plusieurs paragraphes. Il sera plac{\'e} dans une parbox de largeur 
% 60% de \textwidth.
\newcommand{\Employe}[1]{\newcommand{\pay@employe}{#1}}
%
% Permet de choisir le nom symbolique des 6 colonnes de la feuille 
% de paye : base, taux salarial, cotisations salariales, taux 
% patronal, cotisations patronales, total. Par d{\'e}faut, ces noms sont :
% Base, TauxSal, CotSal, TauxPat, CotPat et Total.
\newcommand*{\SetColNames}[6]{%
  \renewcommand*{\pay@coli}{#1}%
  \renewcommand*{\pay@colii}{#2}%
  \renewcommand*{\pay@coliii}{#3}%
  \renewcommand*{\pay@coliv}{#4}%
  \renewcommand*{\pay@colv}{#5}%
  \renewcommand*{\pay@colvi}{#6}%
}
%
% Une commande permettant d'{\'e}viter l'usage de \def sans avoir de 
% probl{\`e}mes de red{\'e}finitions.
\newcommand*{\setvalue}[2]{\def#1{#2}}
%
% Ins{\`e}re une ligne blanche dans la feuille de paye
\newcommand*{\BlankLine}{\LignePaye{Blank}{}{}{}{}{}}
%
% Ins{\`e}re une ligne << normale >> dans la feuille de paye. Une ligne 
% normale est une ligne dans laquelle les colonnes cotisations sont 
% calcul{\'e}es en multipliant la base par le taux de cotisation.
% Le nom de la ligne permet de r{\'e}f{\'e}rencer les valeurs des diff{\'e}rentes 
% colonnes de cette ligne. Par exemple Secu.CotSal fera r{\'e}f{\'e}rence {\`a}
% la valeur de la colonne CotSal de la ligne nomm{\'e}e Secu.
% Le label de la ligne est le texte qui appara{\^\i}t sur la feuille de 
% paye pour identifier cette ligne.
% #1=nom, #2=label, #3=base #4=taux salarial, #5=taux patronal, #6=total
\newcommand*{\LignePaye}[6]{%
  \stepcounter{pay@nblignes}%
	\pay@newcmdname{pay@ligne\roman{pay@nblignes}}{#1}%
	\ifthenelse{\equal{#2}{}}{}{%
	  \pay@newcmdname{#1.Label}{#2}%
	}
	\ifthenelse{\equal{#3}{}}{}{%
	  \pay@FPupnname{#1.\pay@coli}{#3}%
	}
	\ifthenelse{\equal{#4}{}}{}{%
	  \pay@findpercent{#4}%
	  \pay@FPupnname{#1.\pay@colii}{\the\pay@tmptoks@a}%
	  \pay@FPmulname{#1.\pay@coliii}{#1.\pay@coli}{#1.\pay@colii}%
		\ifthenelse{\boolean{pay@percent}}{
		  \pay@FPdivCname{#1.\pay@coliii}{#1.\pay@coliii}%
	    \pay@newcmdname{#1.\pay@colii.percent}{\,\%}%
	  }{%
	    \pay@newcmdname{#1.\pay@colii.percent}{}%
		}%
	}
	\ifthenelse{\equal{#5}{}}{}{%
	  \pay@findpercent{#5}%
		\pay@FPupnname{#1.\pay@coliv}{\the\pay@tmptoks@a}%
		\pay@FPmulname{#1.\pay@colv}{#1.\pay@coli}{#1.\pay@coliv}%
		\ifthenelse{\boolean{pay@percent}}{
		  \pay@FPdivCname{#1.\pay@colv}{#1.\pay@colv}%
	    \pay@newcmdname{#1.\pay@coliv.percent}{\,\%}%
		}{%
		  \pay@newcmdname{#1.\pay@coliv.percent}{}%
		}
	}
	\ifthenelse{\equal{#6}{}}{}{%
	  \pay@FPupnname{#1.\pay@colvi}{#6}%
	}
}
%
% Ins{\`e}re une ligne personnelle, qui ne respecte pas le format
% habituel. Chaque ligne de la feuille de paye est une ligne d'un 
% environnement tabular, c'est donc sous cette forme qu'une ligne 
% personnelle est d{\'e}finie.
% Il est possible d'{\'e}valuer des commandes afin de rendre certaines 
% valeurs disponibles pour cette ligne.
% Les s{\'e}parateurs horizontaux (\hline, \cline etc) {\`a} placer avant et
% apr{\`e}s cette lignes peuvent aussi {\^e}tre indiqu{\'e}s.
% Dans la d{\'e}finition de la ligne du tabular, diff{\'e}rentes commandes 
% peuvent {\^e}tre utilis{\'e}es pour afficher une valeur num{\'e}rique ou sauter
% certaines colonnes (qui ne sont pas forc{\'e}ment r{\'e}alis{\'e}es avec une 
% seule colonne du tabular)
% #1=nom #2=commandes \`{a} \'{e}valuer 
% #3=separation avant #4=ligne du tabular #5=s\'{e}paration apr\`{e}s
\newcommand*{\LignePerso}[5]{%
  \stepcounter{pay@nblignes}%
	\pay@newcmdname{pay@ligne\roman{pay@nblignes}}{#1}%
	\pay@newcmdname{#1.iscust}{}%
	\ifthenelse{\equal{#3}{}}{%
		\pay@tmptoks@a={\pay@defaultsep}%
	}{%
	  \pay@tmptoks@a={#3}%
	}%
	\ifthenelse{\equal{#5}{}}{%
		\pay@tmptoks@b={\pay@defaultsep}%
	}{%
	  \pay@tmptoks@b={#5}%
	}%
	\pay@tmptoks@c={#4}%
	\expandafter\edef\csname pay@#1@ligne\endcsname{%
		\noexpand\\ \the\pay@tmptoks@a\the\pay@tmptoks@c
		\noexpand\gdef\noexpand\pay@linesep{\the\pay@tmptoks@b}%
	}%
	#2\relax
}
%
% Affiche la valeur d'une r{\'e}f{\'e}rence symbolique (i.e. Secu.Total)
% Prend en charge la conversion du "." utilis{\'e} par le package fp
% en signe de s{\'e}paration d{\'e}cimale tel que choisi avec la commande
% \SetDecimalPoint
\newcommand*{\DisplayValue}[1]{%
  \expandafter\pay@displaynum\expandafter{\csname#1\endcsname}%
}
%
% Affiche un nombre
\newcommand*{\DisplayNumber}[1]{\pay@displaynum{#1}}
%
% Permet de choisir le caract{\`e}re s{\'e}parant la partie enti{\`e}re de la
% partie fractionnaire d'une nombre (pour l'affichage uniquement).
\newcommand*{\SetDecimalPoint}[1]{\renewcommand*{\pay@decimalpoint}{#1}}
%
% Saute les colonnes "Base" et "Taux salarial". L'argument est
% affich{\'e} centr{\'e} sur ces deux colonnes.
\newcommand*{\SkipSalCalc}[1]{\pay@mcenter{2}{#1}}
%
% Saute les colonnes "Base", "Taux salarial" et "Cotisations 
% salariales". L'argument est affich{\'e} centr{\'e} sur ces trois 
% colonnes.
\newcommand*{\SkipSal}[1]{\pay@mcenter{3}{#1}}
%
% Saute les colonnes "Taux patronal" et "Cotisations 
% patronales". L'argument est affich{\'e} centr{\'e} sur ces deux 
% colonnes.
\newcommand*{\SkipPat}[1]{\pay@mcenter{2}{#1}}
%
% Saute la derni{\`e}re colonne ("Total"). L'argument est affich{\'e}
% dans cette colonne.
\newcommand*{\SkipTot}[1]{\pay@ecenter{1}{#1}}
%
% Saute la colonne "Base", les colonnes salariales et la 
% colonne "Taux patronal".
% L'argument est affich{\'e} centr{\'e} sur ces 4 colonnes.
\newcommand*{\SkipSalTPat}[1]{\pay@mcenter{4}{#1}}
%
% Edite une feuille de paye
% Le premier argument est optionnel et indique le nom d'un
% fichier {\`a} lire. Ce fichier peut-{\^e}tre utilis{\'e} pour d{\'e}finir 
% les caract{\'e}ristiques d'une feuille de paye sur plusieurs mois.
% Lorsque cet argument est pr{\'e}sent, la lecture du fichier et 
% l'{\'e}dition de la feuille de paye sont faites {\`a} l'int{\'e}rieur d'un 
% groupe. Ceci permet d'{\'e}diter plusieurs feuilles de paye {\`a} la suite.
% Le premier argument requis est la p{\'e}riode couverte par cette 
% feuille de paye, le second est la date de payement.
% Une feuille de paye doit avoir {\'e}t{\'e} d{\'e}finie ({\`a} l'aide des commandes 
% \LignePaye etc.) avant de pouvoir utiliser \FeuilleDePaye.
% La d{\'e}finition de la feuille de paye est invalid{\'e}e apr{\`e}s l'{\'e}dition 
% d'une feuille de paye; il faut donc d{\'e}finir de nouveau la structure 
% de la feuille avant d'en {\'e}diter une autre, d'o{\`u} l'int{\'e}r{\^e}t du premier 
% argument optionnel.
% [#1]=fichier {\`a} lire, #2=periode, #3=date de payement
\newcommand{\FeuilleDePaye}[3][]{%
  \ifthenelse{\equal{#1}{}}{%
    \setboolean{pay@ingroup}{false}%
  }{%
    \begingroup
    \setboolean{pay@ingroup}{true}%
    \input #1%
  }%
  \ifthenelse{\value{pay@nblignes}=0}{%
	  \ClassError{\pay@classname}{%
		  No line in sheet!
		}{%
		  You should use \protect\LignePaye\space or 
		  \protect\LignePerso\space to
			declare the lines of the pay sheet
		}%
	}{}%
  \def\pay@tabxpass{0}%
  \ifthenelse{\isundefined{\pay@employeur}}{%
	  \ClassError{\pay@classname}{%
		  No employer defined!
		}{%
		  You should use \protect\Employeur\space to
			set the employer name and address
		}%
	}{}%
	\ifthenelse{\isundefined{\pay@employe}}{%
	  \ClassError{\pay@classname}{%
		  No employee defined!
		}{%
		  You should use \protect\Employe\space to
			set the employee name and address
		}%
	}{}%
  \thispagestyle{empty}
	\begin{center}
	  {\large\textbf{\pay@nompaye}}\par
		\vfill
		\vfill
		\makebox[0.9\textwidth]{%
		\textbf{\pay@nomperiode} #2\hfill
		\textbf{\pay@nomdate} #3}\par
		\vfill
		\vfill
		\fbox{%
		  \parbox{0.9\textwidth}{%
		    \makebox[0.3\textwidth][l]{\textbf{\pay@nomemployeur}}%
			  \parbox[t]{0.6\textwidth}{\pay@employeur}\par
			}%
		}\par
		\vfill
		\fbox{%
		  \parbox{0.9\textwidth}{%
	      \makebox[0.3\textwidth][l]{\textbf{\pay@nomemploye}}%
				\parbox[t]{0.6\textwidth}{\pay@employe}\par
			}%
		}\par
		\vfill
		\vfill
		\begin{tabularx}{0.9\textwidth}{||X|*{6}{r|}|}
% 		\begin{tabular}{||l|*{6}{r|}|}
		  \pay@topsep
			\pay@header
			\gdef\pay@linesep{\pay@headsep}%
			\pay@buildlignes
			\\
			\pay@bottomsep
		\end{tabularx}
% 		\end{tabular}
		\vfill
		\vfill
		\vfill
		\makebox[0.9\textwidth][r]{\small\pay@nomprinted\ \today}\par
	\end{center}
  \ifthenelse{\boolean{pay@ingroup}}{%
    \endgroup
	  \setcounter{pay@nblignes}{0}%
  }{}%
	\newpage
}
%%%
% Partie priv{\'e}e
%%%
% En fran\c{c}ais, on utilise la virgule comme s{\'e}parateur d{\'e}cimal
\newcommand*{\pay@decimalpoint}{,}
% Affichage des nombres avec deux chiffres apr{\`e}s la virgule
\newcommand*{\pay@displaynum}[1]{%
  \FPround{\pay@tmpcs@a}{#1}{2}%
  \expandafter\pay@FPsplit\pay@tmpcs@a\pay@stop
	\pay@tmpcs@a{\pay@decimalpoint}\pay@tmpcs@b
}
% D{\'e}coupage d'un nombre en parties enti{\`e}re et fractionnaire
\def\pay@FPsplit#1.#2\pay@stop{%
  \gdef\pay@tmpcs@a{#1}\gdef\pay@tmpcs@b{#2}%
}
%
% Noms par d{\'e}faut des colonnes de la feuille de paye
\newcommand*{\pay@coli}{Base}
\newcommand*{\pay@colii}{TauxSal}
\newcommand*{\pay@coliii}{CotSal}
\newcommand*{\pay@coliv}{TauxPat}
\newcommand*{\pay@colv}{CotPat}
\newcommand*{\pay@colvi}{Total}
% Mots affich{\'e}s dans l'en-t{\^e}te et le pied de la feuille
\newcommand*{\pay@nompaye}{Bulletin de paye}
\newcommand*{\pay@nomperiode}{P\'eriode :}
\newcommand*{\pay@nomdate}{Date de paiement :}
\newcommand*{\pay@nomemployeur}{Employeur}
\newcommand*{\pay@nomemploye}{Employ\'e}
\newcommand*{\pay@nomprinted}{Imprim\'e le :}
% Labels des colonnes de la feuille
\newcommand*{\pay@nomdesign}{D\'esignation}
\newcommand*{\pay@nombase}{Base}
\newcommand*{\pay@nomtaux}{Taux}
\newcommand*{\pay@nommontant}{Montant}
\newcommand*{\pay@nomtpat}{Taux pat.}
\newcommand*{\pay@nomcpat}{Cotis. pat.}
\newcommand*{\pay@nomtotaux}{Totaux}
% 
% S{\'e}parateur inter-ligne par d{\'e}faut
\newcommand*{\pay@defaultsep}{%
  \hhline{||-*{3}{--}||}%
}
% S{\'e}parateur inter-ligne en haut du tabular
\newcommand*{\pay@topsep}{%
  \hhline{|t:=*{3}{==}:t|}%
}
% S{\'e}parateur inter-ligne sous l'en-t{\^e}te du tabular
\newcommand*{\pay@headsep}{%
  \hhline{|:=*{3}{==}:|}%
}
% S{\'e}parateur inter-ligne en bas du tabular
\newcommand*{\pay@bottomsep}{%
  \hhline{|b:=*{3}{==}:b|}%
}
%
%
% Remplacer #1 colonnes par #2 centr{\'e} en milieu de ligne
\newcommand*{\pay@mcenter}[2]{\multicolumn{#1}{c|}{#2}}
% Remplacer #1 colonnes par #2 centr{\'e} en fin de ligne
\newcommand*{\pay@ecenter}[2]{\multicolumn{#1}{c||}{#2}}
% Remplacer #1 colonnes par #2 centr{\'e} en d{\'e}but de ligne
\newcommand*{\pay@fcenter}[2]{\multicolumn{#1}{|c|}{#2}}
% Remplacer #1 colonnes par #2 cadr{\'e} {\`a} gauche
\newcommand*{\pay@ffleft}[2]{\multicolumn{#1}{||l||}{#2}}
% 
% En-t{\^e}te du tabular : labels des colonnes
\newcommand*{\pay@header}{%
	\textbf{\pay@nomdesign}
	& \pay@mcenter{1}{\textbf{\pay@nombase}}
	& \pay@mcenter{1}{\textbf{\pay@nomtaux}}
	& \pay@mcenter{1}{\textbf{\pay@nommontant}}
	& \pay@mcenter{1}{\textbf{\pay@nomtpat}}
	& \pay@mcenter{1}{\textbf{\pay@nomcpat}}
	& \pay@ecenter{1}{\textbf{\pay@nomtotaux}}
}
%
% D{\'e}finition d'une nouvelle commande.
% #1 est le nom de la commande (sans \)
% #2 est sa d{\'e}finition
\newcommand*{\pay@newcmdname}[2]{%
  \expandafter\newcommand\expandafter{\csname#1\endcsname}{#2}%
}
% D{\'e}finition d'une valeur num{\'e}rique
% #1 est le nom de la valeur (sans \)
% #2 est la valeur
\newcommand*{\pay@FPsetname}[2]{%
  \expandafter\FPset\expandafter{\csname#1\endcsname}{#2}%
}
% Multiplication par noms : #1 <- #2 * #3
% #1, #2 et #3 sont des noms de valeurs num{\'e}riques (sans \)
\newcommand*{\pay@FPmulname}[3]{%
  \expandafter\FPmul\expandafter{%
	  \csname#1\endcsname
	}{%
	  \csname#2\endcsname
	}{%
	  \csname#3\endcsname
	}%
}
% Division par cent par nom : #1 <- #2 / 100
% #1 et #2 sont des noms de valeurs num{\'e}riques (sans \)
\newcommand*{\pay@FPdivCname}[2]{%
  \expandafter\FPdiv\expandafter{%
	  \csname#1\endcsname
	}{%
	  \csname#2\endcsname
	}{100}%
}
% Evaluation d'une expression postfix{\'e}e par nom : #1 <- eval(#2)
% #1 est le nom d'une valeur num{\'e}rique (sans \)
% #2 est une expression postfix{\'e}e : a b + 100 / <=> (a+b)/100
\newcommand*{\pay@FPupnname}[2]{%
  \expandafter\FPupn\expandafter{%
	  \csname#1\endcsname
	}{#2}%
}
% Affichage de la valeur num{\'e}rique d'une colonne de 
% la ligne courante
% #1 est le nom de la colonne
\newcommand*{\pay@dispnumligne}[1]{%
  \expandafter\pay@displaynum\expandafter{%
	  \csname\pay@lnam.#1\endcsname
	}%
}
% Affichage du texte d'une colonne de la ligne courante
% #1 est le nom de la colonne
\newcommand*{\pay@dispitemline}[1]{%
  \expandafter\csname\pay@lnam.#1\endcsname
}
% Affichage du signe '%' lorsqu'un taux est fourni en '%'
\newcommand*{\pay@disppercentline}[1]{%
  \expandafter\csname\pay@lnam.#1.percent\endcsname
}
% Test pour \ifthenelse : permet de tester si un
% {\'e}l{\'e}ment de la ligne courante est d{\'e}fini ou non.
% #1 est le nom de la colonne.
\newcommand*{\pay@undefineditem}[1]{%
  \expandafter\isundefined\expandafter{%
	  \csname\pay@lnam.#1\endcsname
	}%
}
% Test pour \ifthenelse : permet de tester si la
% ligne courante est personnalis{\'e}e ou non.
\newcommand*{\pay@iscustom}{%
  \expandafter\isundefined\expandafter{%
	  \csname\pay@lnam.iscust\endcsname
	}%
}
% Cr{\'e}e une ligne vide dans la feuille de paye
\newcommand*{\pay@emptyline}{%
  \\ \pay@linesep
	\pay@fcenter{7}{}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne ne contenant qu'un label
\newcommand*{\pay@labelline}{%
  \\ \pay@linesep
  \pay@ffleft{7}{\pay@dispitemline{Label}}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne de total
\newcommand*{\pay@totline}{%
  \\ \pay@linesep
    \pay@dispitemline{Label}
	& \pay@mcenter{5}{}
	& \pay@dispnumligne{\pay@colvi}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne de cotisations patronales
\newcommand*{\pay@patline}{%
  \\ \pay@linesep
    \pay@dispitemline{Label}
	& \pay@dispnumligne{\pay@coli}
	& \pay@mcenter{2}{}
	& \pay@dispnumligne{\pay@coliv}\pay@disppercentline{\pay@coliv}
	& \pay@dispnumligne{\pay@colv}
	& \pay@ecenter{1}{}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne de cotisations patronales et total
\newcommand*{\pay@pattotline}{%
  \\ \pay@linesep
    \pay@dispitemline{Label}
	& \pay@dispnumligne{\pay@coli}
	& \pay@mcenter{2}{}
	& \pay@dispnumligne{\pay@coliv}\pay@disppercentline{\pay@coliv}
	& \pay@dispnumligne{\pay@colv}
	& \pay@dispnumligne{\pay@colvi}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne de cotisations salariales
\newcommand*{\pay@salline}{%
  \\ \pay@linesep
    \pay@dispitemline{Label}
	& \pay@dispnumligne{\pay@coli}
	& \pay@dispnumligne{\pay@colii}\pay@disppercentline{\pay@colii}
	& \pay@dispnumligne{\pay@coliii}
	& \pay@mcenter{2}{}
	& \pay@ecenter{1}{}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne de cotisations salariales et total
\newcommand*{\pay@saltotline}{%
  \\ \pay@linesep
    \pay@dispitemline{Label}
	& \pay@dispnumligne{\pay@coli}
	& \pay@dispnumligne{\pay@colii}\pay@disppercentline{\pay@colii}
	& \pay@dispnumligne{\pay@coliii}
	& \pay@mcenter{2}{}
	& \pay@dispnumligne{\pay@colvi}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne de cotisations salariales et patronales
\newcommand*{\pay@salpatline}{%
  \\ \pay@linesep
    \pay@dispitemline{Label}
	& \pay@dispnumligne{\pay@coli}
	& \pay@dispnumligne{\pay@colii}\pay@disppercentline{\pay@colii}
	& \pay@dispnumligne{\pay@coliii}
	& \pay@dispnumligne{\pay@coliv}\pay@disppercentline{\pay@coliv}
	& \pay@dispnumligne{\pay@colv}
	& \pay@ecenter{1}{}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e une ligne compl{\`e}te
\newcommand*{\pay@fullline}{%
  \\ \pay@linesep
		\pay@dispitemline{Label}
	& \pay@dispnumligne{\pay@coli}
	& \pay@dispnumligne{\pay@colii}\pay@disppercentline{\pay@colii}
	& \pay@dispnumligne{\pay@coliii}
	& \pay@dispnumligne{\pay@coliv}\pay@disppercentline{\pay@coliv}
	& \pay@dispnumligne{\pay@colv}
	& \pay@dispnumligne{\pay@colvi}
	\gdef\pay@linesep{\pay@defaultsep}%
}
% Cr{\'e}e la ligne courante
\newcommand*{\pay@buildligne}{%
	\global\edef\pay@lnam{\csname pay@ligne\roman{pay@curligne}\endcsname}%
	\pay@showlines
	\pay@progress{%
	  Processing line \thepay@curligne\space of \thepay@nblignes\space (\pay@lnam) - 
	}%
	\ifthenelse{\pay@iscustom}{%
	  \ifthenelse{\pay@undefineditem{Label}}{%
			\let\pay@whichline\pay@emptyline
			\pay@progress{Blank line ^^J}%
		}{% label est d{\'e}fini
		  \ifthenelse{\pay@undefineditem{\pay@colii}}{%
			  \ifthenelse{\pay@undefineditem{\pay@coliv}}{%
				  \ifthenelse{\pay@undefineditem{\pay@colvi}}{%
						\let\pay@whichline\pay@labelline
						\pay@progress{Label line ^^J}%
					}{% il y a un total
						\let\pay@whichline\pay@totline
						\pay@progress{\pay@colvi\space line ^^J}%
					}%
				}{% il y a un taux de cotisations patronales
				  \ifthenelse{\pay@undefineditem{\pay@colvi}}{%
						\let\pay@whichline\pay@patline
						\pay@progress{\pay@colv\space line ^^J}%
					}{%
						\let\pay@whichline\pay@pattotline
						\pay@progress{\pay@colv\space and \pay@colvi\space line ^^J}%
					}%
				}%
			}{% il y a un taux de cotisations salariales
			  \ifthenelse{\pay@undefineditem{\pay@coliv}}{%
				  \ifthenelse{\pay@undefineditem{\pay@colvi}}{%
						\let\pay@whichline\pay@salline
						\pay@progress{\pay@coliii\space line ^^J}%
					}{%
						\let\pay@whichline\pay@saltotline
						\pay@progress{\pay@coliii\space and \pay@colvi\space line ^^J}%
					}%
				}{%
				  \ifthenelse{\pay@undefineditem{\pay@colvi}}{%
						\let\pay@whichline\pay@salpatline
						\pay@progress{\pay@coliii\space and \pay@colv\space line ^^J}%
					}{%
						\let\pay@whichline\pay@fullline
						\pay@progress{Full line ^^J}%
					}%
				}%
			}%
		}% 
	}{% c'est une ligne perso
	  \expandafter\let\expandafter\pay@whichline\csname pay@\pay@lnam @ligne\endcsname
		\pay@progress{Custom line ^^J}%
	}%
	\pay@whichline
}
% Cr{\'e}e les lignes du tabular
\newcommand*{\pay@buildlignes}{%
  \setcounter{pay@tmpcount}{\pay@tabxpass}%
  \stepcounter{pay@tmpcount}%
	\global\edef\pay@tabxpass{\thepay@tmpcount}% m{\'e}morise le compteur 
%   	d'une passe {\`a} la suivante (tabularx restaure les compteurs pour
%     que les diff{\'e}rentes passes soient transparentes {\`a} l'utilisateur)
	\ifthenelse{\boolean{pay@progress}}{%
	  \message{^^J *** Pass \pay@tabxpass\space***^^J}%
		\ifthenelse{\value{pay@tmpcount} > 1}{%
	    \global\let\pay@progress\pay@shutup
			\gdef\pay@showlines{%
		    \message{\space\thepay@curligne}%
			}%
	  }{%
	    \global\let\pay@progress\message
		  \global\let\pay@showlines\empty
	  }%
	}{% no progress
	  \global\let\pay@progress\pay@shutup
		\global\let\pay@showlines\empty
	}%
	\setcounter{pay@curligne}{0}%
	\whiledo{\value{pay@curligne}<\value{pay@nblignes}}{%
	  \stepcounter{pay@curligne}%
		\pay@buildligne
	}%
}
% redirection des messages vers /dev/null
\newcommand*{\pay@shutup}[1]{}
%
% Examine un taux pour d{\'e}terminer s'il s'agit d'un pourcentage
% Si c'est le cas, met pay@percent {\`a} true et place le pourcentage 
% dans \pay@tmptoks@a. Sinon, met pay@percent {\`a} false.
\newcommand*{\pay@findpercent}[1]{%
  \setboolean{pay@percent}{false}%
	\pay@tmptoks@a={}%
	\expandafter\pay@lookforpercent#1Z%
}
\newcommand*{\pay@lookforpercent}[1]{%
  \ifthenelse{\equal{#1}{Z}}{%
	  \let\pay@next\relax%
	}{%
	  \ifthenelse{\equal{#1}{\%}}{%
	    \setboolean{pay@percent}{true}%
	    \let\pay@next\pay@lookforpercent%
	  }{%
	    \global\pay@tmptoks@a=\expandafter{\the\pay@tmptoks@a#1}%
	    \let\pay@next\pay@lookforpercent%
	  }%
  }%
  \pay@next%
}
\endinput
