Skip to content
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

Nenj ein k k final edits #430

Closed
wants to merge 21 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion envergo/evaluations/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ def get_bcc_recipients(self):
if (
moulinette.natura2000
and moulinette.natura2000.result == "soumis"
and not moulinette.natura2000.iota_only()
and not moulinette.natura2000.ein_out_of_n2000_site()
):
if config.ddtm_n2000_email:
bcc_recipients.append(config.ddtm_n2000_email)
Expand Down
4 changes: 2 additions & 2 deletions envergo/evaluations/tests/test_eval_emails.py
Original file line number Diff line number Diff line change
Expand Up @@ -640,11 +640,11 @@ def test_petitioner_icpe(rf, moulinette_url):


@pytest.mark.parametrize("footprint", [1200])
def test_n2000_iota_only_no_bcc(rf, moulinette_url):
def test_n2000_ein_out_of_n2000_site_no_bcc(rf, moulinette_url):
eval, moulinette = fake_moulinette(
moulinette_url, "soumis", "soumis", "non_soumis", "non_soumis"
)
moulinette.regulations[1].configure_mock(iota_only=lambda: True)
moulinette.regulations[1].configure_mock(ein_out_of_n2000_site=lambda: True)

req = rf.get("/")
eval_email = eval.get_evaluation_email()
Expand Down
20 changes: 20 additions & 0 deletions envergo/moulinette/migrations/moulinette_n2000_eval_env.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[
{
"model": "moulinette.criterion",
"fields": {
"backend_title": "Natura 2000 > EE",
"title": "Natura 2000 si cas par cas",
"subtitle": "ou étude d'impact",
"header": "« Liste nationale » Natura 2000 (2° du I de l'<a href=\"https://www.legifrance.gouv.fr/codes/id/LEGISCTA000022090322/\" target=\"_blank\" rel=\"noopener\">article R414-19 du Code de l'environnement</a>)",
"regulation": 2,
"activation_map": 36,
"activation_distance": 0,
"evaluator": "envergo.moulinette.regulations.natura2000.EvalEnv",
"weight": 5,
"required_action": "",
"required_action_stake": "",
"project_impact": "",
"discussion_contact": ""
}
}
]
10 changes: 6 additions & 4 deletions envergo/moulinette/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,16 +300,18 @@ def discussion_contacts(self):
]
return contacts

def iota_only(self):
"""Is the IOTA criterion the only valid criterion.
def ein_out_of_n2000_site(self):
"""Is the project subject to n2000 even if it is not in a Natura 2000 zone ?

There is an edge case for the Natura2000 regulation.
Projects can be subject to Natura2000 only
because they are subject to IOTA, even though they are outsite
because they are subject to IOTA or Evaluation Environnemental, even though they are outside
Natura 2000 zones.
"""
criteria_slugs = [c.slug for c in self.criteria.all()]
return criteria_slugs == ["iota"]
return criteria_slugs and all(
item in ["iota", "eval_env"] for item in criteria_slugs
)

def autorisation_urba_needed(self):
"""Is an "autorisation d'urbanisme" needed?
Expand Down
23 changes: 23 additions & 0 deletions envergo/moulinette/regulations/natura2000.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,29 @@ def evaluate(self):
self._result_code, self._result = result, result


class EvalEnv(CriterionEvaluator):
choice_label = "Natura 2000 > EE"
slug = "eval_env"

def evaluate(self):
try:
evalenv = self.moulinette.eval_env.result
if evalenv == RESULTS.cas_par_cas:
result = ("soumis_cas_par_cas", RESULTS.soumis)
elif evalenv == RESULTS.systematique:
result = ("soumis_systematique", RESULTS.soumis)
elif evalenv == RESULTS.non_soumis:
result = (RESULTS.non_soumis, RESULTS.non_soumis)
else:
raise NotImplementedError()
except AttributeError:
# If there is no Loi sur l'eau regulation
# for example, during unit tests
result = (RESULTS.non_disponible, RESULTS.non_disponible)

self._result_code, self._result = result


