Skip to content

Commit

Permalink
Merge branch 'FixPredLogic' into Bump-version
Browse files Browse the repository at this point in the history
  • Loading branch information
hanjoosten committed Nov 27, 2023
2 parents 93618c3 + 198d6ff commit e31d91b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 29 deletions.
10 changes: 6 additions & 4 deletions ReleaseNotes.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@

## 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!).
- Brackets in the natural language formatting were erroneous, so Stef 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
* Development of Ampersand generator can now be done with codespaces (Check it out!).

## v4.7.6 (26 february 2023)

Expand Down
11 changes: 6 additions & 5 deletions src/Ampersand/Output/PredLogic.hs
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,12 @@ 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')
| isIdent (EDcD rel) -> wrap i 5 (charshow 2 pexpr) <> T.pack " = " <> wrap i 2 (charshow 5 pexpr')
| otherwise ->
if T.null (decprL <> decprM <> decprR)
then d <> T.pack " " <> name rel <> T.pack " " <> c
else decprL <> d <> decprM <> c <> decprR
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')
Expand All @@ -127,7 +128,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
Expand Down
40 changes: 20 additions & 20 deletions testing/Travis/testcases/Misc/Arbeidsduur.adl
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -35,22 +35,22 @@ 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.
Dat is immers niet vanzelfsprekend in die gevallen waar een werknemer meerdere arbeidsrelaties over verschillende periodes heeft.
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.+}
Expand All @@ -75,65 +75,65 @@ 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.
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.
Daarom wordt aan het besluit nadrukkelijk de aanpassing verbonden die door de werkgever is besloten.
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.
Het optreden van natuurlijke personen als tekenbevoegde voor een rechtspersoon wordt buiten deze wet geregeld en valt dan ook buiten de scope van dit model.
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.
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.+}
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand All @@ -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"
Expand Down

0 comments on commit e31d91b

Please sign in to comment.