Author: blavenier Date: 2013-03-13 16:09:25 +0100 (Wed, 13 Mar 2013) New Revision: 608 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/608 Log: Add : - add one page on website, for documentation on the mapping UI/DB Added: trunk/src/site/rst/mapping.rst Modified: trunk/src/site/site_fr.xml Added: trunk/src/site/rst/mapping.rst =================================================================== --- trunk/src/site/rst/mapping.rst (rev 0) +++ trunk/src/site/rst/mapping.rst 2013-03-13 15:09:25 UTC (rev 608) @@ -0,0 +1,307 @@ +.. - +.. * #%L +.. * Tutti :: Persistence Adagio (impl) +.. * $Id: referential.rst 301 2013-02-02 14:24:01Z tchemit $ +.. * $HeadURL: http://svn.forge.codelutin.com/svn/tutti/trunk/src/site/rst/referential.rst $ +.. * %% +.. * Copyright (C) 2012 - 2013 Ifremer +.. * %% +.. * This program is free software: you can redistribute it and/or modify +.. * it under the terms of the GNU General Public License as +.. * published by the Free Software Foundation, either version 3 of the +.. * License, or (at your option) any later version. +.. * +.. * This program is distributed in the hope that it will be useful, +.. * but WITHOUT ANY WARRANTY; without even the implied warranty of +.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.. * GNU General Public License for more details. +.. * +.. * You should have received a copy of the GNU General Public +.. * License along with this program. If not, see +.. * <http://www.gnu.org/licenses/gpl-3.0.html>. +.. * #L% +.. - + +============================================= +Tutti - Correspondance écrans/base de données +============================================= + +Présentation +~~~~~~~~~~~~ + +Ce document décrit comment sont stocker les informations visibles dans les écrans. + +Série de campagne +~~~~~~~~~~~~~~~~~ + +Nom + Program.name (PROGRAM.NAME) + +Zone + Program.locations (PROGRAM2LOCATION.LOCATION_FK) + +Commentaire + Program.description (PROGRAM.DESCRIPTION) + +Campagne +~~~~~~~~ + +Série + ScientificCruise.program (SCIENTIFIC_CRUISE.PROGRAM_FK) + +Année + En lecture : year(ScientificCruise.departureDateTime) (SCIENTIFIC_CRUISE.DEPARTURE_DATE_TIME) + En écriture : pas de stockage (car doit logiquement être compatible avec ScientificCruise.departureDateTime) + +Série partielle + ScientificCruise.fishingTrip.surveyMeasurement (SURVEY_MEASUREMENT.ALPHA_NUMERICAL_VALUE, avec PMFM_FK=<PMFM_ID_SURVEY_PART>) + +Name + ScientificCruise.name (SCIENTIFIC_CRUISE.NAME) + +Nombre de poches + En lecture : récupération de la plus grande valeur dans ScientificCruise.fishingTrip.gearPhysicalFeatures.gearPhysicalMeasurement.numericalvalue (GEAR_PHYSICAL_MEASURMENT.NUMERICAL_VALUE avec PMFM_FK=<PMFM_ID_MULTIRIG_NUMBER>) + En écriture : valeur dupliquée pour chaque engin (voir "Engin(s)" ci-dessous) dans ScientificCruise.fishingTrip.gearPhysicalFeatures.gearPhysicalMeasurement.numericalvalue (GEAR_PHYSICAL_MEASURMENT.NUMERICAL_VALUE avec PMFM_FK=<PMFM_ID_MULTIRIG_NUMBER>) + +Pays + En lecture : le pays est calculé à partir de ScientificCruise.departureLocation (SCIENTIFIC_CRUISE.DEPARTURE_LOCATION_FK) + en utilisant la hiérarchie des lieux (LOCATION_HIERARCHY) our être sûr d'obtenir un payx et non un lieux de niveau inférieur (ex : un port, etc.) + En écriture : ScientificCruise.departureLocation (SCIENTIFIC_CRUISE.DEPARTURE_LOCATION_FK) et ScientificCruise.returnLocation (SCIENTIFIC_CRUISE.DEPARTURE_LOCATION_FK) + +Date de début + ScientificCruise.departureDateTime (SCIENTIFIC_CRUISE.DEPARTURE_DATE_TIME) + +Date de fin + ScientificCruise.returnDateTime (SCIENTIFIC_CRUISE.RETURN_DATE_TIME) + +Navire(s) + Le premier navire dans le liste est stocké dans ScientificCruise.vessel (SCIENTIFIC_CRUISE.VESSEL_FK). + Les navires suivants sont stockés dans ScientificCruise.fishingTrip.comments + derrière la balise : #VESSELS=<liste_des_IDs> + Il n'est pas certain qu'il soit nécessaire de stocker cette liste ailleurs, dans la mesure où + elle peut être calculée à partir de la liste des navires associés à chaque opération (voir "Opération > Navire" ci-dessous), + comme c'est le cas actuellement à l'ouverture d'une campagne de données historiques. + +Engin(s) + ScientificCruise.fishingTrip.gearPhysicalFeatures.gear (GEAR_PHYSICAL_FEATURES.GEAR_FK avec RANK_ORDER=<n° d'ordre dans la liste>) + +Chef(s) de mission + La première personne de la liste est stockée sous ScientificCruise.manager (SCIENTIFIC_CRUISE.MANAGER_PERSON_FK) + En v1, les identifiant des personnes suivantes sont stockées dans ScientificCruise.fishingTrip.comments + derrière la balise : #MANAGERS=<liste_des_IDs> + En v2, ce stockage devra se faire dans ScientificCruise.fishingTrip.vesselPersonFeatures avec un VesselPersonRole.id=<responsable_de_campagne> + +Responsable(s) de salle de tri + En v1, tous les identifiants des personnes sélectionnées sont stockées dans ScientificCruise.fishingTrip.comments + derrière la balise : #SORT_MANAGERS=<liste_des_IDs> + En v2, ce stockage devra se faire dans ScientificCruise.fishingTrip.vesselPersonFeatures avec un VesselPersonRole.id=<responsable_salle_de_tri> + +Commentaire + ScientificCruise.comments (SCIENTIFIC_CRUISE.COMMENTS) + +Trait +~~~~~ + +Code Station + Operation.vesselUseFeatures.vesselUseMeasurement (VESSEL_USE_MEASUREMENT.ALPHANUMERICAL_VALUE avec PMFM_FK=<PMFM_ID_STATION_NUMBER>) + +Numéro de trait + Operation.name (OPERATION.NAME) : ajouté à la fin du "name", derrière le code de l'engin, pour rester compatible avec le format des données historiques. + +Numéro de poche + Operation.gearUseFeatures.gearUseMeasurement (GEAR_USE_MEASUREMENT.ALPHANUMERICAL_VALUE avec PMFM_FK=<PMFM_ID_MULTIRIG_AGGREGATION>) + +Strate + Operation.gearUseFeatures.fishingArea.regulationLocation (FISHING_AREA2REG_LOCATION.LOCATION_FK associé au FISHING_AREA de l'opération) + En lecture : sélection en tant que locatlité à partir du locationLevel (LOCATION.LOCATION_LEVEL_FK=<LocationLevelId.STRATA>) + +Sous-strate + Operation.gearUseFeatures.fishingArea.regulationLocation (FISHING_AREA2REG_LOCATION.LOCATION_FK associé au FISHING_AREA de l'opération) + En lecture : sélection en tant que locatlité à partir du locationLevel (LOCATION.LOCATION_LEVEL_FK=<LocationLevelId.SUB_STRATA>) + +Localité + operation.gearUseFeatures.fishingArea.regulationLocation (FISHING_AREA2REG_LOCATION.LOCATION_FK associé au FISHING_AREA de l'opération) + En lecture : sélection en tant que locatlité à partir du locationLevel (LOCATION.LOCATION_LEVEL_FK=<LocationLevelId.LOCALITE>) + +Début de traine > Latitude, Longitude + Operation.vesselPosition (VESSEL_POSITION.LATITUDE et VESSEL_POSITION.LONGITUDE), avec startDateTime = "Début de traine > Date et heure" + +Début de traine > Date et heure + Operation.startDateTime et Operation.fishingStartDateTime (OPERATION.START_DATE_TIME et OPERATION.FISHING_START_DATE_TIME) + +Fin de traine > Latitude, Longitude + Operation.vesselPosition (VESSEL_POSITION.LATITUDE et VESSEL_POSITION.LONGITUDE), avec startDateTime = "Fin de traine > Date et heure" + +Fin de traine > Date et heure + Operation.endDateTime et Operation.fishingEndDateTime (OPERATION.END_DATE_TIME et OPERATION.FISHING_END_DATE_TIME) + +Trait rectiligne + Operation.vesselUseFeatures.vesselUseMeasurement (VESSEL_USE_MEASUREMENT.QUALITATIVE_VALUE_FK avec PMFM_FK=<PMFM_ID_RECTILINEAR_OPERATION>) + +Distance chalutée + Operation.vesselUseFeatures.vesselUseMeasurement (VESSEL_USE_MEASUREMENT.NUMERICAL_VALUE avec PMFM_FK=<PMFM_ID_TRAWL_DISTANCE>) + +Trait valide ou invalide + Operation.vesselUseFeatures.vesselUseMeasurement (VESSEL_USE_MEASUREMENT.QUALITATIVE_VALUE_FK avec PMFM_FK=<PMFM_ID_HAUL_VALID>) + +Saisisseur(s) + En v1, les identifiant des personnes suivantes sont stockées dans ScientificCruise.fishingTrip.comments + derrière la balise : #MANAGERS=<liste_des_IDs> + En v2, ce stockage devra se faire dans ScientificCruise.fishingTrip.vesselPersonFeatures avec un VesselPersonRole.id=<responsable_de_campagne> + +Navire + Si le navire est identique au premier de la liste de la campagne : Operation.vessel (OPERATION.VESSEL_FK) + Sinon : Operation.operationVesselAssociation (OPERATION_VESSEL_ASSOCIATION.VESSEL_FK avec IS_CATCH_ON_OPERATION_VESSEL=0). + Operation.vessel est alors rempli avec le premier navire de la liste de la campagne, pour être compatible avec Allegro (on doit toujours avoir : SCIENTIFIC_CRUISE.VESSEL_FK = OPERATION_VESSEL_FK). + +Engin + Operation.gearPhysicialFeatures (OPERATION.GEAR_PHYSCIAL_FEATURES_FK) : lien vers un engin déjà déclaré au niveau de la campagne. + Le code de l'engin est également dupliqué au début de Operation.name (OPERATION.NAME), devant le numéro du trait, pour rester compatible avec le format des données historiques. + +Commentaire + Operation.comments (OPERATION.COMMENTS) + +Trait > Mise en oeuvre de l'engin +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Valeur + Operation.gearUseFeatures.gearUseMeasurement (GEAR_USE_MEASUREMENT.xxx - en fonction du type de PSFM : NUMERICAL_VALUE, ALPHANUMERICAL_VALUE ou QUALITATIVE_VALUE_FK) + +Trait > Hydrologie et paramètres environnementaux +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Valeur + Operation.gearUseFeatures.vesselUseMeasurement (GEAR_USE_MEASUREMENT.xxx - en fonction du type de PSFM : NUMERICAL_VALUE, ALPHANUMERICAL_VALUE ou QUALITATIVE_VALUE_FK) + En v2 (à confirmer), informations dispatcher dans différent onglet, en fonction du PSFM trouvé dans le protocole + +Capture > Résumé +~~~~~~~~~~~~~~~~ + +Poids TOTAL + Lot "Capture" (BATCH avec IS_CATCH_BATCH=1) + CatchBatch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Poids total VRAC + Lot "Capture > Vrac" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Poids total HORS VRAC + Lot "Capture > Hors Vrac" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Poids total NON TRIE + Lot "Capture > Non trié" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Espèce > Poids TOTAL + Sommme des poids des lots "Capture > xxx > Espèce" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Espèce > Poids total VRAC + Lot "Capture > Vrac > Espèce" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Espèce > Poids total VRAC trié + Calculé par tutti ? utile seulement si Thalassa ? + +Espèce > Poids total HORS VRAC TRIE + Lot "Capture > Hors Vrac > Espèce" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Benthos > Poids TOTAL + Sommme des poids des lots "Capture > xxx > Benthos" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Benthos > Poids total VRAC + Lot "Capture > Vrac > Benthos" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Benthos > Poids total VRAC trié + Calculé par tutti ? utile seulement si Thalassa ? + +Benthos > Poids total HORS VRAC TRIE + Lot "Capture > Hors Vrac > Benthos" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Capture > Espèces +~~~~~~~~~~~~~~~~~ + +Espèce > Poids total VRAC + Lot "Capture > Vrac > Espèce" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Poids inerte trié + Lot "Capture > Vrac > Espèce > [TAXON_INERT]" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Poids vivant non détaillé trié + Lot "Capture > Vrac > Espèce > Biota" + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Tableau + Chaque ligne du tableau est stockée sous la forme d'un lot (Batch) positionné + soit sous le lot "Capture > Vrac > Espèce" + soit sous "Capture > Hors Vrac > Espèce" + +Tableau > Espèce + stockage de l'espèce uniquement pour les lot parent + Batch.referenceTaxon (BATCH.REFERENCE_TAXON_FK) + +Tableau > V/HV + Vrac ou Hors Vrac : Batch.sortingMeasurement.qualitativeValue (SORTING_MEASUREMENT.QUALITATIVE_VALUE_FK avec PMFM_FK=<PmfmId.SORTED_UNSORTED>) + Poids : Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + +Tableau > Class. Tri + Batch.sortingMeasurement.qualitativeValue (SORTING_MEASUREMENT.QUALITATIVE_VALUE_FK avec PMFM_FK=<PmfmId.SIZE_CATEGORY>) + +Tableau > Sexe + Batch.sortingMeasurement.qualitativeValue (SORTING_MEASUREMENT.QUALITATIVE_VALUE_FK avec PMFM_FK=<PmfmId.SEX>) + +Tableau > Maturité + Batch.sortingMeasurement.qualitativeValue (SORTING_MEASUREMENT.QUALITATIVE_VALUE_FK avec PMFM_FK=<PmfmId.MATURITY>) + +Tableau > Age + Batch.sortingMeasurement.qualitativeValue (SORTING_MEASUREMENT.QUALITATIVE_VALUE_FK avec PMFM_FK=<PmfmId.AGE>) + +Tableau > Poids sous-échantillonné + Si vide Batch.samplingRatio = 1 + Sinon : + Batch.samplingRatioText (BATCH.SAMPLING_RATIO_TEXT) concaténé à partir des chaines : "<Poids sous-échantillonné>" + "/" + "<Poids V/HV>" + Batch.samplingRatio (BATCH.SAMPLING_RATIO) calculé par le division : <Poids sous-échantillonné> / <Poids V/HV> + Pour la lecture : on parse samplingRatioText pour récupérer le poids sous-échantillonné. si absent on le calculé à partir de samplingRatio (moins précis car perte possible de précision) + +Tableau > Nombre + Calculé à partir de la somme du nombre d'individus des lots fils (BATCH.INDIVIDUAL_COUNT avec PARENT_BATCH_FK=<ID du lot de la ligne du tableau>) + (voir ci-dessous "Mensuration > Tableau") + +Tableau > Commentaire + Batch.comments + +Tableau > Pièces Jointes + Chaque pièce jointes est stockée dans MeasurementFile + (MEASUREMENT_FILE avec PMFM_FK=null, OBJECT_TYPE_FK='BATCH' et OBJECT_ID=<ID du lot de la ligne du tableau>) + MeasurementFile.path : chemin du fichier (copier dans un répertoire, puis stocké en relatif ?) + MeasurementFile.name : nom + MeasurementFile.comments : commentaire + +Mensuration > Type de mesure + Dupliqué pour chaque lot de mensuration créé (un lot pour chaque taille saisie) + Batch.sortingMeasurement.pmfm (SORTING_MEASUREMENT.PMFM_FK) + +Mensuration > Pas de la classe de taille + Non stocké (devrait dépendre de PSFM.precision ?) + Peut-etre peut on le calculé par analyse des mensuration saisie ? Et si aucune mesure prendre la précision du PSFM ? + +Mensuration > Tableau + Chaque ligne du tableau de mensuration est stocké sous la forme d'un lot + relié au lot correspondant à la ligne parent du tableau des espèces. (BATCH avec PARENT_BATCH_FK=<ID du lot parent dans le tableau des espèces>) + +Mensuration > Tableau > Classe de taille + Batch.sortingMeasurement.numericalValue (SORTING_MEASUREMENT.NUMERICAL_VALUE avec PMFM_FK=<ID correspondant au "Type de mesure">) + +Mensuration > Tableau > Nombre + Batch.individualCount (BATCH.INDIVIDUAL_COUNT) + +Mensuration > Tableau > Poids observé + Batch.quantificationMeasurement.numericalValue (QUANTIFICATION_MEASUREMENT.NUMERICAL_VALUE avec IS_REFERENT=1) + \ No newline at end of file Modified: trunk/src/site/site_fr.xml =================================================================== --- trunk/src/site/site_fr.xml 2013-03-13 13:30:25 UTC (rev 607) +++ trunk/src/site/site_fr.xml 2013-03-13 15:09:25 UTC (rev 608) @@ -106,8 +106,9 @@ <menu name="Documentation Technique"> <item name="Configuration" href="./application-config-report.html"/> - <item name="Référentiel" href="referential.html"/> + <item name="Référentiel" href="./referential.html"/> <item name="Mise à jour des versions" href="./update.html"/> + <item name="Correspondance Ecrans/BDD" href="./mapping.html"/> </menu> <menu ref="reports"/>
participants (1)
-
blavenier@users.forge.codelutin.com