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

Joint degree functionaliteit #353

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Joint degree functionaliteit #353

wants to merge 2 commits into from

Conversation

mdemare
Copy link
Collaborator

@mdemare mdemare commented Jan 29, 2025

In het hoger onderwijs bestaan er joint degrees: opleidingen die door meer dan één onderwijsintelling verzorgd worden.
In RIO is de eigenaar van de OpleidingsEenheid dan de “penvoerende” instelling. Maar de andere deelnemende instellingen mogen daar dan ook AangebodenOpleidingen voor aanleveren.
DUO vertelde me er het volgende over:
Wanneer een instelling een aangeboden opleiding aanlevert voor een opleidingseenheid die niet van "hem" is, dan bepalen we of de opleidingseenheid (HoOpleiding) een opleidingssamenwerking betreft (Joint Degree).Wanneer dat het geval is bepalen we obv de licenties die gekoppeld zijn aan die HO-opleidingserkenning welke instellingen de opleiding zouden mogen verzorgen. Staat hun instelling in het lijstje voorkomt keuren we de aanlevering goed. Wanneer dat niet zo is ontvangt de instelling een foutcode "N09461 Het onderwijsbestuur maakt geen deel uit van de vastgestelde opleidingssamenwerking".

Het doel is dat onze mapper deze functionaliteit gaat ondersteunen. Na wat uitzoekwerk en navragen kom ik tot het volgende ontwerp:
We voegen twee nieuwe velden aan de RIO consumer voor een Program toe:
jointProgram: een boolean. Als die true is, gaan we kijken naar het tweede veld en nemen we een “nieuwe afslag” in de verwerking van het program. Als jointProgram, false is of het hele veld ontbreekt, dan volgen we de oude logica.
educationUnitCode: een string die moet voldoen aan de regex ^\d{4}O\d{4}$ , namelijk een OpleidingsEenheidCode. Als dit veld niet matcht met de regex of ontbreekt terwijl jointProgram true is, moeten we een foutmelding teruggeven.
als jointProgram niet true is word een educationUnitCode niet verwerkt (helemaal genegeerd)
Als een instelling een upsert job aanlevert voor een program en deze beide nieuwe velden zijn correct ingevuld, gaan we het program aanleveren als een AangebodenHoOpleiding, horende bij de OpleidingsEenheid zoals die in educationUnitCode staat.
We slaan het ophalen van de EducationSpecification helemaal over.
Wellicht moet de validatie van Programs aangepast worden: het veld educationSpecification is niet verplicht, als het veld jointProgram true is.

Opmerkingen:
We kunnen ervan uitgaan dat een Program wat aangeleverd wordt als jointProgram altijd een AangebodenHoOpleiding is. In RIO bestaan er geen andere vormen die “joint” kunnen zijn.

@mdemare mdemare force-pushed the joint-programs branch 4 times, most recently from 623c9e5 to e0ea1b5 Compare January 29, 2025 14:47
@mdemare mdemare changed the title joint programs Joint degree functionaliteit Jan 29, 2025
Copy link
Collaborator

@remvee remvee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ziet er goed uit maar toch een paar opmerkingen.

(is (thrown? ExceptionInfo
(simulate-upsert ooapi-loader
(slurp (io/resource "fixtures/rio/integratie-program-0.xml"))
"program")))))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ik denk dat het duidelijker wordt als je van hier 1 deftest maakt met testing blokken erin en misschien wat van de let duplicatie eruit haalt. Op dit moment kost het me wat moeite om te zien wat de verschillende tussen deze tests zijn omdat er een hoop ge-copy-paste is.

(if (= type "education-specification")
id
(ooapi-base/education-specification-id entity))
institution-oin)))))))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Goed idee om deze wrappers te verplaatsen als ze alleen in tests gebruikt worden! Ben wel nieuwsgierig geworden hoe deze functionaliteit in de applicatie aan elkaar geknoopt wordt. Weten we zeker dat het dan nog werkt? Kunnen we bijvoorbeeld een e2e test hiervoor toevoegen?

(->> request (load-entities loader) (f))))))
(validate-entity rio-consumer ::program/ProgramConsumerType "ProgramConsumerType"))
(cond-> request
true
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Misschien moet we voor :always gaan ipv true en deze onderaan zetten. Net als dat we bij cond een :else hebben.

(assoc ::rio/aangeboden-opleiding-code
(resolver type id institution-oin))

true
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:always?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants