feat: test different implementations to parse memory
This commit is contained in:
parent
3ff80fe093
commit
410845dad9
285
crates/services-sesam-vitale-sys/src/bindings.rs
Normal file
285
crates/services-sesam-vitale-sys/src/bindings.rs
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
#![allow(non_upper_case_globals)]
|
||||||
|
#![allow(non_camel_case_types)]
|
||||||
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
// Fonctions de gestion des données
|
||||||
|
|
||||||
|
pub fn SSV_LireCartePS(
|
||||||
|
NomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
NomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
CodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_LireDroitsVitale(
|
||||||
|
NomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
NomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
CodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
DateConsultation: *const ::std::os::raw::c_char,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_FormaterFactures(
|
||||||
|
cFactureACreer: ::std::os::raw::c_char,
|
||||||
|
cModeSecur: ::std::os::raw::c_char,
|
||||||
|
cTypeFlux: ::std::os::raw::c_char,
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
TailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_ChiffrerFacture(
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
TailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_SignerFactureVitale(
|
||||||
|
pcNomRessourceVitale: *const ::std::os::raw::c_char,
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
szTailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pszTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_CalculerHashFactureAssure(
|
||||||
|
pcNumSerie: *const ::std::os::raw::c_char,
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
szTailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pszTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_AjouterSignatureAssureDansFacture(
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
szTailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pszTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_SignerFactureCPS(
|
||||||
|
pcNomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
pcCodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
cNologSituation: ::std::os::raw::c_char,
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
szTailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pszTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_FormaterLot(
|
||||||
|
NBZDataIn: ::std::os::raw::c_short,
|
||||||
|
TZDataIn: *mut *mut ::std::os::raw::c_void,
|
||||||
|
TTailleZoneIn: *mut usize,
|
||||||
|
pNbZDataOut: *mut ::std::os::raw::c_short,
|
||||||
|
TZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
TTailleZoneOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_SignerLotCPS(
|
||||||
|
pcNomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
pcCodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
cNologSituation: ::std::os::raw::c_char,
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
szTailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pszTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_FormaterFichier(
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
TailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_TraduireARL(
|
||||||
|
NbZDonneesEntree: ::std::os::raw::c_short,
|
||||||
|
TZDataIn: *mut *mut ::std::os::raw::c_void,
|
||||||
|
TTailleZoneIn: *mut usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pTailleZoneOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_LireNumSerieCarteVitale(
|
||||||
|
pcNomRessource: *mut ::std::os::raw::c_char,
|
||||||
|
numeroSerie: *mut ::std::os::raw::c_uchar,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_CalculerHashFacturePS(
|
||||||
|
pcNumSerieCPS: *const ::std::os::raw::c_char,
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
usTailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pusTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_AjouterSignaturePSFacture(
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
szTailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pszTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_DechargerFacturesPdT(
|
||||||
|
NomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
NomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
CodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
pcNumFact: *const ::std::os::raw::c_char,
|
||||||
|
sNbZDataIn: ::std::os::raw::c_short,
|
||||||
|
pvTZDataIn: *mut *mut ::std::os::raw::c_void,
|
||||||
|
psTTailleDataIn: *mut usize,
|
||||||
|
pNbZDataOut: *mut ::std::os::raw::c_short,
|
||||||
|
TZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
TTailleZoneOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_TraduireFSE(
|
||||||
|
pZDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
TailleDataIn: usize,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pTailleZone: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
// Fonctions TLA
|
||||||
|
// TLA (Terminal Lecteur Applicatif) -> lecteur autre que PC-SC, on ne prend pas en compte cela
|
||||||
|
|
||||||
|
pub fn SSV_IdentifierTLA(
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
NumVersionCDC: *const ::std::os::raw::c_char,
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
tailleDataOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_ChargerDonneesTLA(
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
sNbZDataIn: ::std::os::raw::c_short,
|
||||||
|
pvTZDataIn: *mut *mut ::std::os::raw::c_void,
|
||||||
|
psTTailleDataIn: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_ChargerFacturesPdT(
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
pcNumFacturation: *const ::std::os::raw::c_char,
|
||||||
|
sNbZDataIn: ::std::os::raw::c_short,
|
||||||
|
pvTZDataIn: *mut *mut ::std::os::raw::c_void,
|
||||||
|
psTTailleDataIn: *mut usize,
|
||||||
|
pNbZDataOut: *mut ::std::os::raw::c_short,
|
||||||
|
TZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
TTailleZoneOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_DechargerFSETLA(
|
||||||
|
NomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
NomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
CodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
pcNumFact: *const ::std::os::raw::c_char,
|
||||||
|
pNbZDataOut: *mut ::std::os::raw::c_short,
|
||||||
|
TZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
TTailleZoneOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_DechargerFSETLANC(
|
||||||
|
NomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
NomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
CodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
pcNumFact: *const ::std::os::raw::c_char,
|
||||||
|
pNbZDataOut: *mut ::std::os::raw::c_short,
|
||||||
|
TZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
TTailleZoneOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_DechargerBeneficiaires(
|
||||||
|
NomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
NomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
CodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
cNumFacturation: *const ::std::os::raw::c_char,
|
||||||
|
sNbZDataOut: *mut ::std::os::raw::c_short,
|
||||||
|
pTZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
sTTailleDataOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_EffacerTLA(
|
||||||
|
NomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
NomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
CodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
cNumFacturation: *const ::std::os::raw::c_char,
|
||||||
|
cTypeDonnee: *const ::std::os::raw::c_char,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
pub fn SSV_SecuriserFacture(
|
||||||
|
pcNomRessourcePS: *const ::std::os::raw::c_char,
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
pcCodePorteurPS: *const ::std::os::raw::c_char,
|
||||||
|
cNologSituation: ::std::os::raw::c_char,
|
||||||
|
pcNumFact: *const ::std::os::raw::c_char,
|
||||||
|
pvDataIn: *mut ::std::os::raw::c_void,
|
||||||
|
szTailleDataIn: usize,
|
||||||
|
pvDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
pszTailleDataOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
// Fonctions de gestion de configuration (GALSS)
|
||||||
|
|
||||||
|
pub fn SSV_LireConfig(
|
||||||
|
pZDataOut: *mut *mut ::std::os::raw::c_void,
|
||||||
|
psTailleDataOut: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_LireDateLecteur(
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
pcDateHeure: *mut ::std::os::raw::c_char,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_MajDateLecteur(
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
pcDateHeure: *const ::std::os::raw::c_char,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
pub fn SSV_ChargerAppli(
|
||||||
|
pcNomRessourceLecteur: *const ::std::os::raw::c_char,
|
||||||
|
sNbZDataIn: ::std::os::raw::c_short,
|
||||||
|
pvTZDataIn: *mut *mut ::std::os::raw::c_void,
|
||||||
|
psTTailleDataIn: *mut usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
// Fonctions techniques
|
||||||
|
|
||||||
|
// La fonction Initialiser Librairie a pour objet de charger et d’initialiser dans la mémoire du système :
|
||||||
|
// - dans le cas où le GALSS est installé sur le poste :
|
||||||
|
// - la bibliothèque du Gestionnaire d’Accès au Lecteur Santé Social (GALSS),
|
||||||
|
// - qui charge la bibliothèque du Protocole Santé Social (PSS),
|
||||||
|
// - la configuration du poste de travail à l’aide du fichier galssinf,
|
||||||
|
// - les variables globales communes aux différents Services SESAM-Vitale,
|
||||||
|
// - les fichiers de tables et scripts des répertoires par défaut.
|
||||||
|
// Cette fonction accède au référentiel électronique en utilisant le chemin complet indiqué dans le fichier sesam.ini.
|
||||||
|
pub fn SSV_InitLIB2(pcFichierSesam: *const ::std::os::raw::c_char) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
// La fonction Terminer a pour objet de décharger de la mémoire du système les éléments
|
||||||
|
// chargés par la fonction Initialiser Librairie, qui ne sont plus utiles.
|
||||||
|
pub fn SSV_TermLIB() -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
/// Fonctions de Tracage
|
||||||
|
//La fonction Allouer Zone Mémoire a un rôle purement technique : elle permet d’allouer, autrement dit de réserver une zone ou partie de la mémoire du poste de travail pour y écrire les données à passer en entrée d’un Service SESAM-Vitale.
|
||||||
|
// Cette fonction doit être utilisée pour allouer toutes les zones de mémoire requises en entrée des Services SESAM-Vitale de manière à permettre un diagnostic fiable par le « mode trace » en cas de dysfonctionnement. En effet, son mode d’exécution est susceptible de fournir des informations utiles au « mode trace » lorsqu’il est activé.
|
||||||
|
pub fn SSV_AllouerZoneMem(
|
||||||
|
pZDataIn: *mut *mut ::std::os::raw::c_void,
|
||||||
|
taille: usize,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
// La fonction Libérer Zone Mémoire a un rôle purement technique : elle permet de libérer une zone de mémoire du poste de travail précédemment allouée après exploitation des données qu’elle contient.
|
||||||
|
// Cette fonction doit être utilisée pour libérer toutes les zones de mémoire :
|
||||||
|
// - celles qui ont été allouées par le progiciel de santé pour fournir les données nécessaires à l’entrée des Services SESAM-Vitale, avant leur appel, celles qui ont été allouées par les Services SESAM-Vitale pour fournir en sortie les données utiles au progiciel de santé qui a fait appel à ces services,
|
||||||
|
// - de façon à permettre un diagnostic fiable par le mode trace en cas de dysfonctionnement
|
||||||
|
//En effet, son exécution est susceptible de fournir des informations utiles au « mode trace » lorsqu’il est activé.
|
||||||
|
pub fn SSV_LibererZoneMem(pZone: *mut ::std::os::raw::c_void);
|
||||||
|
|
||||||
|
// La fonction Initialiser Trace a pour objet de permettre l’activation du « mode trace ».
|
||||||
|
// Ce mode de fonctionnement est prévu pour permettre à l’assistance technique du GIE
|
||||||
|
// SESAM-Vitale d’analyser les problèmes de mise en œuvre des Services SESAM-Vitale,
|
||||||
|
// notamment lorsque une fonction retourne un code d’erreur de valeur hexadécimale supérieure à FF00.
|
||||||
|
pub fn SSV_InitTrace(
|
||||||
|
pathConf: *mut ::std::os::raw::c_char,
|
||||||
|
ModeOuvertureFicherLog: *mut ::std::os::raw::c_char,
|
||||||
|
ModuleLog: ::std::os::raw::c_ushort,
|
||||||
|
NiveauLog: ::std::os::raw::c_uchar,
|
||||||
|
) -> ::std::os::raw::c_ushort;
|
||||||
|
|
||||||
|
}
|
264
crates/services-sesam-vitale-sys/src/types/common.rs
Normal file
264
crates/services-sesam-vitale-sys/src/types/common.rs
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
pub struct Identification<T> {
|
||||||
|
value: T,
|
||||||
|
// Key to check the validity of the value
|
||||||
|
// TODO: implement checking algorithm
|
||||||
|
key: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type Byte = u8;
|
||||||
|
|
||||||
|
pub(crate) enum IdentificationNationale {
|
||||||
|
NumeroAdeli(String),
|
||||||
|
NumeroEmployeeDansStructure(IdentificationStructure, String),
|
||||||
|
NumeroDRASS(String),
|
||||||
|
NumeroRPPS(String),
|
||||||
|
/// N° Etudiant Médecin type ADELI sur 9 caractères (information transmise par l’ANS)
|
||||||
|
NumeroEtudiantMedecin(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum TypeCarteProfessionnelSante {
|
||||||
|
/// Carte de Professionnel de Santé (CPS)
|
||||||
|
CarteDeProfessionnelSante,
|
||||||
|
/// Carte de Professionnel de Santé en Formation (CPF)
|
||||||
|
CarteDeProfessionnelSanteEnFormation,
|
||||||
|
/// Carte de Personnel d'Établissement de Santé (CDE/CPE)
|
||||||
|
CarteDePersonnelEtablissementSante,
|
||||||
|
/// Carte de Personnel Autorisé (CDA/CPA)
|
||||||
|
CarteDePersonnelAutorise,
|
||||||
|
/// Carte de Personne Morale
|
||||||
|
CarteDePersonneMorale,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum CategorieCarteProfessionnelSante {
|
||||||
|
Reelle,
|
||||||
|
Test,
|
||||||
|
Demonstration,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum CodeCivilite {
|
||||||
|
Adjudant,
|
||||||
|
Amiral,
|
||||||
|
Aspirant,
|
||||||
|
Aumônier,
|
||||||
|
Capitaine,
|
||||||
|
Cardinal,
|
||||||
|
Chanoine,
|
||||||
|
Colonel,
|
||||||
|
Commandant,
|
||||||
|
Commissaire,
|
||||||
|
Conseiller,
|
||||||
|
Directeur,
|
||||||
|
Docteur,
|
||||||
|
Douanier,
|
||||||
|
Epouxse, // Epoux(se)
|
||||||
|
Evêque,
|
||||||
|
Général,
|
||||||
|
Gouverneur,
|
||||||
|
Ingénieur,
|
||||||
|
Inspecteur,
|
||||||
|
Lieutenant,
|
||||||
|
Madame,
|
||||||
|
Mademoiselle,
|
||||||
|
Maître,
|
||||||
|
Maréchal,
|
||||||
|
Médecin,
|
||||||
|
Mesdames,
|
||||||
|
Mesdemoiselles,
|
||||||
|
Messieurs,
|
||||||
|
Monseigneur,
|
||||||
|
Monsieur,
|
||||||
|
NotreDame,
|
||||||
|
Pasteur,
|
||||||
|
Préfet,
|
||||||
|
Président,
|
||||||
|
Professeur,
|
||||||
|
Recteur,
|
||||||
|
Sergent,
|
||||||
|
SousPréfet,
|
||||||
|
Technicien,
|
||||||
|
Veuve,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum IdentificationStructure {
|
||||||
|
NumeroAdeliCabinet(String),
|
||||||
|
NumeroFINESS(String),
|
||||||
|
NumeroSIREN(String),
|
||||||
|
NumeroSIRET(String),
|
||||||
|
NumeroRPPSCabinet(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum ModeExercice {
|
||||||
|
LiberalExploitantCommercant, // Libéral, exploitant, commerçant
|
||||||
|
Salarie,
|
||||||
|
Remplacant,
|
||||||
|
Benevole,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum StatutExercice {
|
||||||
|
// TAB-Statuts géré par l’ANS il faut trouver la donnee
|
||||||
|
PLACEHOLDER(u8),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum SecteurActivite {
|
||||||
|
EtablissementPublicDeSanté,
|
||||||
|
HopitauxMilitaires,
|
||||||
|
EtablissementPrivePSPH, // Participant au Service Public Hospitalier
|
||||||
|
EtablissementPriveNonPSPH,
|
||||||
|
DispensaireDeSoins,
|
||||||
|
AutresStructuresDeSoinsRelevantDuServiceDeSanteDesArmees,
|
||||||
|
CabinetIndividuel,
|
||||||
|
CabinetDeGroupe,
|
||||||
|
ExerciceEnSociete,
|
||||||
|
SecteurPrivePHTempsPlein,
|
||||||
|
TransportSanitaire,
|
||||||
|
EntrepriseDInterim,
|
||||||
|
EtablissementDeSoinsEtPrevention,
|
||||||
|
PreventionEtSoinsEnEntreprise,
|
||||||
|
SanteScolaireEtUniversitaire,
|
||||||
|
RecrutementEtGestionRH,
|
||||||
|
PMIPlanificationFamiliale,
|
||||||
|
EtablissementPourHandicapes,
|
||||||
|
ComMarketingConsultingMedia,
|
||||||
|
EtablissementPersonnesAgees,
|
||||||
|
EtablissementAideaLaFamille,
|
||||||
|
EtablissementDEnseignement,
|
||||||
|
EtablissementsDeProtectionDeLEnfance,
|
||||||
|
EtablissementsDHebergementEtDeReadaptation,
|
||||||
|
Recherche,
|
||||||
|
AssurancePrivee,
|
||||||
|
OrganismeDeSecuriteSociale,
|
||||||
|
MinistèreEtServicesDeconcentres,
|
||||||
|
CollectivitesTerritoriales,
|
||||||
|
AssociationsEtOrganitationsHumanitaire,
|
||||||
|
LaboratoireDeBiologieMedicale,
|
||||||
|
AutreEtablissementSanitaire,
|
||||||
|
ProductionCommercialisationGrosBienMedicaux,
|
||||||
|
CommerceDétailDeBiensMédicaux,
|
||||||
|
PharmacieDOfficine,
|
||||||
|
CentreDeDialyse,
|
||||||
|
ParaPharmacie,
|
||||||
|
AutreSecteurDActivité,
|
||||||
|
SecteurNonDefini,
|
||||||
|
CentreAntiCancer,
|
||||||
|
CentreDeTransfusionSanguine,
|
||||||
|
RépartitionDistribributionFabricationExploitationImportationMedicamentsEtDispositifsMédicaux,
|
||||||
|
IncendiesEtSecours,
|
||||||
|
EntreprisesIndustriellesEtTertiairesHorsIndustriesPharmaceutiques,
|
||||||
|
EntiteDUnTOM,
|
||||||
|
FabricationExploitationImportationMedicamentsEtDispositifsMedicaux,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) type IdentificationFacturation = u32;
|
||||||
|
pub(crate) enum CodeConventionnel {
|
||||||
|
NonConventionne,
|
||||||
|
Conventionne,
|
||||||
|
ConventionneAvecDepassement,
|
||||||
|
ConventionneAvecHonorairesLibres,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Code spécialité ou Code spécialité de l'exécutant
|
||||||
|
pub(crate) enum CodeSpecialite {
|
||||||
|
MedecineGenerale,
|
||||||
|
AnesthesieReanimation,
|
||||||
|
Cardiologie,
|
||||||
|
ChirurgieGenerale,
|
||||||
|
DermatologieEtVenerologie,
|
||||||
|
Radiologie,
|
||||||
|
GynecologieObstetrique,
|
||||||
|
GastroEnterologieEtHepatologie,
|
||||||
|
MedecineInterne,
|
||||||
|
NeuroChirurgie,
|
||||||
|
OtoRhinoLaryngologie,
|
||||||
|
Pediatrie,
|
||||||
|
Pneumologie,
|
||||||
|
Rhumatologie,
|
||||||
|
Ophtalmologie,
|
||||||
|
ChirurgieUrologique,
|
||||||
|
NeuroPsychiatrie,
|
||||||
|
Stomatologie,
|
||||||
|
ChirurgienDentiste,
|
||||||
|
ReanimationMedicale,
|
||||||
|
SageFemme,
|
||||||
|
SpecialisteEnMedecineGeneraleAvecDiplome,
|
||||||
|
SpecialisteEnMedecineGeneraleReconnuParLOrdre,
|
||||||
|
Infirmier,
|
||||||
|
Psychologue,
|
||||||
|
MasseurKinesitherapeute,
|
||||||
|
PedicurePodologue,
|
||||||
|
Orthophoniste,
|
||||||
|
Orthoptiste,
|
||||||
|
LaboratoireDAnalysesMedicales,
|
||||||
|
ReeducationReadaptationFonctionnelle,
|
||||||
|
Neurologie,
|
||||||
|
Psychiatrie,
|
||||||
|
Geriatrie,
|
||||||
|
Nephrologie,
|
||||||
|
ChirurgieDentaireSpecialiteODF,
|
||||||
|
AnatomoCytoPathologie,
|
||||||
|
MedecinBiologiste,
|
||||||
|
LaboratoirePolyvalent,
|
||||||
|
LaboratoireDAnatomoCytoPathologique,
|
||||||
|
ChirurgieOrthopediqueEtTraumatologie,
|
||||||
|
EndocrinologieEtMetabolisme,
|
||||||
|
ChirurgieInfantile,
|
||||||
|
ChirurgieMaxilloFaciale,
|
||||||
|
ChirurgieMaxilloFacialeEtStomatologie,
|
||||||
|
ChirurgiePlastiqueReconstructriceEtEsthetique,
|
||||||
|
ChirurgieThoraciqueEtCardioVasculaire,
|
||||||
|
ChirurgieVasculaire,
|
||||||
|
ChirurgieVisceraleEtDigestive,
|
||||||
|
PharmacieDOfficine,
|
||||||
|
PharmacieMutualiste,
|
||||||
|
ChirurgienDentisteSpecialiteCO,
|
||||||
|
ChirurgienDentisteSpecialiteMBD,
|
||||||
|
PrestataireDeTypeSociete,
|
||||||
|
PrestataireArtisan,
|
||||||
|
PrestataireDeTypeAssociation,
|
||||||
|
Orthesiste,
|
||||||
|
Opticien,
|
||||||
|
Audioprothesiste,
|
||||||
|
ÉpithesisteOculariste,
|
||||||
|
PodoOrthesiste,
|
||||||
|
Orthoprothesiste,
|
||||||
|
ChirurgieOrale,
|
||||||
|
GynecologieMedicale,
|
||||||
|
Hematologie,
|
||||||
|
MedecineNucleaire,
|
||||||
|
OncologieMedicale,
|
||||||
|
OncologieRadiotherapique,
|
||||||
|
PsychiatrieDeLEnfantEtDeLAdolescent,
|
||||||
|
Radiotherapie,
|
||||||
|
Obstetrique,
|
||||||
|
GenetiqueMedicale,
|
||||||
|
ObstetriqueEtGynecologieMedicale,
|
||||||
|
SantePubliqueEtMedecineSociale,
|
||||||
|
MedecineDesMaladiesInfectieusesEtTropicales,
|
||||||
|
MedecineLegaleEtExpertisesMedicales,
|
||||||
|
MedecineDUrgence,
|
||||||
|
MedecineVasculaire,
|
||||||
|
Allergologie,
|
||||||
|
InfirmierExercantEnPratiquesAvancees, // IPA
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Page 54 dictionnaires des donnees
|
||||||
|
/// donnees inutilises pour les pharmacies
|
||||||
|
pub(crate) enum CodeZoneTarifaire {}
|
||||||
|
|
||||||
|
pub(crate) enum CodeZoneIK {
|
||||||
|
PasIndemniteKilometrique,
|
||||||
|
IndemnitesKilometriquesPlaine,
|
||||||
|
IndemnitesKilometriquesMontagne,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) enum CodeAgrement {
|
||||||
|
PasDAgrementRadio,
|
||||||
|
/// Agrément D ou agrément DDASS
|
||||||
|
AgrementDDASS,
|
||||||
|
/// Agrément A, B, C, E et F
|
||||||
|
AgrementABCEF,
|
||||||
|
/// Agrément G, H et J
|
||||||
|
AgrementGHJ,
|
||||||
|
AgrementK,
|
||||||
|
AgrementL,
|
||||||
|
AgrementM,
|
||||||
|
}
|
3
crates/services-sesam-vitale-sys/src/types/mod.rs
Normal file
3
crates/services-sesam-vitale-sys/src/types/mod.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub(crate) mod types;
|
||||||
|
pub mod common;
|
||||||
|
pub mod serialization_types;
|
@ -0,0 +1,81 @@
|
|||||||
|
use std::cmp::Ordering;
|
||||||
|
|
||||||
|
use binrw::{BinRead, BinResult};
|
||||||
|
use bitreader::{BitReader, BitReaderError};
|
||||||
|
|
||||||
|
fn parse_memory_zone_size_bitreader(bytes: &[u8; 5]) -> Result<u32, BitReaderError> {
|
||||||
|
let mut reader = BitReader::new(bytes);
|
||||||
|
|
||||||
|
let zone_size_bit_count = match reader.read_bool()? {
|
||||||
|
true => 7,
|
||||||
|
false => reader.read_u8(7)? * 8,
|
||||||
|
};
|
||||||
|
Ok(reader.read_u32(zone_size_bit_count)?)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[binrw::parser(reader)]
|
||||||
|
fn parse_memory_zone_size() -> BinResult<u32> {
|
||||||
|
let mut value: u8 = 0;
|
||||||
|
|
||||||
|
|
||||||
|
reader.read_exact(std::slice::from_mut(&mut value));
|
||||||
|
|
||||||
|
// first bit s 0 <=> value < 128
|
||||||
|
match value.cmp(&128) {
|
||||||
|
Ordering::Less => {
|
||||||
|
Ok(value.into())
|
||||||
|
}
|
||||||
|
Ordering::Equal | Ordering::Greater => {
|
||||||
|
let zone_size_encoding_byte_count = value - 128;
|
||||||
|
let mut buf: Vec<u8> = vec![0; zone_size_encoding_byte_count.into()];
|
||||||
|
reader.read_exact(&mut buf);
|
||||||
|
|
||||||
|
let mut result = 0u32;
|
||||||
|
|
||||||
|
for (i, &byte) in buf.iter().enumerate() {
|
||||||
|
result += (byte as u32) << (8 * i);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(BinRead)]
|
||||||
|
struct MemoryZone {
|
||||||
|
#[br(parse_with = parse_memory_zone_size)]
|
||||||
|
memory_size: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum TypeIdentificationStructure {
|
||||||
|
NumeroAdeliCabinet,
|
||||||
|
NumeroFINESS,
|
||||||
|
NumeroSIREN,
|
||||||
|
NumeroSIRET,
|
||||||
|
NumeroRPPSCabinet,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum TypeDIdentificationNationale {
|
||||||
|
NumeroAdeli,
|
||||||
|
NumeroAdeliCabinetNumeroEmploye,
|
||||||
|
NumeroDRASS,
|
||||||
|
NumeroFINESSNumeroEmploye,
|
||||||
|
NumeroSIRENNumeroEmploye,
|
||||||
|
NumeroSIRETNumeroEmploye,
|
||||||
|
NumeroRPPSCabinetNumeroEmploye,
|
||||||
|
NumeroRPPS,
|
||||||
|
/// N° Etudiant Médecin type ADELI sur 9 caractères (information transmise par l’ANS)
|
||||||
|
NumeroEtudiantMedecin,
|
||||||
|
}
|
||||||
|
pub(crate) enum TypeCartePS {
|
||||||
|
/// Carte de Professionnel de Santé (CPS)
|
||||||
|
CarteDeProfessionnelSante,
|
||||||
|
/// Carte de Professionnel de Santé en Formation (CPF)
|
||||||
|
CarteDeProfessionnelSanteEnFormation,
|
||||||
|
/// Carte de Personnel d'Établissement de Santé (CDE/CPE)
|
||||||
|
CarteDePersonnelEtablissementSante,
|
||||||
|
/// Carte de Personnel Autorisé (CDA/CPA)
|
||||||
|
CarteDePersonnelAutorise,
|
||||||
|
/// Carte de Personne Morale
|
||||||
|
CarteDePersonneMorale,
|
||||||
|
}
|
45
crates/services-sesam-vitale-sys/src/types/types.rs
Normal file
45
crates/services-sesam-vitale-sys/src/types/types.rs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
pub(crate) use crate::types::common::IdentificationNationale;
|
||||||
|
|
||||||
|
use super::common::{
|
||||||
|
Byte, CategorieCarteProfessionnelSante, CodeAgrement, CodeCivilite, CodeConventionnel,
|
||||||
|
CodeSpecialite, CodeZoneIK, CodeZoneTarifaire, Identification, IdentificationFacturation,
|
||||||
|
IdentificationStructure, ModeExercice, SecteurActivite, StatutExercice,
|
||||||
|
TypeCarteProfessionnelSante,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub(crate) struct CarteProfessionnelSante {
|
||||||
|
type_carte: TypeCarteProfessionnelSante,
|
||||||
|
categorie_carte: CategorieCarteProfessionnelSante,
|
||||||
|
professionnel_sante: ProfessionnelDeSante,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ProfessionnelDeSante {
|
||||||
|
prenom: String,
|
||||||
|
nom: String,
|
||||||
|
code_civilite: CodeCivilite,
|
||||||
|
identification_nationale: Identification<IdentificationNationale>,
|
||||||
|
situations_execice: Vec<SituationDExercice>,
|
||||||
|
}
|
||||||
|
struct StructureMedicale {
|
||||||
|
/// Nom Entreprise
|
||||||
|
raison_sociale: String,
|
||||||
|
identification: Identification<IdentificationStructure>,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SituationDExercice {
|
||||||
|
/// Numéro identifiant la situation du PS parmi ses autres situations inscrites sur sa CPS
|
||||||
|
identifiant_situation: Byte,
|
||||||
|
mode_exercice: Option<ModeExercice>,
|
||||||
|
statut_exercice: Option<StatutExercice>,
|
||||||
|
secteur_activite: Option<SecteurActivite>,
|
||||||
|
structure_d_exercice: Option<StructureMedicale>,
|
||||||
|
identification_facturation: Identification<IdentificationFacturation>,
|
||||||
|
identification_remplacant: Option<Identification<IdentificationNationale>>,
|
||||||
|
code_conventionnel: CodeConventionnel,
|
||||||
|
code_specialite: CodeSpecialite,
|
||||||
|
code_zone_tarifaire: CodeZoneTarifaire,
|
||||||
|
code_zone_ik: CodeZoneIK,
|
||||||
|
code_agrement: CodeAgrement,
|
||||||
|
habilite_signature_facture: bool,
|
||||||
|
habilite_signature_lot: bool,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user