/*************************************************************************************************************************************/
/*******************************ATIH fg13_prototype.h 21/12/2010**********************************************************************/

int grp_13 (GRP_ENTREE_13 grp_ent,GRP_RESULTAT_13 *grp_res,GHS_VALORISATION_13 *ghs_val,RSS_INFO_13 *rss_inf);
/*
Fonction grp_13 :
  Fonction groupage version 13
  Cette fonction groupe un fichier de RSS au format 016 en format 116.

Paramètres :

*Paramètre 1 en entrée : Structure GRP_ENTREE contenant :
    -> rum2[tab_max] : Tableau de pointeurs sur des chaînes de caractères.
        Ces chaînes contiennent les différents RUM d’un RSS. Chaque chaîne (correspondant à un RUM) doit se terminer
        par un caractère nul (‘\0’). Ce tableau comporte au plus tab_max pointeurs, soit 99 éléments. Seul le format 016 est accepté.

    -> dirtab[BUFSIZ]: Chaîne de caractères contenant le chemin d’accès absolu, complet, pour atteindre le répertoire
        contenant les tables. Il doit être écrit de telle sorte que l’accès à une table donnée consiste à concaténer cette chaîne
        avec le nom de la table recherchée (terminé par '/').

    -> int ns : Entier contenant le nombre de séjours élémentaires du malade au cours de son séjour dans l’établissement hospitalier.
        Un appel à la fonction grp_13() avec ce paramètre à 0 entraîne la fermeture des tables de groupage.

    -> int type_etab : Entier indiquant si l’établissement est ex-DGF (=1), ou ex-OQN (différent de 1).

*Paramètre 2 en sortie: Structure GRP_RESULTAT_13 contenant :
    -> int ns_sor : Entier contenant le nombre de séjours après le traitement dans la fonction groupage. Ce nombre est désormais
        égal au nombre de séjours en entrée.

    -> int sejp : Entier destiné à recevoir le numéro du RUM désigné par le groupage (ou plus précisément par l'algorithme de choix du DP) comme contenant le
                  diagnostic principal et le diagnostic relié, en débutant la numérotation des RUM à 0.

    -> char version[3] : Chaîne de 3 caractères destinée à recevoir le numéro de version de la classification lu dans les tables (terminée par le caractère NULL).
    -> char cmd[3] : Chaîne de 3 caractères de long, destinée à recevoir le numéro de la CMD déterminée par le groupage (terminée par le caractère NULL).
    -> char ghm[5] : Chaîne de 5 caractères de long, destinée à recevoir le numéro du GHM déterminé par le groupage (terminée par le caractère NULL).
    -> char cret[4]: Chaîne de 4 caractères de long, destinée à recevoir le code retour déterminé par le groupage. Il s’agit de la
        valeur en caractère du retour de la fonction grp_13().Cette chaîne est terminée par le caractère NULL.

    -> int ErrCtrl[MAXERRCTRL_13] : Tableau de MAXERRCTRL entiers courts correspondant au vecteur des erreurs contenues dans chacun des RUM du RSS.
        Il est construit de la façon suivante :
            entier n°1	: (nr) nombre de RUM détectés dans le RSS
            entier n°2	: (n1) nombre d’erreurs détectées dans le RUM n°1…
            entier n°(nr+1)	: nombre d’erreurs détectées dans le RUM n°nr
            entiers n°(nr+2) à (nr+1+n1)	: codes des erreurs du RUM n°1
            entiers n°(nr+n1+2) à (nr+1+n1+n2)	: codes des erreurs du RUM n°2…

    -> int ErrArb[MAXERRARB_13] : Tableau de MAXERRARB entiers courts correspondant au vecteur des erreurs détectéespar l’arbre de décision
        de la classification. Les erreurs sont stockées dans ce vecteur de manière séquentielle. Ce vecteur n’a pas de structure particulière.

    -> int ErrImpl[MAXERRIMPL_13] : Tableau de MAXERRIMPL entiers courts correspondant au vecteur des erreurs dues à l’implémentation.
        Les erreurs sont stockées dans ce vecteur de manière séquentielle. Ce vecteur n’a pas de structure particulière.

*Paramètre 3 en sortie: Structure GHS_VALORISATION_13 contenant :

    -> char ghs[5] : Chaîne de 5 caractères de long, destinée à recevoir le numéro du GHS déterminé à partir du GHM obtenu par le groupage,
        et des informations contenues dans le fichier ghsinfo.tab. Dans le cas de la dialyse pour les établissements ex-OQN,
        cette variable contient le libellé du forfait dialyse après SROS (commençant par D).
        Pour les établissements ex-DGF dans le cas de la dialyse, elle contient le numéro du GHS après SROS.

    -> int nbjxsup : Entier contenant le nombre de journées au-delà de la borne extrême haute pour le GHS considéré.
    -> int sejxinf : Entier contenant 0 si la durée du séjour est supérieure à la borne extrême basse du GHS. Sinon, égal à 1 si exb forfaitaire, 2 si exb à la journée, 0 si pas de minoration
    -> float nbjxinf : Décimal égal à borneinf-DS si borneinf>DS,0 sinon
    -> int buhcd : Entier utilisé comme booléen, égal à 1 si le GHS applique la règle spécifique aux UHCD, 0 sinon.
	
    
    -> int nbjreaR[tab_max];Entier contenant le nombre de suppléments de réanimation pour le RUM numéro i
    -> int nbrepR[tab_max];Entier contenant le nombre de suppléments de réanimation pédiatrique pour le RUM numéro i
    -> int nbjsrcR[tab_max];Entier contenant le nombre de suppléments de surveillance continue pour le RUM numéro i
    -> int nbjstf_issudereaR[tab_max];Entier contenant le nombre de suppléments soins intensifs provenant de la réanimation pour le RUM numéro i
    -> int nbjstf_totR[tab_max];Entier contenant le nombre total de suppléments soins intensifs, y compris les suppléments provenant de la réanimation, pour le RUM numéro i
    -> int nbjnnaR[tab_max];Entier contenant le nombre de journées supplémentaires pour la néonatologie pour le RUM numéro i
    -> int nbjnnbR[tab_max];Entier contenant le nombre de journées supplémentaires pour la néonatologie avec soins intensifs pour le RUM numéro i
    -> int nbjnncR[tab_max];Entier contenant le nombre de journées supplémentaires pour la réanimation néonatale pour le RUM numéro i

    -> int nbjrea : Entier contenant le nombre suppléments de réanimation.
    -> int nbrep : Entier contenant le nombre de suppléments de réanimation pédiatrique.
    -> int nbjsrc : Entier contenant le nombre de suppléments de surveillance continue.
    -> int nbjstf_issuderea : Entier contenant le nombre suppléments de soins intensifs provenant de la réanimation.
    -> int nbjstf_tot : Entier contenant le nombre total de suppléments de soins intensifs, y compris les suppléments provenant de la réanimation.

    -> int nbjnna: Entier contenant le nombre de suppléments pour la néonatologie (type 2A).
    -> int nbjnnb: Entier contenant le nombre de suppléments pour la néonatologie avec soins intensifs (type 2B).
    -> int nbjnnc: Entier contenant le nombre de suppléments pour la réanimation néonatale (type 3).

    -> int nbac687: Entier contenant le nombre d’actes supplémentaires (hors séances) de radiothérapie menant au GHS 9610.
    -> int nbac688: Entier contenant le nombre d’actes supplémentaires (hors séances) de radiothérapie menant au GHS 9611.
    -> int nbac689: Entier contenant le nombre d’actes supplémentaires (hors séances) de radiothérapie menant au GHS 9612.
    
    -> int nbacRX1; Entier contenant le nombre de suppléments "Gama Knife" (GHS 6523)
    -> int nbacRX2; Entier contenant le nombre de suppléments "Cyber Knife" (GHS 9621)
    -> int nbacRX3; Entier contenant le nombre de suppléments "aphérèse" (GHS 9615)

    -> int nbRCMI; Entier contenant le nombre d'actes supplémentaires menant au GHS 9622 (RCMI)

    -> int nbactsupp9623; Entier contenant le nombre d'actes supplémentaires menant au GHS 9623
    -> int nbactsupp9624; Entier contenant le nombre d'actes supplémentaires menant au GHS 9624
    -> int nbactsupp9625; Entier contenant le nombre d'actes supplémentaires menant au GHS 9625
    -> int nbactsupp9631; Entier contenant le nombre d'actes supplémentaires menant au GHS 9631
    -> int nbactsupp9632; Entier contenant le nombre d'actes supplémentaires menant au GHS 9632
    -> int nbactsupp9633; Entier contenant le nombre d'actes supplémentaires menant au GHS 9633

	-> int acprlvtorg: Entier contenant la catégorie de prélèvement d’organes du séjour considéré. (0, 1, 2 ou 3).
    
    -> int pih_a : Entier utilisé comme booléen, contenant 0 en cas d’absence de code diagnostic associé Z75.80, 1 sinon.
    -> int pih_b : Entier utilisé comme booléen, contenant 0 si le mode d’entrée et le mode de sortie est égal à 0, 1 sinon.
    
    -> char prestdial[5] : chaine de 5 caractères utilisée pour les établissements ex-OQN uniquement: contient la prestation dialyse associée au GHM obtenu.

    -> int nbhd : Entier contenant le nombre d'actes supplémentaires hors séances pour l'hémodialyse.
    -> int ent1 : Entier contenant le nombre d'actes supplémentaires hors séances pour les entraînements à la dialyse péritonéale automatisée.
    -> int ent2 : Entier contenant le nombre d'actes supplémentaires hors séances pour les entraînements à la dialyse péritonéale continue ambulatoire.
    -> int ent3 : Entier contenant le nombre d'actes supplémentaires hors séances pour les entraînements à l'hémodialyse.
    -> int nbchhypb : Entier contenant le nombre de caissons hyperbare.
    
    -> int nbseance : Entier contenant le nombre total de séances
    -> int nbprot : Entier contenant le nombre d'actes supplémentaires menant dans le GHS 9619 (protonthérapie)
    -> int nbict : Entier contenant le nombre d'actes supplémentaires menant dans le GHS 9620 (ICT)


*Paramètre 4 en sortie: Structure RSS_INFO_13 contenant :
    -> int agea : Entier contenant l’âge en années calculée par la fonction groupage
    -> int agej : Entier contenant l’âge en jours calculée par la fonction groupage
    -> int dstot: Entier contenant la durée totale de séjour calculée par la fonction groupage

    -> DIAGLIST_13 diaglist	est une structure contenant :
        -	int nbdiag : entier contenant le nombre de diagnostics différents.
        -	char *listdiag : chaine de caractères contenant la liste de ces diagnostics avec en première position le diagnostic principal,
            puis en deuxième position le diagnostic relié, puis l’ensemble des diagnostics associés retenus pour le RSS.

    -> ACTLIST_13 actlist est une structure contenant :
        -	int nbac : entier contenant le nombre de zones d’actes du RSS.
        -	char *listzac : chaine de caractères contenant la liste des zones d’actes .
        La présentation de ces zones d’actes est identique à celle du RUM.

    -> INFO_RUM_13 tabval[tab_max] est un tableau de tab_max éléments contenant pour chaque RUM :
        - int brea : entier égal à 1 si le RUM contient des actes marqueurs de réanimation, 0 sinon.
		- int bsc : entier égal à 1 si le RUM possède les caractéristiques pour obtenir des suppléments de SC sans considérer le type d'autorisation de l'UM, 0 sinon.
        - char typum[2] : chaine de 2 caractères représentant le type d'autorisation du dernier jour passé dans l'Unité Médicale.
        - int dsp : entier contenant la durée de séjour partielle du RUM.

	-> char sigfg[5] : chaine de 5 caractères contenant la signature de la FG : tables binaires + CLS_ID
    -> char sigrss[20] : chaine de 20 caractères contenant la signature du RSS
    -> char sigrssghsfg[8];chaine de 8 caractères contenant la signature de sigrss et du GHS et de sigfg

Valeur en retour : entier
        la fonction grp_13() renvoie un entier égal à zéro si les contrôles n’ont rien détecté d’anormal, et si le
        groupage n’a pas retrouvé d’anomalies. Dans le cas contraire, la valeur retourné est le numéro de
        l’erreur détectée (sauf pour certaines erreurs de controles non bloquantes non retournées par la fonction groupage).

        Toute erreur de contrôle dont la valeur est contenue dans la liste erreursbloq_13 du fichier fg13.h
        est irrémédiable, et ne permet pas d’obtenir le groupage du R.S.S. Les erreurs de contrôle non contenues dans cette liste
        ne sont pas graves (autrement dit non bloquantes) en terme de groupage (par exemple : date système improbable).De telles erreurs ne sont détectées que par
        l’analyse du vecteur décrit plus haut (ErrCtrl).
        Les erreurs d'implémentation (tableau ErrImpl) sont aussi irrémédiables
        Les erreurs de parcours de l'arbre de décision (tableau ErrArb) peuvent être bloquantes ou non bloquantes.
*/
/*************************************************************************************************************************************/
