> For the complete documentation index, see [llms.txt](https://dienstverleningsplatform.gitbook.io/platform-generieke-dienstverlening-public/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dienstverleningsplatform.gitbook.io/platform-generieke-dienstverlening-public/patronen/berichten/berichten-hackaton.md).

# Berichten hackaton

**Auteur**: Jan Brekelmans | **Status**: Review

## Doel

Tijdens de hackaton van 7-10 October willen we een MVP neerzetten voor een gemeentelijke berichtenbox.

## Inleiding

De overheid heeft al een berichtenbox. Het moet ook mogelijk zijn om op een relatief vergelijkbare manier berichten binnen de gemeente naar klanten te kunnen sturen. De oplossing voor de gemeente is dus ook een afgeleide van de logius berichtenbox standaard en heeft als stip op de horizon integratie met de logius / overheid berichtenbox.

De hackaton zal zich focussen op berichten bij besluiten. In deze functionaliteit zitten de volgende componenten:

* ZGW APIs - Klanten, Zaken, documenten & besluiten (En de bijhorende types in de catalogi)
* Notify - Voor het beheren van bericht templates en het versturen van notificaties
* OMC - Output Management Component, voor het routeren van de output van processen naar het juiste kanaal waarbij rekening gehouden wordt met de klantvoorkeuren. Zal een bericht genereren op basis van een besluit en fungeren als tunnel naar Notify voor het versturen van klantnotificaties
* Portaal - Portaal voor het weergeven van berichten aan een klant

TIjdens de hackaton zal de volgende flow gebruikt worden:

{% @mermaid/diagram content="sequenceDiagram
participant gzac AS ZAC
participant documenten AS Documenten API
participant bericht AS Bericht<br/>(Objecten API)
participant besluiten AS Besluiten API
%%participant zaken AS Zaken API
participant notificatie AS Notificatie API
%%participant klanten AS Klanten API
%%participant contact AS Contactomementen API
participant omc AS Output Management Component<br/>(+bnp)
participant notify AS Notify API
%%actor burger AS Burger

activate gzac
gzac ->> besluiten: Maak besluit aan bij zaak
gzac ->> documenten: Sla besluit document op
gzac ->>+ besluiten: Maak besluit informatieobject aan
deactivate gzac
besluiten ->>+ notificatie: Trigger event
deactivate besluiten
notificatie ->>+ omc: Trigger
deactivate notificatie
omc ->> besluiten: Haal besluit, besluitType, zaak en zaaktype op<br/>Voor vullen bericht
omc ->> notify: Haal besluit template op
omc ->> omc: Vul data in template
omc ->>+ bericht: Plaats bericht incl. bijlage link
deactivate omc

note over bericht: Vanaf hier, Sequence diagram 'Generiek'" %}

Een ZAC maakt een besluit aan, zet een document klaar en linkt het document aan het besluit. Het OMC zal van dat besluit (+document) een bericht klaar zetten. Daarna zal de 'generieke' notificatie functionaleit op een bericht afgetrapt worden.

De generieke notificatie functionaliteit verloopt als volgt:

{% @mermaid/diagram content="sequenceDiagram
participant omc AS Output<br/>management<br/>component
participant klanten AS Klantenregistratie<br/>component
participant contact AS Contactmomenten<br/>registratie<br/>component
participant notify AS Klantnotificatie<br/>component
actor burger AS Burger

```
    omc ->> klanten: Ophalen kanaalvoorkeur
    activate klanten
        klanten -->> omc: Kanaalvoorkeur
    deactivate klanten
    activate omc
        omc ->> klanten: Ophalen contactgegevens
    deactivate omc
    activate klanten
        klanten -->> omc: Contactgegevens
    deactivate klanten
    activate omc
        omc ->> omc: Ophalen template
        omc ->> omc: Samenstellen JSON-bericht
        omc ->> notify: Versturen notificatie
    deactivate omc
    activate notify
        notify ->> burger: Versturen klantnotificatie
        notify -->> omc: Resultaat klantnotificatie
    deactivate notify
    activate omc
        omc ->> contact: Registreren notificatie als contactmoment
    deactivate omc
    opt Relateren aan klant
	        omc ->> klanten: Contactmoment relateren aan klant
```

end\
" %}

## Openstaande punten voor hackaton

* Welke ZGW APIs en objecten moeten worden gebruikt?
* Wat wordt er voorbereid aan berichtweergave in portaal? (Den Haag & NL-Portal)
* Klanten API 1.0 of 2.0 of allebei supporten?
* Met klantvoorkeur of zonder?
* Usecases met meerdere besluitdocumenten?
* Structuur /schema van Bericht JSON
* Portaal berichten bekijken flow

## Aansluiting / hackaton voorbereiding

Zorg dat je:

* Een ZGW omgeving hebt
* Met OMC geinstalleerd
* Met connectie naar Notify en login gegeven hebt voor template beheer
* Je een ZAC hebt dat besluiten aan kan maken

##
