diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e7a239a02149de505c45d7d9ff5c20ff74b0de2a
--- /dev/null
+++ b/e2e/cote-amont-aval-bief.e2e-spec.ts
@@ -0,0 +1,112 @@
+import { browser, by, element } from "protractor";
+import { PreferencesPage } from "./preferences.po"
+import { Navbar } from "./navbar.po";
+import { ListPage } from "./list.po";
+import { CalculatorPage } from "./calculator.po";
+
+describe("ngHyd − up/downstream elevations of a reach", () => {
+    let prefPage: PreferencesPage;
+    let navBar: Navbar;
+    let listPage: ListPage;
+    let calcPage: CalculatorPage;
+
+    beforeEach(async () => {
+        prefPage = new PreferencesPage();
+        listPage = new ListPage();
+        navBar = new Navbar();
+        calcPage = new CalculatorPage();
+
+        // disable evil option "empty fields on module creation"
+        await prefPage.navigateTo();
+        await browser.sleep(200);
+        await prefPage.disableEvilEmptyFields();
+        await browser.sleep(200);
+    });
+
+    it("check hydraulic details availability - flow calculation", async () => {
+        // open "up/downstream elevations of a reach" calculator
+        await navBar.clickNewCalculatorButton();
+        await listPage.clickMenuEntryForCalcType(21);
+        await browser.sleep(200);
+
+        // set upstream flow in calculate mode
+        const flowCalcBtn = element(by.xpath("//field-set[4]/mat-card-content/param-field-line[1]/div/div[2]/mat-button-toggle-group/mat-button-toggle[3]"));
+        await flowCalcBtn.click();
+
+        // check details buttons are disabled
+        const upDetailsBtn = element(by.id("generate-sp-aval"));
+        expect(upDetailsBtn.isEnabled()).toBe(false);
+        const downDetailsBtn = element(by.id("generate-sp-amont"));
+        expect(downDetailsBtn.isEnabled()).toBe(false);
+
+        // set value to upstream water elevation so that flow calculation leads to no error
+        const upWEinput = calcPage.getInputById("Z1");
+        await upWEinput.clear();
+        await upWEinput.sendKeys("100.664");
+
+        // run calculation
+        const calcButton = calcPage.getCalculateButton();
+        await calcButton.click();
+        await browser.sleep(2000);
+
+        // check details buttons are enabled
+        expect(upDetailsBtn.isEnabled()).toBe(true);
+        expect(downDetailsBtn.isEnabled()).toBe(true);
+
+        // click upstream hydraulic details button
+        await upDetailsBtn.click();
+        await browser.sleep(500);
+
+        // a second calculator should be created
+        let calcs = navBar.getAllCalculatorTabs();
+        expect((await calcs).length).toEqual(2);
+
+        // click downstream hydraulic details button
+        await navBar.openNthCalculator(0);
+        await upDetailsBtn.click();
+        await browser.sleep(500);
+
+        // a third calculator should be created
+        calcs = navBar.getAllCalculatorTabs();
+        expect((await calcs).length).toEqual(3);
+    });
+
+    it("check hydraulic details availability - upstream water elevation calculation", async () => {
+        // open "up/downstream elevations of a reach" calculator
+        await navBar.clickNewCalculatorButton();
+        await listPage.clickMenuEntryForCalcType(21);
+        await browser.sleep(200);
+
+        // check details buttons status
+        const upDetailsBtn = element(by.id("generate-sp-aval"));
+        expect(upDetailsBtn.isEnabled()).toBe(true);
+        const downDetailsBtn = element(by.id("generate-sp-amont"));
+        expect(downDetailsBtn.isEnabled()).toBe(false);
+
+        // run calculation
+        const calcButton = calcPage.getCalculateButton();
+        await calcButton.click();
+        await browser.sleep(2000);
+
+        // check details buttons are enabled
+        expect(upDetailsBtn.isEnabled()).toBe(true);
+        expect(downDetailsBtn.isEnabled()).toBe(true);
+
+        // click upstream hydraulic details button
+        await upDetailsBtn.click();
+        await browser.sleep(500);
+
+        // a second calculator should be created
+        let calcs = navBar.getAllCalculatorTabs();
+        expect((await calcs).length).toEqual(2);
+
+        // click downstream hydraulic details button
+        await navBar.openNthCalculator(0);
+        await upDetailsBtn.click();
+        await browser.sleep(500);
+
+        // a third calculator should be created
+        calcs = navBar.getAllCalculatorTabs();
+        expect((await calcs).length).toEqual(3);
+    });
+});
diff --git a/jalhyd_branch b/jalhyd_branch
index d64531f1305e091791eac674c3a36d86b9e17ddd..227bffb5c45a476c187cd747d30ed0cd2a36d307 100644
--- a/jalhyd_branch
+++ b/jalhyd_branch
@@ -1 +1 @@
-devel
+311-parametres-lies-ameliorer-les-informations-sur-la-cible
diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts
index 8b7f21b2a9b07e7fb2abf7554afe3f4929ef100b..04726b0ab638d7f31beac242e29246992ef7174d 100644
--- a/src/app/components/generic-calculator/calculator.component.ts
+++ b/src/app/components/generic-calculator/calculator.component.ts
@@ -781,7 +781,7 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe
 
     public get generateSPAmontEnabled(): boolean {
         const bief = (this._formulaire.currentNub as Bief);
-        if (bief.prms.Z1 === bief.calculatedParam) {
+        if (bief.prms.Z1 === bief.calculatedParam || bief.calculatedParam === bief.childrenPrms[0].get("Q")) {
             return this.hasResults && !bief.result.hasErrorMessages();
         } else {
             // check that linked values are available, if any
@@ -794,7 +794,7 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe
 
     public get generateSPAvalEnabled(): boolean {
         const bief = (this._formulaire.currentNub as Bief);
-        if (bief.prms.Z2 === bief.calculatedParam) {
+        if (bief.prms.Z2 === bief.calculatedParam || bief.calculatedParam === bief.childrenPrms[0].get("Q")) {
             return this.hasResults && !bief.result.hasErrorMessages();
         } else {
             // check that linked values are available, if any