Préavis - espèces à bord vs espèces débarquées
Suite à une demande SIP, investigation faite des données d'espèces à bord VS espèces débarquées dans les données de préavis. A ce jour pas de demande claire pour exploiter ces données dans l'app, mais ce ticket consigne les recherches faites sur le sujet pour une éventuelle reprises ultérieure.
Les données de préavis comportent des informations sur les espèces à bord ainsi que sur les espèces à débarquer, le pêcheur ayant la possibilité de ne pas débarquer la totalité de sa pêche.
Intuitivement, l'idée que l'on peut se faire de cette possibilité est que s'il y a 150 kg de XXX à bord et 120 kg de XXX à débarquer, alors 30 kg de XXX sont destinés à rester à bord.
En pratique, plusieurs difficultés apparaissent :
- les informations sont présentées différemment dans le schéma FLUX et dans le schéma ERS :
- dans le schéma ERS, pour chaque capture du PNO, un poids à bord et un poids à débarquer sont communiqués
- dans le schéma FLUX, les captures à bord et les captures à débarquer sont communiquées séparément. Etant donné la multiplicité des captures et les nombreuses dimensions (zones, présentation, fraîcheur, méthode de préservation...) le nécessaire rapprochement des espèces à bord et des espèces à débarquer, pour en déduire par différence les espèces restant à bord, peut être déclicat voire, dans le cas de données incompatibles (espèce "à débarquer" non présente ou pas dans la bonne quantité ou pas dans la bonne zone / présentation / fraîcheur... dans les données "à bord"), impossible
- l'exploitation des données ERS a également révélé des inconsistences dans les données qui rendent leur interprétation et leur exploitation difficiles. En effet, sur une semaine de préavis, sur les ~50% de captures (en poids) dont le facteur de conversion est différent de 1, on trouve un tiers de captures pour lesquelles poids à bord = poids à débarquer, et deux tiers de captures pour lesquelles poids à bord = poids à débarquer * facteur de conversion. Autrement dit, les logiciels de bord semblent communiquer, en tant que poids à débarquer, tantôt des poids vifs, égaux aux poids à bord du PNO, eux-mêmes égaux à la somme des FAR (qui sont toujours donnés en poids vifs), tantôt en poids nets, qu'il faut multiplier par le facteur de conversion pour retrouver le poids à bord (vif). La communication de la donnée de capture "à débarquer" parfois en poids vif et parfois en poids nets, sans que l'on puisse savoir de quelle grandeur il s'agit, rend donc difficile son exploitation.
Requête faite sur Monitorfish pour cette analyse :
WITH operation_numbers AS (
SELECT DISTINCT operation_number, software
FROM logbook_reports
WHERE
operation_datetime_utc >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '1 week'
AND operation_datetime_utc <= CURRENT_TIMESTAMP AT TIME ZONE 'UTC'
AND log_type = 'PNO'
AND flag_state = 'FRA'
AND transmission_format = 'ERS'
),
t AS (
SELECT
operation_numbers.operation_number,
COALESCE(software, 'N/A') software,
(xpath(
'//ers:RAS/attribute::FA',
catch,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
))[1]::VARCHAR || '.' || (xpath(
'//ers:RAS/attribute::SA',
catch,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
))[1]::VARCHAR || '.' || (xpath(
'//ers:RAS/attribute::ID',
catch,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
))[1]::VARCHAR AS fao_area,
(xpath(
'//ers:SPE/attribute::SN',
catch,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
))[1]::VARCHAR AS species,
(xpath(
'//ers:SPE/attribute::WT',
catch,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
))[1]::varchar::DOUBLE PRECISION AS weight_onboard,
(xpath(
'//ers:PRO/attribute::CF',
catch,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
))[1]::varchar::DOUBLE PRECISION AS conversion_factor,
(xpath(
'//ers:SPE/attribute::WL',
catch,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
))[1]::varchar::DOUBLE PRECISION AS weight_to_land
FROM logbook_raw_messages
JOIN operation_numbers ON operation_numbers.operation_number = logbook_raw_messages.operation_number
JOIN LATERAL unnest(xpath(
'//ers:SPE',
xml_message::xml,
ARRAY[ARRAY['ers', 'http://ec.europa.eu/fisheries/schema/ers/v3']]
)) catch ON true
)
SELECT
conversion_factor IS NOT NULL AS has_conversion_factor,
conversion_factor = 1 AS conversion_factor_is_one,
abs(weight_onboard - weight_to_land) < 0.01 * greatest(weight_onboard, weight_to_land) AS onboard_equals_to_land,
abs(weight_onboard - weight_to_land * conversion_factor) < 0.01 * greatest(weight_onboard, weight_to_land * conversion_factor) AS onboard_equals_to_land_times_cf,
COUNT(DISTINCT operation_number) AS number_of_pnos,
COUNT(*) AS number_of_catches,
SUM(weight_onboard) AS weight_onboard,
SUM(weight_to_land) AS weight_to_land
FROM t
GROUP BY
conversion_factor IS NOT NULL,
conversion_factor = 1,
abs(weight_onboard - weight_to_land) < 0.01 * greatest(weight_onboard, weight_to_land) ,
abs(weight_onboard - weight_to_land * conversion_factor) < 0.01 * greatest(weight_onboard, weight_to_land * conversion_factor)
ORDER BY 5 DESC
Résultats : 4000 t de captures dans les préavis des navires français sur une semaine dont :
- 2000 t avec facteur de conversion = 1 et poids à débarquer = poids à bord
- 500 t avec facteur de conversion ≠ 1 et poids à débarquer = poids à bord (donc poids à débarquer donné a proiri en poids vif)
- 1500 t avec facteur de conversion ≠ 1 et poids à débarquer = poids à bord * facteur de conversion (donc poids à débarquer a priori donné en poids net)
Conclusion : il n'est pas possible en l'état d'avoir une info fiable sur les espèces à débarquer vs les espèces à bord. On garde ce ticket en archive pour trace de l'analyse faite.