MTES-MCT / monitorfish

🎣 Improve control and monitoring of fishing vessels activities.
https://beta.gouv.fr/startups/monitorfish.html
GNU Affero General Public License v3.0
34 stars 7 forks source link

Préavis - espèces à bord vs espèces débarquées #3012

Open VincentAntoine opened 8 months ago

VincentAntoine commented 8 months ago

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.

VincentAntoine commented 8 months ago

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 :

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 :

AdelineCelier commented 4 months ago

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.