AUTORISATION_URBA_CHOICES = (
("pa", "soumis à permis d'aménager (PA)"),
("pc", "soumis à permis de construire (PC)"),
Expand Down
92 changes: 92 additions & 0 deletions envergo/moulinette/tests/test_n2000_evalenv.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import pytest

from envergo.geodata.conftest import france_map # noqa
from envergo.moulinette.models import MoulinetteAmenagement
from envergo.moulinette.tests.factories import (
CriterionFactory,
MoulinetteConfigFactory,
RegulationFactory,
)

pytestmark = pytest.mark.django_db


@pytest.fixture(autouse=True)
def autouse_site(site):
pass


@pytest.fixture(autouse=True)
def evalenv_criteria(france_map): # noqa
MoulinetteConfigFactory(
is_activated=True,
ddtm_water_police_email="ddtm_email_test@example.org",
)
evalenv = RegulationFactory(regulation="eval_env")
n2000 = RegulationFactory(regulation="natura2000")
criteria = [
CriterionFactory(
title="Evaluation environnementale",
regulation=evalenv,
evaluator="envergo.moulinette.regulations.evalenv.Emprise",
activation_map=france_map,
),
CriterionFactory(
title="EE",
regulation=n2000,
evaluator="envergo.moulinette.regulations.natura2000.EvalEnv",
activation_map=france_map,
),
]
return criteria


@pytest.fixture
def moulinette_data(footprint):
return {
# Bizou coordinates
"lat": 48.4961953,
"lng": 0.7504093,
"existing_surface": 0,
"created_surface": footprint,
"final_surface": footprint,
"emprise": footprint,
"zone_u": "non",
"surface_plancher_sup_thld": "oui",
"is_lotissement": "non",
"terrain_assiette": 150000,
}


@pytest.mark.parametrize("footprint", [40000])
def test_ein_if_evalenv_systematique(moulinette_data):
moulinette = MoulinetteAmenagement(moulinette_data, moulinette_data)
moulinette.evaluate()

assert moulinette.eval_env.emprise.result == "systematique"
assert moulinette.natura2000.eval_env.result_code == "soumis_systematique"
assert moulinette.natura2000.eval_env.result == "soumis"
assert moulinette.natura2000.result == "soumis"


@pytest.mark.parametrize("footprint", [40000])
def test_ein_if_evalenv_cas_par_cas(moulinette_data):
moulinette_data["zone_u"] = "oui"
moulinette = MoulinetteAmenagement(moulinette_data, moulinette_data)
moulinette.evaluate()

assert moulinette.eval_env.emprise.result == "cas_par_cas"
assert moulinette.natura2000.eval_env.result_code == "soumis_cas_par_cas"
assert moulinette.natura2000.eval_env.result == "soumis"
assert moulinette.natura2000.result == "soumis"


@pytest.mark.parametrize("footprint", [5])
def test_no_ein_if_evalenv_non_soumis(moulinette_data):
moulinette = MoulinetteAmenagement(moulinette_data, moulinette_data)
moulinette.evaluate()

assert moulinette.eval_env.emprise.result == "non_soumis"
assert moulinette.natura2000.eval_env.result_code == "non_soumis"
assert moulinette.natura2000.eval_env.result == "non_soumis"
assert moulinette.natura2000.result == "non_soumis"
2 changes: 1 addition & 1 deletion envergo/templates/evaluations/admin/eval_email_soumis.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
</li>
{% endif %}

{% if moulinette.natura2000.result == "soumis" and not moulinette.natura2000.iota_only %}
{% if moulinette.natura2000.result == "soumis" and not moulinette.natura2000.ein_out_of_n2000_site %}
<li>
<strong style="background-color: #ffb7a5;">Le projet est soumis à Natura 2000</strong>.
<br />
Expand Down
2 changes: 1 addition & 1 deletion envergo/templates/evaluations/admin/eval_email_soumis.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Le porteur de projet doit déposer un dossier de déclaration Loi sur l'eau à l

{% for action in moulinette.loi_sur_leau.required_actions_soumis %} - {{ action }}

{% endfor %}{% endif %}{% if moulinette.natura2000.result == "soumis" and not moulinette.natura2000.iota_only %} - Le projet est soumis à Natura 2000.
{% endfor %}{% endif %}{% if moulinette.natura2000.result == "soumis" and not moulinette.natura2000.ein_out_of_n2000_site %} - Le projet est soumis à Natura 2000.
Le porteur de projet doit réaliser une évaluation des incidences Natura 2000.

{% endif %}{% if moulinette.sage.required_actions_interdit %} - Le projet est susceptible d'être interdit au titre du règlement de SAGE (Schéma d’Aménagement et de Gestion des Eaux). Une action du porteur de projet est requise. Des études doivent être menées pour s’assurer que le projet :
Expand Down
19 changes: 19 additions & 0 deletions envergo/templates/moulinette/natura2000/eval_env_non_soumis.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<p>
<strong>Pourquoi le projet n'est-il pas concerné ?</strong>
</p>

<p>
Au vu des informations saisies, le projet n’est pas soumis à évaluation environnementale, ni à examen au cas par cas (<a href="#regulation_eval_env">voir section « Évaluation environnementale »</a>).
</p>

<p>
Tout projet soumis à évaluation environnementale, <em>qu’il soit dans un site Natura 2000 ou non</em>, est automatiquement soumis à évaluation des incidences Natura 2000 (EIN). Cette disposition ne s’applique donc pas ici.
</p>

<p>
<strong>Quel impact environnemental ?</strong>
</p>

<p>
Un projet est soumis à évaluation environnementale quand il est susceptible d’avoir des impacts significatifs sur l’environnement. En matière de biodiversité, le porteur d’un tel projet doit ainsi s’assurer qu’il n’impacte aucun des sites Natura 2000 à proximité ni les espèces fragiles abritées par ceux-ci.
</p>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<p>
<strong>Pourquoi le projet est-il concerné ?</strong>
</p>

<p>
Au vu des informations saisies, le projet est soumis à examen au cas par cas (<a href="#regulation_eval_env">voir section « Évaluation environnementale »</a>).
</p>

<p>
Or, tout projet soumis à examen au cas par cas, <em>qu’il soit dans un site Natura 2000 ou non</em>, est automatiquement soumis à évaluation des incidences Natura 2000 (EIN).
</p>

<p>
<strong>Quel impact environnemental ?</strong>
</p>

<p>
Un projet est soumis à examen au cas par cas quand il est susceptible d’avoir des impacts significatifs sur l’environnement. En matière de biodiversité, le porteur d’un tel projet doit ainsi s’assurer qu’il n’impacte aucun des sites Natura 2000 à proximité ni les espèces fragiles abritées par ceux-ci. C’est la raison pour laquelle une EIN est exigée.
</p>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<p>
<strong>Pourquoi le projet est-il concerné ?</strong>
</p>

<p>
Au vu des informations saisies, le projet est soumis à évaluation environnementale systématique (<a href="#regulation_eval_env">voir section « Évaluation environnementale »</a>).
</p>

<p>
Or, tout projet soumis à évaluation environnementale, <em>qu’il soit dans un site Natura 2000 ou non</em>, est automatiquement soumis à évaluation des incidences Natura 2000 (EIN).
</p>

<p>
<strong>Quel impact environnemental ?</strong>
</p>

<p>
Un projet est soumis à évaluation environnementale quand il est susceptible d’avoir des impacts significatifs sur l’environnement. En matière de biodiversité, le porteur d’un tel projet doit ainsi s’assurer qu’il n’impacte aucun des sites Natura 2000 à proximité ni les espèces fragiles abritées par ceux-ci. C’est la raison pour laquelle une EIN est exigée.
</p>
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@
Au vu des informations saisies, il est possible que le projet soit soumis à la Loi sur l’eau (<a href="#regulation_loi_sur_leau">voir section « Loi sur l’eau »)</a>.
</p>

{% if moulinette.natura2000.result == 'soumis' %}
{% if moulinette.natura2000.result != 'soumis' %}

<p>S'il y est soumis, l'évaluation des incidences Natura 2000 est à joindre au dossier Loi sur l'eau.</p>

{% else %}

<p>Il serait alors soumis à évaluation des incidences Natura 2000.</p>
<p>Il serait alors soumis à évaluation des incidences Natura 2000 (EIN).</p>

<p>
En effet, tout projet soumis à la Loi sur l’eau, <em>qu’il soit dans un site Natura 2000 ou non</em>, est automatiquement soumis à évaluation des incidences Natura 2000.
En effet, tout projet soumis à la Loi sur l’eau, <em>qu’il soit dans un site Natura 2000 ou non</em>, est automatiquement soumis à EIN.
</p>

{% endif %}
Expand Down
37 changes: 25 additions & 12 deletions envergo/templates/moulinette/natura2000/result_a_verifier.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ <h3>Marche à suivre</h3>
</p>

<ul>
<li>EIN à déposer en ligne avec le dossier Loi sur l'eau.</li>
<li>Délai d'instruction : 2 mois.</li>
<li>EIN à joindre à la fois au dossier Loi sur l'eau et à la demande d'autorisation d'urbanisme (PA, PC ou DP)</li>
<li>Délais d'instruction inchangés</li>
</ul>

<p>
Expand Down Expand Up @@ -82,18 +82,31 @@ <h4>Comment réaliser une évaluation des incidences Natura 2000 ?</h4>

<h4>Comment l'instruction de l'évaluation des incidences Natura 2000 se déroule-t-elle ?</h4>

<p>
L'évaluation des incidences Natura 2000 est une pièce obligatoire du dossier Loi sur l'eau.
Son instruction se fait donc dans le cadre du dossier Loi sur l'eau, avec la même procédure et le même délai.
</p>
<p>L'évaluation des incidences Natura 2000 (EIN) est une pièce obligatoire des dossiers soumis à l'administration :</p>

<p>
Le délai d'instruction d'un dossier de déclaration Loi sur l'eau est de 2 mois, extensible en cas de demande de compléments.
</p>
{% if regulation.autorisation_urba_needed %}

<p>
Consultez <a href="{% url 'faq_loi_sur_leau' %}#accordion-instruction">notre article décrivant l'instruction Loi sur l'eau</a>.
</p>
<ul>
<li>l'EIN doit être jointe à la demande d'autorisation d'urbanisme (PA, PC ou DP) ;</li>
<li>si un dossier Loi sur l'eau est constitué, l'EIN doit y être jointe également.</li>
</ul>

<p>Les procédures d'instruction n'en sont pas modifiées, et gardent le même délai.</p>

{% else %}

<p>
<em>Si l'EIN est jointe à un dossier de déclaration Loi sur l'eau</em>,
elle est examinée en même temps que celui-ci. La procédure d'instruction n'en est pas modifiée, et garde le même délai :
2 mois, extensible en cas de demande de compléments.
</p>

<p>
<em>S’il n’y a pas de dossier Loi sur l’eau</em>,
l'EIN est instruite par la DDT(M). Le délai d'instruction est de 2 mois.
</p>

{% endif %}

<h4>Sanctions en cas d'omission</h4>

Expand Down
Loading
Loading