From b98deac537f69a825564c3d31d11ce107277f3dd Mon Sep 17 00:00:00 2001 From: Stef Joosten Date: Fri, 13 Oct 2023 22:28:27 +0200 Subject: [PATCH 1/3] FIX PredLogic.hs --- src/Ampersand/Output/PredLogic.hs | 6 +-- testing/Travis/testcases/Misc/Arbeidsduur.adl | 40 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/Ampersand/Output/PredLogic.hs b/src/Ampersand/Output/PredLogic.hs index eef6ea060d..35007e83b4 100644 --- a/src/Ampersand/Output/PredLogic.hs +++ b/src/Ampersand/Output/PredLogic.hs @@ -109,8 +109,8 @@ predLshow lang vMap = charshow 0 Dom pexpr var -> vMap var <> T.pack " ∈ dom(" <> charshow 8 pexpr <> T.pack ")" Cod pexpr var -> vMap var <> T.pack " ∈ cod(" <> charshow 8 pexpr <> T.pack ")" R pexpr rel pexpr' - | isIdent (EDcD rel) -> wrap i 5 (charshow 5 pexpr) <> T.pack " = " <> wrap i 5 (charshow 5 pexpr') - | otherwise -> + | isIdent (EDcD rel) -> wrap i 5 (charshow 2 pexpr) <> T.pack " = " <> wrap i 2 (charshow 5 pexpr') + | otherwise -> wrap i 5 $ if T.null (decprL <> decprM <> decprR) then d <> T.pack " " <> name rel <> T.pack " " <> c else decprL <> d <> decprM <> c <> decprR @@ -127,7 +127,7 @@ predLshow lang vMap = charshow 0 Function pexpr rel -> name rel <> T.pack "(" <> charshow 1 pexpr <> T.pack ")" Kleene0 rs -> wrap i 6 (charshow 6 rs <> T.pack "*") Kleene1 rs -> wrap i 7 (charshow 7 rs <> T.pack "+") - Not rs -> wrap i 8 (l (toNL " niet ", toEN " not ") <> charshow 8 rs) + Not rs -> wrap i 8 (l (toNL " niet ", toEN " not ") <> charshow 1 rs) predNormalize :: PredLogic -> PredLogic predNormalize predlogic = predlogic --TODO: Fix normalization of PredLogic diff --git a/testing/Travis/testcases/Misc/Arbeidsduur.adl b/testing/Travis/testcases/Misc/Arbeidsduur.adl index 3526a9f7ff..75f156ad22 100644 --- a/testing/Travis/testcases/Misc/Arbeidsduur.adl +++ b/testing/Travis/testcases/Misc/Arbeidsduur.adl @@ -7,25 +7,25 @@ PATTERN Arbeidsduur --[Arbeidsrelaties]-- werkgever :: Arbeidsrelatie -> Persoon -PRAGMA "In" "is" "de werkgever" +PRAGMA "In " " is " " de werkgever" MEANING "Elke arbeidsrelatie benoemt expliciet welke (rechts)persoon de rol van werkgever vervult." PURPOSE RELATION werkgever {+Om de werkgever te kunnen bepalen gaan we ervan uit dat elke arbeidsrelatie precies één werkgever heeft.+} werknemer :: Arbeidsrelatie -> Persoon -PRAGMA "In" "is" "de werknemer" +PRAGMA "In " " is " " de werknemer" MEANING "Elke arbeidsrelatie benoemt expliciet welke persoon de rol van werknemer vervult." PURPOSE RELATION werknemer {+We gaan ervan uit dat elke arbeidsrelatie precies één werknemer heeft.+} arbeidsduur :: Arbeidsrelatie -> Arbeidsduur -PRAGMA "In" "is" "als arbeidsduur afgesproken" +PRAGMA "In " " is " " als arbeidsduur afgesproken" MEANING "Elke arbeidsrelatie vermeldt de afgesproken arbeidsduur." PURPOSE RELATION arbeidsduur REF "Artikel 2 lid 1" {+De Wet aanpassing arbeidsduur spreekt van ``de uit zijn arbeidsovereenkomst of publiekrechtelijke aanstelling voortvloeiende arbeidsduur''. Dat impliceert dat er voor elke arbeidsovereenkomst of publiekrechtelijke aanstelling precies één arbeidsduur is. Er zijn ongetwijfeld andere wetten en regelingen die dat garanderen, maar hier nemen we dit als een gegeven (uitgangspunt) over.+} inDienst :: Arbeidsrelatie -> Datum -PRAGMA "" "vermeldt" "als tijdstip van indiensttreding" +PRAGMA "" " vermeldt " " als tijdstip van indiensttreding" MEANING "Elke arbeidsrelatie kent een tijdstip van indiensttreding." PURPOSE RELATION inDienst REF "Artikel 2 lid 3" {+Om een verzoek te mogen indienen dient de werknemer ten minste een jaar voorafgaand aan het beoogde tijdstip van ingang van de aanpassing in dienst te zijn bij de werkgever. @@ -35,7 +35,7 @@ Deze details worden om praktische redenen buiten scope gehouden.+} --[Verzoeken]-- arbeidsrelatie :: Verzoek -> Arbeidsrelatie -PRAGMA "" "betreft" +PRAGMA "" " betreft " MEANING "Het verzoek vermeldt de arbeidsrelatie waarop de aanpassing van toepassing is." PURPOSE RELATION arbeidsrelatie {+Het verzoek moet duidelijk vermelden welke arbeidsrelatie onderwerp is van het verzoek. @@ -43,14 +43,14 @@ Dat is immers niet vanzelfsprekend in die gevallen waar een werknemer meerdere a De onderzochte wet sluit zelfs niet uit dat één werkgever en één werknemer op hetzelfde moment verschillende arbeidsrelaties onderhouden.+} tot :: Verzoek * Aanpassing [UNI] -PRAGMA "" "tot" +PRAGMA "" " tot " MEANING "Elk verzoek beschrijft de gewenste aanpassing van de uit zijn arbeidsovereenkomst of publiekrechtelijke aanstelling voortvloeiende arbeidsduur." PURPOSE RELATION tot[Verzoek*Aanpassing] REF "Artikel 2 lid 1" {+Omdat het gaat om verzoeken tot aanpassing van de arbeidsduur, gedaan vanuit de werknemer, is het beschrijven van de aanpassing verplicht.+} ingediend :: Verzoek * Datum [UNI] -PRAGMA "" "is ingediend" +PRAGMA "" " is ingediend " MEANING "Van elk verzoek is het tijdstip van indienen geregistreerd." PURPOSE RELATION ingediend REF "Artikel 2 lid 3" {+Omdat het tijdstip van indienen van het verzoek relevant is voor de ontvankelijkheid ervan, moeten we het registreren.+} @@ -75,7 +75,7 @@ PURPOSE RELATION laatsteVerzoek REF "Artikel 2 lid 3" --[Beslissingen]-- op :: Beslissing -> Verzoek -PRAGMA "" "op" +PRAGMA "" " op " MEANING "Elke beslissing verwijst naar het verzoek waarop de beslissing genomen is." PURPOSE RELATION op REF "Artikel 2 lid 7" {+Duidelijkheid is nodig over de vraag op welk verzoek een beslissing gevraagd wordt. @@ -83,7 +83,7 @@ De tekst van de wet rept van ``De beslissing op het verzoek ...'' Daarom wordt voor elke beslissing bijgehouden op welk verzoek de betreffende beslissing genomen wordt.+} aanp :: Beslissing -> Aanpassing -PRAGMA "" "tot" +PRAGMA "" " tot " MEANING "Een beslissing beschrijft de aanpassing van de uit de betreffende arbeidsovereenkomst of publiekrechtelijke aanstelling voortvloeiende arbeidsduur." PURPOSE RELATION aanp[Beslissing*Aanpassing] REF "Artikel 2 lid 7" {+De aanpassing waartoe een werkgever besluit kan afwijken van de aanpassing die door de werknemer is verzocht. @@ -91,7 +91,7 @@ Daarom wordt aan het besluit nadrukkelijk de aanpassing verbonden die door de we Onder inwilligen zullen we dan ook verstaan dat de aanpassing waarom verzocht is gelijk is aan de aanpassing die in het besluit is vermeld.+} door :: Beslissing -> Persoon -PRAGMA "" "door" +PRAGMA "" " door " MEANING "Elke beslissing wordt door een (rechts)persoon genomen." PURPOSE RELATION door {+Het moet duidelijk zijn door welke (rechts)persoon een beslissing genomen is. @@ -99,14 +99,14 @@ Het optreden van natuurlijke personen als tekenbevoegde voor een rechtspersoon w Hier volstaan we met de juridische entiteit, ofwel de werkgever die de beslissing neemt.+} medegedeeldAan :: Beslissing * Persoon [UNI] -PRAGMA "" "is medegedeeld aan" +PRAGMA "" " is medegedeeld aan " MEANING "Beslissingen kunnen worden medegedeeld aan personen. Dat gebeurt schriftelijk." PURPOSE RELATION medegedeeldAan REF "Artikel 2 lid 7" {+De beslissing op het verzoek om aanpassing van de arbeidsduur wordt door de werkgever schriftelijk aan de werknemer meegedeeld. Daarom wordt het mededelen vastgelegd.+} reden :: Beslissing * Reden [INJ,SUR] -PRAGMA "" "wordt gemotiveerd door" +PRAGMA "" " wordt gemotiveerd door " MEANING "Beslissingen kunnen met redenen worden omkleed." PURPOSE RELATION reden REF "Artikel 2 lid 7" {+Een beslissing, die afwijkt van de wensen van de werknemer, dient onder schriftelijke opgave van de redenen te worden meegedeeld. @@ -114,26 +114,26 @@ Hier scheppen we de ruimte om redenen voor de beslissing vast te leggen. De eis zelf, namelijk dat er redenen moeten zijn voor een afwijkend besluit, is elders in deze analyse geformuleerd.+} beslisdatum :: Beslissing -> Datum -PRAGMA "" "is genomen op" +PRAGMA "" " is genomen op " MEANING "Beslissingen worden genomen op een zekere datum." PURPOSE RELATION beslisdatum REF "Artikel 2 lid 3" {+Volgens de wet mogen werknemers ten hoogste eenmaal per twee jaren, nadat de werkgever een verzoek om aanpassing van de arbeidsduur heeft ingewilligd of afgewezen, opnieuw een verzoek indienen. Om dit te kunnen toetsen moet de datum waarop beslissingen worden genomen, worden geregistreerd.+} --[Aanpassingen]-- nieuw :: Aanpassing -> Arbeidsduur -PRAGMA "" "leidt tot een nieuwe arbeidsduur van" +PRAGMA "" " leidt tot een nieuwe arbeidsduur van " MEANING "De arbeidsduur na aanpassing moet in de beslissing worden vermeld." PURPOSE RELATION nieuw REF "Artikel 2 lid 3" {+De nieuwe arbeidsduur moet eenduidig uit de aanpassing blijken.+} ingang :: Aanpassing -> Datum -PRAGMA "" "gaat in op" +PRAGMA "" " gaat in op " MEANING "Het tijdstip van ingang moet in de aanpassing worden vermeld." PURPOSE RELATION ingang REF "Artikel 2 lid 3" {+De aanpassing van de arbeidsduur moet worden ingediend onder opgave van een beoogd tijdstip van ingang.+} omvang :: Aanpassing -> Omvang -PRAGMA "" "betreft een verandering ter grootte van" +PRAGMA "" " betreft een verandering ter grootte van " MEANING "De omvang van de aanpassing van de arbeidsduur moet worden vermeld." PURPOSE RELATION omvang REF "Artikel 2 lid 3" {+De aanpassing moet worden ingediend onder opgave van de omvang van de aanpassing van de arbeidsduur per week of, als de arbeidsduur over een ander tijdvak is overeengekomen over dat tijdvak en de gewenste spreiding van de uren over de week of het anderszins overeengekomen tijdvak.+} @@ -214,7 +214,7 @@ PURPOSE RULE "Vandaag is 1 (enkele) dag" {+ Om handelingen op een zekere datum uit te kunnen voeren, en omdat we dat in Ampersand moeten kunnen berekenen, voeren we een Concept ``Vandaag'' in (bestaande uit 1 atoom "vandaag").+} RULE "Vandaag is 1 (enkele) dag": I[Vandaag] = "VANDAAG" vandaag :: Vandaag * Datum [UNI] -PRAGMA "" "is de datum" +PRAGMA "" " is de datum " POPULATION Vandaag CONTAINS ["VANDAAG"] ROLE ExecEngine MAINTAINS "Stel datum van vandaag vast" @@ -288,7 +288,7 @@ PURPOSE RELATION vierMaandenOfMeer REF "Artikel 2 lid 3" {+Omdat de wet een termijn van vier maanden noemt, en omdat we in Ampersand (nog) niet kunnen rekenen, voeren we een relatie “vierMaandenOfMeer” in. Deze dient als stub voor het rekenwerk.+} vierMaandenOfMeer :: Datum * Datum -PRAGMA "" "ligt minstens vier maanden voor" +PRAGMA "" " ligt minstens vier maanden voor " MEANING "De relatie 'vierMaandenOfMeer' bevat alleen paren van datums waarvan de eerste minstens vier maanden voor de tweede valt." vierMaandenOfMeerTrigger :: Datum * Datum ROLE ExecEngine MAINTAINS "Bereken vier maanden of meer" @@ -325,7 +325,7 @@ VIOLATION (TXT "{EX} InsPair;uitersteBeslisdatum;Verzoek;", SRC I, TXT ";Datum;" PURPOSE RELATION minstensEenJaar REF "Artikel 2 lid 1" {+Omdat de wet de voorwaarde stelt dat de werknemer die tot aanpassing van zijn arbeidsduur verzoekt, tenminste 1 jaar voor de ingangsdatum van de aanpassing in dienst moet zijn, willen we dat automatisch kunnen uitrekenen. Daarom voeren we een relatie ``minstensEenJaar'' in.+} minstensEenJaar :: Datum * Datum -PRAGMA "" "ligt minstens een jaar voor" +PRAGMA "" " ligt minstens een jaar voor " MEANING "De relatie 'minstensEenJaar' geeft weer of er minstens een jaar zijn verstreken tussen twee tijdstippen." minstensEenJaarTrigger :: Datum * Datum PURPOSE RULE "Berekenen van de termijn van een jaar conform artikel 2 lid 1" @@ -340,7 +340,7 @@ VIOLATION (TXT "{EX} InsPair;minstensEenJaarTrigger;Datum;", SRC I, TXT ";Datum; PURPOSE RELATION minstensTweeJaar REF "Artikel 2 lid 3" {+Omdat de wet de voorwaarde stelt dat de werknemer die tot aanpassing van zijn arbeidsduur verzoekt, tenminste 2 jaar na een voorafgaand besluit wacht met het indienen van een nieuw verzoek, willen we dat automatisch kunnen uitrekenen. Daarom voeren we een relatie ``minstensTweeJaar'' in.+} minstensTweeJaar :: Datum * Datum -PRAGMA "" "ligt minstens twee jaar voor " +PRAGMA "" " ligt minstens twee jaar voor " MEANING "De relatie 'minstensTweeJaar' geeft weer of er minstens twee jaren zijn verstreken tussen twee tijdstippen." minstensTweeJaarTrigger :: Datum * Datum PURPOSE RULE "Berekenen van de termijn van twee jaar" From 958860b93513069b95bd8258325cc8c464d6e809 Mon Sep 17 00:00:00 2001 From: Stef Joosten Date: Sat, 14 Oct 2023 08:01:43 +0200 Subject: [PATCH 2/3] fix release notes and Ormolu --- ReleaseNotes.md | 1 + src/Ampersand/Output/PredLogic.hs | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index ac04de91d4..6e6769366d 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,6 +1,7 @@ # Release notes of Ampersand ## Unreleased changes +* Brackets in the natural language formatting were erroneous, so I fixed it. This helps to resolve a little bit of our technical debt. * [Issue #1419](https://github.com/AmpersandTarski/Ampersand/issues/1419) added a test, to be activated in the regression after resolving #1419. * [Issue #1420](https://github.com/AmpersandTarski/Ampersand/issues/1420) added a test, to be activated in the regression after resolving #1420. * [Issue #1421](https://github.com/AmpersandTarski/Ampersand/issues/1421) added easier development through Docker image at dockerhub: [ampersandtarski/ampersand-devcontainer](https://hub.docker.com/repository/docker/ampersandtarski/ampersand-devcontainer/general). Also fixes https://github.com/AmpersandTarski/Ampersand/issues/1359 diff --git a/src/Ampersand/Output/PredLogic.hs b/src/Ampersand/Output/PredLogic.hs index 35007e83b4..298e44ac1c 100644 --- a/src/Ampersand/Output/PredLogic.hs +++ b/src/Ampersand/Output/PredLogic.hs @@ -110,10 +110,11 @@ predLshow lang vMap = charshow 0 Cod pexpr var -> vMap var <> T.pack " ∈ cod(" <> charshow 8 pexpr <> T.pack ")" R pexpr rel pexpr' | isIdent (EDcD rel) -> wrap i 5 (charshow 2 pexpr) <> T.pack " = " <> wrap i 2 (charshow 5 pexpr') - | otherwise -> wrap i 5 $ - if T.null (decprL <> decprM <> decprR) - then d <> T.pack " " <> name rel <> T.pack " " <> c - else decprL <> d <> decprM <> c <> decprR + | otherwise -> + wrap i 5 $ + if T.null (decprL <> decprM <> decprR) + then d <> T.pack " " <> name rel <> T.pack " " <> c + else decprL <> d <> decprM <> c <> decprR where d = wrap i 5 (charshow 5 pexpr) c = wrap i 5 (charshow 5 pexpr') From 93618c3f6ff03abfe0b56b8401dc2c0bf0af4e90 Mon Sep 17 00:00:00 2001 From: hanjoosten Date: Mon, 27 Nov 2023 20:37:54 +0100 Subject: [PATCH 3/3] Bump version to 4.7.7 --- ReleaseNotes.md | 12 ++++++++---- ampersand.cabal | 2 +- package.yaml | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index f774336812..22379951b2 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,10 +1,14 @@ # Release notes of Ampersand ## Unreleased changes -* [Issue #1419](https://github.com/AmpersandTarski/Ampersand/issues/1419) added a test, to be activated in the regression after resolving #1419. -* [Issue #1420](https://github.com/AmpersandTarski/Ampersand/issues/1420) added a test, to be activated in the regression after resolving #1420. -* [Issue #1421](https://github.com/AmpersandTarski/Ampersand/issues/1421) added easier development through Docker image at dockerhub: [ampersandtarski/ampersand-devcontainer](https://hub.docker.com/repository/docker/ampersandtarski/ampersand-devcontainer/general). Also fixes https://github.com/AmpersandTarski/Ampersand/issues/1359 -* Development of Ampersand generator can now be done with codespaces. + +## v4.7.7 (27 november 2023) + +- [Issue #1419](https://github.com/AmpersandTarski/Ampersand/issues/1419) added a test, to be activated in the regression after resolving #1419. +- [Issue #1420](https://github.com/AmpersandTarski/Ampersand/issues/1420) added a test, to be activated in the regression after resolving #1420. +- [Issue #1421](https://github.com/AmpersandTarski/Ampersand/issues/1421) added easier development through Docker image at dockerhub: [ampersandtarski/ampersand-devcontainer](https://hub.docker.com/repository/docker/ampersandtarski/ampersand-devcontainer/general). Also fixes https://github.com/AmpersandTarski/Ampersand/issues/1359 +- Development of Ampersand generator can now be done with codespaces (Check it out!). + ## v4.7.6 (26 february 2023) ## v4.7.5 (25 february 2023) diff --git a/ampersand.cabal b/ampersand.cabal index c0d4adeed8..f8d79f1763 100644 --- a/ampersand.cabal +++ b/ampersand.cabal @@ -5,7 +5,7 @@ cabal-version: 2.0 -- see: https://github.com/sol/hpack name: ampersand -version: 4.7.6 +version: 4.7.7 synopsis: Toolsuite for automated design of enterprise information systems. description: You can define your business processes by means of rules, written in Relation Algebra. category: Database Design diff --git a/package.yaml b/package.yaml index 50718110d5..69af440b67 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: ampersand -version: 4.7.6 +version: 4.7.7 author: Stef Joosten maintainer: stef.joosten@ou.nl synopsis: Toolsuite for automated design of enterprise information systems.