-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Les données de captures dans les préavis manuels BFT sont incohérentes #3889
Comments
@VincentAntoine Merci pour l'analyse ! +1 pour l'option 1 (recalcul des sommes/nombre de pièces pour le colonne BFT). |
A passer en prod après correction du front WITH bft_reports AS (
SELECT DISTINCT report_id
FROM manual_prior_notifications, jsonb_array_elements(value->'catchOnboard') catch
WHERE catch->>'species' IN ('BF1', 'BF2', 'BF3')
),
summed_bft_data AS (
SELECT
report_id,
SUM(CASE WHEN catch->>'species' IN ('BF1', 'BF2', 'BF3') THEN (catch->>'nbFish')::DOUBLE PRECISION ELSE 0 END) OVER report AS nb_bft,
SUM(CASE WHEN catch->>'species' IN ('BF1', 'BF2', 'BF3') THEN (catch->>'weight')::DOUBLE PRECISION ELSE 0 END) OVER report AS weight_bft,
catch
FROM manual_prior_notifications, jsonb_array_elements(value->'catchOnboard') catch
WHERE
report_id IN (SELECT report_id FROM bft_reports)
WINDOW report AS (PARTITION BY report_id)
),
corrected_catches AS (
SELECT
report_id,
CASE
WHEN catch->>'species' = 'BFT' THEN jsonb_set(
jsonb_set(
catch,
'{nbFish}',
nb_bft::text::jsonb
),
'{weight}',
weight_bft::text::jsonb
)
ELSE catch
END AS catch
FROM summed_bft_data
),
corrected_catches_array AS (
SELECT
report_id,
jsonb_agg(catch) AS catches
FROM corrected_catches
GROUP BY report_id
),
corrected_values AS (
SELECT
pno.report_id,
jsonb_set(
jsonb_set(
pno.value,
'{catchToLand}',
cor.catches
),
'{catchOnboard}',
cor.catches
) AS corrected_value
FROM manual_prior_notifications pno
JOIN corrected_catches_array cor
ON pno.report_id = cor.report_id
)
UPDATE manual_prior_notifications pno
SET value = cor.corrected_value
FROM corrected_values cor
WHERE pno.report_id = cor.report_id |
@VincentAntoine merci pour le récap ! |
Je viens de me rendre compte qu'il est possible dans le formulaire de saisir directement BF1, BF2 ou BF3 en tant qu'espèces plutôt que de saisir BFT puis le détail par calibre à l'intérieur de BFT. Voire, si on fait vraiment n'importe quoi, de saisir BFT avec un détail par calibre ET saisir aussi BF1, BF2 BF3 en tant qu'espère séparée de BFT. Je crois me souvenir que l'ajout de BF1, BF2, BF3 dans le référentiel espèces a été fait pour permettre de saisir le détail par calibre dans les CR de contrôle. On n'a pas le même système dans les CR de contrôles et dans les préavis, dans les CR de contrôle on peut saisir BF1, BF2, BF3 en tant qu'espèces, ou BFT si on ne veut pas spécifier les infos par calibre (ou les deux si on fait n'importe quoi, ce qui est aussi possible). Si on regarde les données de contrôle : WITH bft_controls AS (
SELECT
id,
is_from_poseidon,
SUM(CASE WHEN species->>'speciesCode' = 'BF1' THEN 1 ELSE 0 END) > 0 AS has_bf1,
SUM(CASE WHEN species->>'speciesCode' = 'BF2' THEN 1 ELSE 0 END) > 0 AS has_bf2,
SUM(CASE WHEN species->>'speciesCode' = 'BF3' THEN 1 ELSE 0 END) > 0 AS has_bf3,
SUM(CASE WHEN species->>'speciesCode' = 'BFT' THEN 1 ELSE 0 END) > 0 AS has_bft
FROM mission_actions, jsonb_array_elements(species_onboard) species
WHERE species->>'speciesCode' IN ('BF1', 'BF2', 'BF3', 'BFT')
GROUP BY 1, 2
)
SELECT
is_from_poseidon,
has_bf1,
has_bf2,
has_bf3,
has_bft,
COUNT(DISTINCT id) AS nb_controls
FROM bft_controls
GROUP BY 1, 2, 3, 4, 5 On voit que la saisie est faite soit par calibre (BF1, BF2, BF3) soit sur BFT au global, à de rares exceptions près sur quelques contrôles issus de Poséidon où il y a à la fois BFT et BF1 / BF2 / BF3. Mais pour que ce soit clean, l'idéal serait :
|
@VincentAntoine si je lis bien ta capture d'écran, je comprends que la plupart du temps dans MF ils saisissent en BFT et ne détaillent pas par calibre. J'ai donc peur que les obliger à saisir par calibre soit assez contraignant, je ne suis pas sûre qu'ils aient systématiquement l'info – peut-être à vérifier avec eux. |
Vu avec l'ops, en effet lors de contrôles de gros navires le détail par calibre n'est pas connu et il faut pouvoir saisir les données en BFT sans détail BF1 / BF2 / BF3. Donc il faut les deux modes de saisie sur les contrôles, contrairement aux préavis manuels où il s'agit forcément de petits navires sur lesquels le détail par calibre est donné. |
Donc en résumé, si OK pour vous, sur les préavis il faut :
|
Dans les préavis avec BFT, les données sont enregistrées en doublon :
C'est source d'erreurs pour plusieurs raisons :
De plus, les préavis datant d'avant la modification qui a rendu automatique le calcul du BFT à partir des données BF1 BF2 et BF3 ne suivent pas la même logique :
ou encore :
Enfin, ces données se retrouvent dans les documents envoyés aux unités et donnent à nouveau une info redondante :
Je vois deux options :
La seconde option paraît plus clean car elle évite la redondance de données, mais elle a des effets de bord, notamment sur l'attribution de segments et de typage de préavis (il faut penser à ajouter BF1, BF2 et BF3 comme critère d'attribution en plus de BFT), ce qui d'autant moins cool que BF1 BF2 et BF3 en sont pas des codes espèces à proprement parler mais plus des hacks permettant de stocker l'info par calibre sans avoir une structure de donnée dédiée à cette notion de calibre qui n'existe nulle par ailleurs.
De plus, il n'y a pas de BF1 BF2 BF3 dans les autres données (déclarations de captures, de débarquement, de vente...) donc pour croiser les données il faut un code BFT et non BF1 BF2 BF3.
Je serais donc plus pour l'option 1.
Avec éventuellement une règle à ajouter dans l'édition de pdf de préavis pour supprimer la ligne BFT pour éviter le doublonnage @AdelineCelier ?
@louptheron @ivangabriele
The text was updated successfully, but these errors were encountered: