Commit ef3aaa29 authored by nogzer's avatar nogzer

Dépôt des fichiers

parents
# AGGIR
Ce programme permet de calculer le groupe iso-ressources d'un individu selon l'algorithme de la grille AGGIR publié dans l'annexe II du Décret n°97-427 du 28 avril 1997 et développé par le Syndicat national de gérontologie clinique de France.
## Pour commencer...
Vous pourrez trouver dans ce fichier les instructions pour compiler et tester le programme sur votre machine locale.
### Pré-requis
La librairie Gtk pour C++ est nécessaire pour pouvoir compiler.
Sous Ubuntu, il suffit d'installer le paquet suivant :
```
apt install libgtkmm-3.0-dev
```
## Fonction du programme
Afin d'effectuer le calcul il est nécessaire de choisir une modalité pour chacune des variables discriminantes.
### Codage des items
* Modalité A : la personne fait seule et spontanément, habituellement, totalement et correctement
* Modalité B : la personne peut faire seule, mais ne le fait pas spontanément, ou/et correctement ou/et habituellement ou/et partiellement
* Modalité C : la personne ne fait pas, il faut faire à sa place ou faire faire par quelqu'un d'autre
### Variables discrimantes
* Cohérence : converser ou se comporter de façon logique et sensée
* Orientation : se repérer dans le temps, les moments de la journée et les lieux
* Toilette corporelle : comprend la toilette du haut (tête, tronc) et la toilette du bas
* Habillage : comprend l'habillage du haut, l'habillage moyen, et l'habillage du bas
* Alimentation : comprend le fait de servir et le fait de manger
* Élimination : correspond à la capacité de la personne à gérer l'hygiène de l'élimination et non la continence (élimination urinaire et élimination fécale )
* Transferts : comprend le fait de se coucher, s'asseoir, se lever
* Déplacements à l'intérieur : évalue si des moyens techniques sont nécessaires à l'intérieur
* Déplacements à l'extérieur : évalue si des moyens techniques sont nécessaires à l'extérieur
* Communication à distance : utilisation d'un téléphone, d'une télé-alarme
## Créé avec
* [Emacs](https://www.gnu.org/software/emacs/) - Utilisé pour éditer le code source.
* [Magit](https://magit.vc/manual/magit/) - Utilisé pour synchroniser les dépôts.
## Auteur
* **Matthieu Nogatchewsky** - [Nogzer](https://github.com/nogzer)
## Licence
Ce travail est "open source".
/*!
* \file grille.hpp
* \brief Déclaration des variables de l'algorithme AGGIR
* \author Matthieu Nogatchewsky
* \date Lundi 23 avril 2018
*/
#ifndef DEF_GRILLE
#define DEF_GRILLE
namespace Grille {
enum Variables {
COHERENCE,
ORIENTATION,
TOILETTE,
HABILLAGE,
ALIMENTATION,
ELIMINATION,
TRANSFERT,
DEPLACEMENT_INT,
DEPLACEMENT_EXT,
COMMUNICATION
};
const int NOMBRE_VARIABLE = COMMUNICATION+1;
enum Modalite {
ModaliteA,
ModaliteB,
ModaliteC
};
const int NOMBRE_MODALITE = ModaliteC+1;
enum Classe {
ClasseA,
ClasseB,
ClasseC,
ClasseD,
ClasseE,
ClasseF,
ClasseG,
ClasseH
};
const int NOMBRE_CLASSE = ClasseH+1;
const int NOMBRE_RANG = 13;
const int NOMBRE_GIR = 6;
int rangs[NOMBRE_RANG][2] = {{ClasseA,4380},
{ClasseA,4140},
{ClasseA,3390},
{ClasseB,2016},
{ClasseC,1700},
{ClasseC,1432},
{ClasseD,2400},
{ClasseE,1200},
{ClasseF,800},
{ClasseG,650},
{ClasseH,4000},
{ClasseH,2000},
{ClasseH,0}};
int gir[NOMBRE_GIR] = {0, 6, 8, 10, 11, 12};
int valeurs[NOMBRE_CLASSE][NOMBRE_MODALITE][NOMBRE_VARIABLE] =
{
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 16, 16, 20, 16, 120, 32, 0, 0},
{2000, 1200, 40, 40, 60, 100, 800, 200, 0, 0}
},
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{320, 120, 16, 16, 0, 16, 120, -40, 0, 0},
{1500, 1200, 40, 40, 60, 100, 800, -80, 0, 0}
},
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 16, 16, 20, 20, 200, 40, 0, 0},
{0, 0, 40, 40, 60, 160, 1000, 400, 0, 0}
},
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 200, 200, 200, 0, 0, 0},
{0, 0, 0, 0, 2000, 400, 2000, 200, 0, 0}
},
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 100, 100, 100, 100, 100, 0, 0, 0},
{400, 400, 400, 400, 400, 800, 800, 200, 0, 0}
},
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 100, 100, 100, 100, 100, 100, 0, 0, 0},
{200, 200, 500, 500, 500, 500, 500, 500, 200, 0}
},
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 200, 200, 200, 200, 200, 100, 0, 0},
{150, 150, 300, 300, 500, 500, 400, 200, 0, 0}
},
{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 2000, 2000, 2000, 2000, 2000, 1000, 0, 0},
{0, 0, 3000, 3000, 3000, 3000, 1000, 1000, 0, 0}
}
};
};
#endif
/*!
* \file main.cpp
*/
#include <iostream>
#include <string>
#include <gtkmm/comboboxtext.h>
#include <gtkmm/label.h>
#include <gtkmm/main.h>
#include <gtkmm/table.h>
#include <gtkmm/box.h>
#include <gtkmm/window.h>
#include "grille.hpp"
using namespace std;
Gtk::ComboBoxText* choix[10];
Gtk::Label* gir;
string chaineGIR;
void calcul();
int calculSomme(int c);
int calculModalite(int variable);
int calculGIR(int rang);
void configurerComboBox(Gtk::ComboBoxText &combo);
int main(int argc, char** argv){
Gtk::Main app(argc,argv);
Gtk::Window fenetre;
fenetre.set_title("Calculateur AGGIR");
fenetre.set_position(Gtk::WIN_POS_CENTER);
fenetre.set_default_size(480,360);
Gtk::VBox boite;
fenetre.add(boite);
Gtk::Table table(Grille::NOMBRE_VARIABLE+1,2,false);
boite.pack_start(table);
for(int i = 0 ; i < 10 ; i++){
choix[i] = Gtk::manage(new Gtk::ComboBoxText());
configurerComboBox(*choix[i]);
table.attach(*choix[i],1,2,i,i+1);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Cohérence"));
table.attach(*label,0,1,0,1);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Orientation"));
table.attach(*label,0,1,1,2);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Toilette"));
table.attach(*label,0,1,2,3);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Habillage"));
table.attach(*label,0,1,3,4);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Alimentation"));
table.attach(*label,0,1,4,5);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Elimination"));
table.attach(*label,0,1,5,6);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Transfert"));
table.attach(*label,0,1,6,7);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Déplacement intérieur"));
table.attach(*label,0,1,7,8);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Déplacement extérieur"));
table.attach(*label,0,1,8,9);
}
{
Gtk::Label *label = Gtk::manage(new Gtk::Label("Communication"));
table.attach(*label,0,1,9,10);
}
Gtk::HBox resultat;
boite.pack_start(resultat);
Gtk::Label label("GIR : ");
resultat.pack_start(label);
gir = Gtk::manage(new Gtk::Label("Niveau non déterminé"));
resultat.pack_start(*gir);
Gtk::Button boutonCalcul("Calculer GIR");
resultat.pack_end(boutonCalcul);
boutonCalcul.signal_clicked().connect(sigc::ptr_fun(&calcul));
fenetre.show_all();
Gtk::Main::run(fenetre);
return 0;
}
void configurerComboBox(Gtk::ComboBoxText &combo){
combo.append("Modalité A");
combo.append("Modalité B");
combo.append("Modalité C");
combo.set_active_text("Modalité A");
}
void calcul(){
for(int i = 0 ; i < Grille::NOMBRE_RANG ; i++){
if(Grille::rangs[i][1] <= calculSomme(Grille::rangs[i][0])){
chaineGIR.clear();
chaineGIR += ((char) 48 + calculGIR(i));
gir->set_text(chaineGIR);
break;
}
}
}
int calculSomme(int c){
int somme = 0;
for(int i = 0 ; i < Grille::NOMBRE_VARIABLE ; i++){
somme += Grille::valeurs[c][calculModalite(i)][i];
}
return somme;
}
int calculModalite(int variable){
if(choix[variable]->get_active_text() == string("Modalité B")){
return Grille::ModaliteB;
} else if(choix[variable]->get_active_text() == string("Modalité C")){
return Grille::ModaliteC;
} else {
return Grille::ModaliteA;
}
}
int calculGIR(int rang){
for(int i = 0 ; i < Grille::NOMBRE_GIR ; i++){
if(rang <= Grille::gir[i]){
return i+1;
}
}
return -1;
}
CXX = g++
CXXFLAGS = -Wall -Wextra `pkg-config --cflags gtkmm-3.0`
LDFLAGS = `pkg-config --libs gtkmm-3.0`
OBJ = ./objs/main.o
EXEC = aggir.exe
$(EXEC) : $(OBJ)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
./objs/main.o : main.cpp
$(CXX) $(CXXFLAGS) -o $@ -c $< $(LDFLAGS)
clean :
rm -rf *.exe *~ objs/*
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment