---
# System prepended metadata

title: Mise en recette Workflow dérogation MAXS
tags: [MAXS]

---

# Mise en recette Workflow dérogation MAXS
###### tags: `MAXS`
- [x] PR de master vers recette
    - commit avant PR : 65aa4cee1b185f0c430094adf8e3656cbd159aaf
- [x] tester la version
- [x] PR de recette vers master
### Création / modification tables
- [x] MAXS_METIER_VALIDATION
``` sql
ALTER TABLE MAXSADMMIGR.MAXS_METIER_VALIDATEUR
MODIFY(POIDS_VALIDATION VARCHAR2(10 BYTE));
```
- [x] MAXS_SIMULATION
``` sql
ALTER TABLE MAXSADMMIGR.MAXS_SIMULATION
MODIFY(MONTANT VARCHAR2(15 BYTE));
ALTER TABLE MAXSADMMIGR.MAXS_SIMULATION
MODIFY(DUREE VARCHAR2(16 BYTE));
ALTER TABLE MAXSADMMIGR.MAXS_SIMULATION
MODIFY(FRAIS_DOSSIER VARCHAR2(8 BYTE));
```
- [x] MAXS_FOYER
``` sql
ALTER TABLE MAXSADMMIGR.MAXS_FOYER ADD (NB_PERSONNES_TMP NUMBER);
UPDATE MAXSADMMIGR.MAXS_FOYER SET NB_PERSONNES_TMP = to_number(replace(NB_PERSONNES, '.' , ','));
ALTER TABLE MAXSADMMIGR.MAXS_FOYER DROP COLUMN NB_PERSONNES;0
ALTER TABLE MAXSADMMIGR.MAXS_FOYER RENAME COLUMN NB_PERSONNES_TMP TO NB_PERSONNES;
```
- [x] SEQ_VALIDATION_SIMULATION
``` sql
CREATE SEQUENCE MAXSADMMIGR.SEQ_VALIDATION_SIMULATION
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 0
  NOCYCLE
  NOCACHE
  NOORDER
  NOKEEP
  GLOBAL;
```
- [x] MAXS_METIER_VALIDATEUR
``` sql
ALTER TABLE MAXSADMMIGR.MAXS_METIER_VALIDATEUR
 ADD (REDUCTION_DEROGATION  VARCHAR2(10 BYTE) NOT NULL);
```
- [x] MAXS_VALIDATION_SIMULATION
``` sql
ALTER TABLE MAXSADMMIGR.MAXS_VALIDATION_SIMULATION
 ADD (COMMENTAIRE  VARCHAR2(500 BYTE));
```
- [x] MAXS_LIENS_VALIDATEURS
``` sql
CREATE TABLE MAXS_LIENS_VALIDATEURS
(
  ID_VALIDATEUR  NUMBER                         NOT NULL,
  ID_SUPERIEUR   NUMBER                         NOT NULL,
  ORDRE          NUMBER
)
TABLESPACE DAT_PROD
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
MONITORING;


CREATE UNIQUE INDEX MAXS_LIENS_VALIDATEURS_PK ON MAXS_LIENS_VALIDATEURS
(ID_VALIDATEUR, ID_SUPERIEUR)
NOLOGGING
TABLESPACE DAT_PROD
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MAXS_LIENS_VALIDATEURS ADD (
  CONSTRAINT MAXS_LIENS_VALIDATEURS_PK
  PRIMARY KEY
  (ID_VALIDATEUR, ID_SUPERIEUR)
  USING INDEX MAXS_LIENS_VALIDATEURS_PK
  ENABLE VALIDATE);

ALTER TABLE MAXS_LIENS_VALIDATEURS ADD (
  CONSTRAINT MAXS_LIENS_VALIDATEURS_R01 
  FOREIGN KEY (ID_VALIDATEUR) 
  REFERENCES MAXS_METIER_VALIDATEUR (ID_METIER_VALIDATEUR)
  ON DELETE CASCADE
  ENABLE VALIDATE,
  CONSTRAINT MAXS_LIENS_VALIDATEURS_R02 
  FOREIGN KEY (ID_SUPERIEUR) 
  REFERENCES MAXS_METIER_VALIDATEUR (ID_METIER_VALIDATEUR)
  ENABLE VALIDATE);
```
- [x] CONTRAINTES
``` sql
DELETE FROM MAXS_FOYER WHERE ID_SIMULATION IN (
SELECT DISTINCT ID_SIMULATION FROM MAXS_SIMULATION WHERE ID_SIMULATION NOT IN (
SELECT ID_SIMULATION FROM MAXS_FOYER)
UNION ALL SELECT DISTINCT ID_SIMULATION FROM MAXS_FOYER WHERE ID_SIMULATION NOT IN (
SELECT ID_SIMULATION FROM MAXS_SIMULATION));
ALTER TABLE MAXS_FOYER
 ADD CONSTRAINT MAXS_FOYER_R01 
  FOREIGN KEY (ID_SIMULATION) 
  REFERENCES MAXS_SIMULATION (ID_SIMULATION)
  ON DELETE CASCADE;
  
DELETE FROM MAXS_SIMULATION_CRITERE WHERE ID_SIMULATION IN(
SELECT DISTINCT ID_SIMULATION FROM MAXS_SIMULATION_CRITERE WHERE ID_SIMULATION NOT IN (
SELECT ID_SIMULATION FROM MAXS_SIMULATION)
UNION ALL 
SELECT DISTINCT ID_SIMULATION FROM MAXS_SIMULATION WHERE ID_SIMULATION NOT IN (
SELECT ID_SIMULATION FROM MAXS_SIMULATION_CRITERE));
ALTER TABLE MAXSADMMIGR.MAXS_SIMULATION_CRITERE
 ADD CONSTRAINT MAXS_SIMULATION_CRITERE_R02 
  FOREIGN KEY (ID_SIMULATION) 
  REFERENCES MAXSADMMIGR.MAXS_SIMULATION (ID_SIMULATION)
  ON DELETE CASCADE;
  
DELETE FROM MAXS_SIMULATION_PRODUIT WHERE ID_SIMULATION IN(
SELECT DISTINCT ID_SIMULATION FROM MAXS_SIMULATION_PRODUIT WHERE ID_SIMULATION NOT IN (
SELECT ID_SIMULATION FROM MAXS_SIMULATION)
UNION ALL 
SELECT DISTINCT ID_SIMULATION FROM MAXS_SIMULATION WHERE ID_SIMULATION NOT IN (
SELECT ID_SIMULATION FROM MAXS_SIMULATION_PRODUIT));
ALTER TABLE MAXSADMMIGR.MAXS_SIMULATION_PRODUIT
 ADD CONSTRAINT MAXS_SIMULATION_PRODUITS_R01 
  FOREIGN KEY (ID_SIMULATION) 
  REFERENCES MAXSADMMIGR.MAXS_SIMULATION (ID_SIMULATION)
  ON DELETE CASCADE;
```
- [x] Peupler les tables depuis MAXSADMREC 
    - [x] MAXS_ETAT_SIMULATION
    - [x] MAXS_METIER_VALIDATEUR
    - [x] MAXS_LIENS_VALIDATEUR 
