diff --git a/datascience/src/pipeline/helpers/segments.py b/datascience/src/pipeline/helpers/segments.py index a9821ae550..9e5c0f92a0 100644 --- a/datascience/src/pipeline/helpers/segments.py +++ b/datascience/src/pipeline/helpers/segments.py @@ -123,7 +123,19 @@ def allocate_segments_to_catches( ) / ( SUM(weight) OVER (PARTITION BY { batch_id_column }, s.segment) - ) AS share_of_target_species + ) AS share_of_target_species, + ( + SUM( + CASE WHEN + c.species = ANY(s.target_species) + THEN + 1 + ELSE + 0 + END + ) + OVER (PARTITION BY { batch_id_column }, s.segment) + ) > 0 AS has_target_species FROM catches_main_type c JOIN segments s @@ -135,7 +147,14 @@ def allocate_segments_to_catches( AND (c.mesh < s.max_mesh OR s.max_mesh IS NULL) AND (c.vessel_type = ANY(s.vessel_types) OR s.vessel_types = []) AND (s.main_scip_species_type = c.main_scip_species_type OR s.main_scip_species_type IS NULL) - QUALIFY (share_of_target_species > s.min_share_of_target_species OR s.min_share_of_target_species IS NULL OR s.target_species = []) + QUALIFY ( + ( + has_target_species AND + share_of_target_species >= s.min_share_of_target_species + ) OR + s.min_share_of_target_species IS NULL OR + s.target_species = [] + ) ), catches_top_priority_segment AS ( diff --git a/datascience/tests/test_data/csv/catches.csv b/datascience/tests/test_data/csv/catches.csv index a61d6e405d..e30a0d4188 100644 --- a/datascience/tests/test_data/csv/catches.csv +++ b/datascience/tests/test_data/csv/catches.csv @@ -29,3 +29,5 @@ 30,"trip_T8-9",2050,"27.8.a","OTB",90,"GHI",,15000,"Navire polyvalent","T8-9","Trawls areas 8 and 9 targeting demersal","2.2" 31,"trip_L-HKE",2050,"27.8.a","LLS",,"HKE","DEMERSAL",120,"Navire polyvalent","L HKE","Lines targeting HKE","2.2" 32,"trip_L-HKE",2050,"27.8.a","LLS",,"COD","DEMERSAL",50,"Navire polyvalent","L HKE","Lines targeting HKE","2.2" +33,"trip_L-BFT-0kg",2050,"27.8.a","LLS",,"BFT","DEMERSAL",0,"Navire polyvalent","L BFT","Lines targeting BFT","2.2" +34,"trip_L-BFT-0kg",2050,"27.8.a","LLS",,"HKE","DEMERSAL",50,"Navire polyvalent","L BFT","Lines targeting BFT","2.2" diff --git a/datascience/tests/test_data/csv/segments.csv b/datascience/tests/test_data/csv/segments.csv index dc42894cf1..2344c9e0e1 100644 --- a/datascience/tests/test_data/csv/segments.csv +++ b/datascience/tests/test_data/csv/segments.csv @@ -5,3 +5,4 @@ Old-T8-PEL,Old trawls area 8 targeting pelagic,2000,"[""OTM"",""OTB"",""PTM"","" L,Lines,2050,"[""LLS"",""LLM"",""LHM"",""LHP""]",,,"[""27"",""37""]",[],,,[],1.9,0 L HKE,Lines targeting HKE,2050,"[""LLS"",""LLM"",""LHM"",""LHP""]",,,"[""27"",""37""]","[""HKE"",""AAA"",""BBB""]",0.2,,[],2.2,1 FT,Freezer trawlers,2050,"[""OTB"",""PTB""]",80,100,"[""27"",""37""]",[],,,"[""Chalutier congélateur"",""Chalutier pêche arrière congélateur""]",3.3,2 +L BFT,Lines targeting BFT,2050,"[""LLS"",""LLM"",""LHM"",""LHP""]",,,"[""27"",""37""]","[""BFT""]",0.0,,[],2.2,3 \ No newline at end of file