- [x] GRANT de MAXS vers CORR_METIER
- [x] [maxs_stceb] dans db-oracle.ini
- [x] J'ai commenté des lignes dans api.php pour que ça marche : MAXS::DEMANDE_INTERDITE => voir le commun ? 111..113
``` php
if (!$estUtilisateur) {
    $action = Maxs::DEMANDE_INTERDIT
}
```
- [x] Modification de la règle de l'accès à la demande de dérogation en prod : simulation-validation-controleur.js pour ne pas lancer une demande lorsque le taux est au dessus du personnalisé mais en dessous du taux sans dérog et en s'assurant qu'il y a un taux demandé (des dérog sont parties sans taux demandés, les GC interrogés ne savent pas comment ils ont fait)
``` js
if (vm.input.tauxDemande < vm.input.tauxSansDerog && vm.input.tauxDemande < vm.input.tauxPersonnalise && vm.input.tauxDemande!=null)
``` 
- [x] Le lien dans les mails pointaient sur migr, correction faite en prod
- [x] problème pour stocker les nombes de personnes au foyer avec le séparateur , => corrigé en remplaçant la virgule par un point quand on insert 

## Requêtes de suivi de prod
- Jointure entre simulation et validation simulation pour pouvoir voir quels taux sont demandés en dérog => vérification de cohérence
``` sql
SELECT vs.*, 
    s.ID_AD_INSTRUCTEUR, 
    s.DUREE, 
    s.TAUX_STANDARD, 
    s.TAUX_PERSONNALISE, 
    s.TAUX_DEMANDE 
FROM MAXS_VALIDATION_SIMULATION vs
LEFT JOIN MAXS_SIMULATION s ON s.ID_SIMULATION=vs.ID_SIMUlATION
ORDER BY DATE_ENVOI_DEMANDE DESC;
```
- Compte des dérogation par ID_AD_VALIDATEUR avec Prénom et Nom
``` sql
SELECT ID_AD_VALIDATEUR, p.PRENOM, p.NOMUSU, COUNT(*) as "COMPTE", COUNT(DISTINCT DATE_DECISION) as "TRAITEE"
FROM MAXS_VALIDATION_SIMULATION vs
LEFT JOIN STCEB.PERSON@STCEB p ON p.ID_ADMSG = vs.ID_AD_VALIDATEUR
GROUP BY ID_AD_VALIDATEUR, p.PRENOM, p.NOMUSU
ORDER BY "COMPTE" DESC;
``` 
