Files
cmdb-insight/docs/zira-classificatie-tool-specificatie.md
Bert Hausmans a7f8301196 Add database adapter system, production deployment configs, and new dashboard components
- Add PostgreSQL and SQLite database adapters with factory pattern
- Add migration script for SQLite to PostgreSQL
- Add production Dockerfiles and docker-compose configs
- Add deployment documentation and scripts
- Add BIA sync dashboard and matching service
- Add data completeness configuration and components
- Add new dashboard components (BusinessImportanceComparison, ComplexityDynamics, etc.)
- Update various services and routes
- Remove deprecated management-parameters.json and taxonomy files
2026-01-14 00:38:40 +01:00

54 KiB

ZiRA Classificatie Tool - Technische Specificatie

Projectoverzicht

Doel

Ontwikkelen van een interactieve tool voor het classificeren van applicatiecomponenten naar ZiRA-applicatiefuncties, met directe integratie met Jira Assets CMDB.

Organisatie

  • Organisatie: Zuyderland Medisch Centrum
  • Afdeling: ICMT - Zorg en Ondersteunende Applicaties
  • Scope: ~500 applicatiecomponenten

Functionaliteit

  1. Ophalen van applicatiecomponenten uit Jira Assets zonder ApplicationFunction
  2. AI-gestuurde classificatiesuggestie op basis van beschikbare metadata
  3. Handmatige validatie/correctie door beheerder
  4. Terugschrijven van classificatie naar Jira Assets
  5. Rapportage en voortgangsmonitoring

Technische Architectuur

┌─────────────────────────────────────────────────────────────────┐
│                    ZiRA Classificatie Tool                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌──────────────┐     ┌──────────────┐     ┌─────────────────┐  │
│  │   React      │     │   Express    │     │  Jira Assets    │  │
│  │   Frontend   │◄───►│   Backend    │◄───►│  REST API       │  │
│  │   (Vite)     │     │   (Node.js)  │     │  (Data Center)  │  │
│  └──────────────┘     └──────┬───────┘     └─────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│                    ┌─────────────────┐                          │
│                    │  Claude API     │                          │
│                    │  (Anthropic)    │                          │
│                    └─────────────────┘                          │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Tech Stack

  • Frontend: React + TypeScript + Vite + TailwindCSS
  • Backend: Node.js + Express + TypeScript
  • AI: Anthropic Claude API (claude-sonnet-4-20250514)
  • Database: SQLite (lokale cache voor sessie/voortgang)

Jira Assets API Specificaties

Authenticatie

Jira Data Center met Personal Access Token (PAT).

// Headers voor alle requests
const headers = {
  'Authorization': `Bearer ${process.env.JIRA_PAT}`,
  'Content-Type': 'application/json',
  'Accept': 'application/json'
};

Base URL

https://{jira-host}/rest/assets/1.0

Schema Details

  • Schema naam: ICMT - CMDB
  • ObjectType: Application Component

Relevante Attributen Application Component

Attribuut Type Beschrijving
Name Text Applicatienaam
SearchReference Text Zoeksleutel/alias
Description Text Functionele beschrijving
Organisation Reference Organisatieonderdeel
ApplicationFunction Reference Te vullen: verwijzing naar ApplicationFunction object
Status Select Status van applicatie
Business Importance Select Bedrijfsbelang
Business Impact Analyse Reference BIA-document
Application Component Hosting Type Select On-prem/SaaS/Cloud
Supplier Product Reference Leverancier/product
Business Owner Reference Eigenaar business
System Owner Reference Systeemeigenaar
Functional Application Management Reference FAB-team
Technical Application Management Reference TAB-team
Medische Techniek Boolean MT-gerelateerd
Application Management - Dynamics Factor Reference Bewerkbaar: Dynamiekfactor
Application Management - Complexity Factor Reference Bewerkbaar: Complexiteitsfactor
Application Management - Number of Users Reference Bewerkbaar: Aantal gebruikers
ICT Governance Model Reference Bewerkbaar: Regiemodel

Reference Objects voor Filters

Status (Filter - niet bewerkbaar)

Key Naam Beschrijving
status Status Algemene status
closed Closed Afgesloten
deprecated Deprecated Verouderd, wordt uitgefaseerd
eol End of life Einde levensduur
eos End of support Geen ondersteuning meer
impl Implementation In implementatie
prod In Production Productie
poc Proof of Concept Proefproject
shadow Shadow IT Niet-geautoriseerde IT
undefined Undefined Niet gedefinieerd

Reference Objects voor Bewerkbare Velden

Application Management - Dynamics Factor

Key Naam Beschrijving
1 Stabiel Weinig wijzigingen, uitgekristalliseerd systeem, < 2 releases/jaar
2 Gemiddeld Regelmatige wijzigingen, 2-4 releases/jaar, incidentele projecten
3 Hoog Veel wijzigingen, > 4 releases/jaar, continue doorontwikkeling
4 Zeer hoog Continu in beweging, grote transformatieprojecten, veel nieuwe functionaliteit

Application Management - Complexity Factor

Key Naam Beschrijving
1 Laag Standalone applicatie, geen/weinig integraties, standaard configuratie
2 Gemiddeld Enkele integraties, beperkt maatwerk, standaard governance
3 Hoog Veel integraties, significant maatwerk, meerdere stakeholdergroepen
4 Zeer hoog Platform met meerdere workloads, uitgebreide governance, veel maatwerk

Application Management - Number of Users

Key Naam
1 < 100
2 100 - 500
3 500 - 2.000
4 2.000 - 5.000
5 5.000 - 10.000
6 10.000 - 15.000
7 > 15.000

ICT Governance Model (Regiemodel)

Key Naam Beschrijving Toelichting
A Centraal Beheer ICMT voert volledig beheer uit Volledige dienstverlening door ICMT. Standaardmodel voor kernapplicaties met BIA D/E/F. Voorbeelden: EPD (HiX), ERP, Microsoft 365
B Federatief Beheer ICMT + business delen beheer ICMT en business delen verantwoordelijkheid. Geschikt voor applicaties met sterke key user organisatie
C Uitbesteed met ICMT-Regie Leverancier beheert, ICMT regisseert Leverancier voert beheer uit, ICMT houdt regie. Standaardmodel voor SaaS waar ICMT contractpartij is
D Uitbesteed met Business-Regie Leverancier beheert, business regisseert Business onderhoudt leveranciersrelatie. ICMT heeft beperkte betrokkenheid. SaaS waar business contract beheert
E Volledig Decentraal Beheer Business voert volledig beheer uit Business voert zelf beheer uit. ICMT minimaal betrokken. Shadow IT, niche tools, pilotapplicaties

API Endpoints

1. Object Schema ophalen

GET /rest/assets/1.0/objectschema/list

2. ObjectType ID vinden

GET /rest/assets/1.0/objectschema/{schemaId}/objecttypes

3. Applicaties ophalen (met filters)

# Voorbeeld: Alle applicaties zonder ApplicationFunction, status In Production of Implementation
POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"Application Component\" AND ApplicationFunction IS EMPTY AND Status IN (\"In Production\", \"Implementation\")",
  "page": 1,
  "resultPerPage": 50,
  "includeAttributes": true
}
# Voorbeeld: Vrije tekst zoeken
POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"Application Component\" AND (Name LIKE \"%epic%\" OR Description LIKE \"%epic%\")",
  "page": 1,
  "resultPerPage": 50,
  "includeAttributes": true
}
# Voorbeeld: Gecombineerde filters
POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"Application Component\" AND Status = \"In Production\" AND \"ICT Governance Model\" IS EMPTY AND \"Application Management - Dynamics Factor\" IS NOT EMPTY",
  "page": 1,
  "resultPerPage": 50,
  "includeAttributes": true
}

4. ApplicationFunction objecten ophalen (voor dropdown)

POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"ApplicationFunction\"",
  "resultPerPage": 200,
  "includeAttributes": true
}

5. Dynamics Factor objecten ophalen

POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"Application Management - Dynamics Factor\"",
  "resultPerPage": 10,
  "includeAttributes": true
}

6. Complexity Factor objecten ophalen

POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"Application Management - Complexity Factor\"",
  "resultPerPage": 10,
  "includeAttributes": true
}

7. Number of Users objecten ophalen

POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"Application Management - Number of Users\"",
  "resultPerPage": 10,
  "includeAttributes": true
}

8. ICT Governance Model objecten ophalen

POST /rest/assets/1.0/aql/objects
Content-Type: application/json

{
  "qlQuery": "objectType = \"ICT Governance Model\"",
  "resultPerPage": 10,
  "includeAttributes": true
}

9. Applicatie updaten met meerdere velden

PUT /rest/assets/1.0/object/{objectId}
Content-Type: application/json

{
  "attributes": [
    {
      "objectTypeAttributeId": "{applicationFunctionAttributeId}",
      "objectAttributeValues": [
        {
          "referencedObjectBeanKey": "{applicationFunctionObjectKey}"
        }
      ]
    },
    {
      "objectTypeAttributeId": "{dynamicsFactorAttributeId}",
      "objectAttributeValues": [
        {
          "referencedObjectBeanKey": "{dynamicsFactorObjectKey}"
        }
      ]
    },
    {
      "objectTypeAttributeId": "{complexityFactorAttributeId}",
      "objectAttributeValues": [
        {
          "referencedObjectBeanKey": "{complexityFactorObjectKey}"
        }
      ]
    },
    {
      "objectTypeAttributeId": "{numberOfUsersAttributeId}",
      "objectAttributeValues": [
        {
          "referencedObjectBeanKey": "{numberOfUsersObjectKey}"
        }
      ]
    },
    {
      "objectTypeAttributeId": "{governanceModelAttributeId}",
      "objectAttributeValues": [
        {
          "referencedObjectBeanKey": "{governanceModelObjectKey}"
        }
      ]
    }
  ]
}

10. Attribuut ID's ophalen

GET /rest/assets/1.0/objecttype/{objectTypeId}/attributes

ZiRA Applicatiefuncties Taxonomie

Domein: STURING

Code Naam Beschrijving
STU-001 Beleid & Innovatie Functionaliteit voor ondersteuning van het bepalen en beheren van beleid, ontwikkeling producten & diensten, planning & control cyclus en ondersteunende managementinformatie
STU-002 Proces & Architectuur Functionaliteit voor het ontwikkelen en beheren van de enterprise architectuur (organisatie, processen, informatie, applicatie, techniek)
STU-003 Project & Portfoliomanagement Functionaliteit voor het beheren van projecten en programma's
STU-004 Kwaliteitsinformatiemanagement Functionaliteit voor de ondersteuning van het maken, verwerken en beheren van kwaliteitsdocumenten (inclusief protocollen)
STU-005 Performance & Verantwoording Functionaliteit voor het beheren van productieafspraken, KPI's inclusief beheer van de verantwoording in het kader van wet & regelgeving alsmede prestaties en maatschappelijk verantwoordschap
STU-006 Marketing & Contractmanagement Functionaliteit voor ondersteuning van marktanalyses en contractmanagement

Domein: ONDERZOEK

Code Naam Beschrijving
ONZ-001 Onderzoek ontwikkeling Functionaliteit voor de administratieve ondersteuning voor het indienen van een onderzoeksaanvraag, het opstellen van een onderzoeksprotocol, het opstellen van een onderzoeksvoorstel en de medisch etische keuring
ONZ-002 Onderzoekvoorbereiding Functionaliteit voor de administratieve voorbereiding van het onderzoek als aanvraag van vergunningen en financieringen
ONZ-003 Onderzoeksmanagement Functionaliteit voor de administratieve uitvoering van het onderzoek als aanvraag patientenselectie, verkrijgen consent
ONZ-004 Researchdatamanagement Functionaliteit voor het verzamelen, bewerken, analyseren en publiceren van onderzoeksdata
ONZ-005 Onderzoekpublicatie Functionaliteit voor de opslag van publicaties van onderzoeksresultaten

Domein: ZORG - Samenwerking

Code Naam Beschrijving
ZRG-SAM-001 Dossier inzage Functionaliteit die het mogelijk maakt voor patiënten om digitale inzage te krijgen in medische dossiers
ZRG-SAM-002 Behandelondersteuning Functionaliteit voor het voorlichten en coachen van en communiceren met de patiënt over zijn zorg (patientempowerment)
ZRG-SAM-003 Interactie PGO Functionaliteit voor ondersteuning en integraties met een persoonlijke gezondheidsomgeving
ZRG-SAM-004 Patientenforum Functionaliteit voor het aanbieden van een online omgeving voor patienten
ZRG-SAM-005 Preventie Functionaliteit ter bevordering van de gezondheid en ter voorkoming van klachten en problemen
ZRG-SAM-006 Gezondheidsvragen Functionaliteit voor het on-line invullen van vragenlijsten
ZRG-SAM-007 Kwaliteit en tevredenheidsmeting Functionaliteit om de effecten van behandelingen en de patiënttevredenheid te kunnen meten
ZRG-SAM-008 Tele-consultatie Functionaliteit om een zorgprofessional remote te raadplegen
ZRG-SAM-009 Zelfmonitoring Functionaliteit om de eigen gezondheidstoestand te bewaken
ZRG-SAM-010 Tele-monitoring Functionaliteit waarmee de patient op afstand gevolgd en begeleid wordt
ZRG-SAM-011 On-line afspraken Functionaliteit voor het on-line maken van afspraken
ZRG-SAM-012 Dossieruitwisseling Functionaliteit voor het versturen en ontvangen en verwerken van dossierinformatie
ZRG-SAM-013 Interactie externe bronnen Functionaliteit voor informatieuitwisseling met derden
ZRG-SAM-014 Samenwerking betrokken zorgverleners Functionaliteit voor het coördineren van zorg met andere zorgverleners

Domein: ZORG - Consultatie & Behandeling

Code Naam Beschrijving
ZRG-CON-001 Dossierraadpleging Functionaliteit voor het raadplegen van het dossier via verschillende views
ZRG-CON-002 Dossiervoering Functionaliteit voor het bijwerken van het dossier
ZRG-CON-003 Medicatie Functionaliteit van de ondersteuning van de medicamenteuze behandeling
ZRG-CON-004 Operatie Functionaliteit voor de ondersteuning van het operatieve proces
ZRG-CON-005 Patientbewaking Functionaliteit voor bewaking van de patienten (monitoring, alarming)
ZRG-CON-006 Beslissingsondersteuning Functionaliteit voor de ondersteuning van besluiten van de zorgverlener
ZRG-CON-007 Verzorgingondersteuning Functionaliteit voor de ondersteuning van het verzorgingsproces
ZRG-CON-008 Ordermanagement Functionaliteit voor de uitvoering van de closed order loop
ZRG-CON-009 Resultaat afhandeling Functionaliteit voor de analyse en rapportage van resultaten
ZRG-CON-010 Kwaliteitsbewaking Functionaliteit voor de bewaking en signalering van fouten

Domein: ZORG - Aanvullend onderzoek

Code Naam Beschrijving
ZRG-AOZ-001 Laboratoriumonderzoek Functionaliteit voor de ondersteuning van processen op laboratoria (kcl, microbiologie, pathologie, klinische genetica, apotheeklab)
ZRG-AOZ-002 Beeldvormend onderzoek Functionaliteit voor de ondersteuning van beeldvormend onderzoek (Radiologie, Nucleair, Cardiologie) inclusief beeldmanagement (VNA)
ZRG-AOZ-003 Functieonderzoek Functionaliteit voor de ondersteuning van functieonderzoek (ECG, Longfunctie, Audiologie)

Domein: ZORG - Zorgondersteuning

Code Naam Beschrijving
ZRG-ZON-001 Zorgrelatiebeheer Functionaliteit voor beheren van alle gegevens van zorgrelaties
ZRG-ZON-002 Zorgplanning Functionaliteit voor het maken en beheren van afspraken, opnames, overplaatsingen, ontslag en verwijzing
ZRG-ZON-003 Resource planning Functionaliteit voor het plannen van resources en middelen
ZRG-ZON-004 Patiëntadministratie Functionaliteit voor beheer van demografie, contactpersonen en niet-medische informatie
ZRG-ZON-005 Patiëntenlogistiek Functionaliteit voor de ondersteuning van het verplaatsen van mensen en middelen
ZRG-ZON-006 Zorgfacturering Functionaliteit voor de vastlegging van de verrichting en factureren van het zorgproduct

Domein: ONDERWIJS

Code Naam Beschrijving
OND-001 Onderwijsportfolio Functionaliteit voor creatie en beheer van het onderwijsportfolio
OND-002 Learning Content Management Functionaliteit creatie en beheer van onderwijscontent
OND-003 Educatie Functionaliteit voor het geven van educatie dmv digitale middelen
OND-004 Toetsing Functionaliteit voor het geven en beoordelen van toetsen
OND-005 Student Informatie Functionaliteit voor het beheren van alle informatie van en over de student
OND-006 Onderwijs rooster & planning Functionaliteit voor het roosteren en plannen van het onderwijsprogramma

Domein: BEDRIJFSONDERSTEUNING

Code Naam Beschrijving
BED-001 Vastgoed Functionaliteit die beheer, bouw en exploitatie van gebouwen ondersteunt
BED-002 Inkoop Functionaliteit die inkopen van producten en diensten ondersteunt
BED-003 Voorraadbeheer Beheren/beheersen van de in- en uitgaande goederenstroom
BED-004 Kennismanagement Functionaliteit die het creëeren en delen van gezamenlijke kennis ondersteunt
BED-005 Datamanagement Functionaliteit voor ondersteunen van datamanagement (reference, master, metadata, analytics)
BED-006 Voorlichting Functionaliteit die het geven van voorlichting via verschillende kanalen ondersteunt
BED-007 Hotelservice Functionaliteit die de hotelfunctie ondersteunt (parkeren, catering, kassa)
BED-008 Klachtenafhandeling Functionaliteit die de afhandeling van klachten ondersteunt
BED-009 Personeelbeheer Functionaliteit die het administreren en managen van medewerkers ondersteunt
BED-010 Tijdsregistratie Functionaliteit waarmee het registreren van de bestede tijd wordt ondersteund
BED-011 Financieel beheer Functionaliteit waarmee de financiële administratie wordt ondersteund
BED-012 Salarisverwerking Functionaliteit waarmee het uitbetalen van salarissen wordt ondersteund
BED-013 Beheren medische technologie Functionaliteit die beheer, onderhoud en gebruik van medische apparatuur ondersteunt
BED-014 Beveiliging Functionaliteit die ondersteunt bij veiligheid, kwaliteit en milieu taken
BED-015 Relatiebeheer Functionaliteit ter ondersteuning van relatiebeheer in brede zin
BED-016 ICT-change en servicemanagement Functies voor het faciliteren van hulpvragen en oplossingen

Domein: GENERIEKE ICT FUNCTIES - Werkplek en samenwerken

Code Naam Beschrijving
GEN-WRK-001 Beheren werkplek Functionaliteit voor beheren hardware en software op de werkplek
GEN-WRK-002 Printing & scanning Functionaliteit voor het afdrukken en scannen
GEN-WRK-003 Kantoorautomatisering Functionaliteit voor standaard kantoorondersteuning
GEN-WRK-004 Unified communications Functionaliteit voor geïntegreerde communicatie
GEN-WRK-005 Document & Beeld beheer Functionaliteit voor het beheren van documenten en beelden
GEN-WRK-006 Content management Functionaliteit voor het verzamelen, managen en publiceren van informatie
GEN-WRK-007 Publieke ICT services Functionaliteit voor het aanbieden van publieke diensten

Domein: GENERIEKE ICT FUNCTIES - Identiteit, toegang en beveiliging

Code Naam Beschrijving
GEN-IAM-001 Identiteit & Authenticatie Functionaliteit voor het identificeren en authenticeren van individuen
GEN-IAM-002 Autorisatie management Functionaliteit voor beheren van rechten en toegang
GEN-IAM-003 Auditing & monitoring Functionaliteit voor audits en monitoring
GEN-IAM-004 Certificate service Functionaliteit voor uitgifte en beheer van certificaten
GEN-IAM-005 ICT Preventie en protectie Functionaliteit voor beheersen van kwetsbaarheden en penetraties

Domein: GENERIEKE ICT FUNCTIES - Datacenter

Code Naam Beschrijving
GEN-DC-001 Hosting servercapaciteit Functionaliteit voor het leveren van serverinfrastructuur
GEN-DC-002 Datacenter housing Functionaliteit voor beheren van het datacenter
GEN-DC-003 Hosting data storage Functionaliteit voor data opslag
GEN-DC-004 Data archiving Functionaliteit voor het archiveren van gegevens
GEN-DC-005 Backup & recovery Functionaliteit voor back-up en herstel
GEN-DC-006 Database management Functionaliteit voor het beheren van databases
GEN-DC-007 Provisioning & automation service Functionaliteit voor het distribueren en automatiseren van diensten
GEN-DC-008 Monitoring & alerting Functionaliteit voor het monitoren en analyseren van het datacentrum
GEN-DC-009 Servermanagement Functionaliteit voor het beheren van servers

Domein: GENERIEKE ICT FUNCTIES - Connectiviteit

Code Naam Beschrijving
GEN-CON-001 Netwerkmanagement Functionaliteit voor het beheren van het netwerk
GEN-CON-002 Locatiebepaling Functies voor het traceren en volgen van items
GEN-CON-003 DNS & IP Adress management Functionaliteit voor het beheren van DNS en IP adressen
GEN-CON-004 Remote Access Functionaliteit voor toegang op afstand
GEN-CON-005 Load Balancing Functionaliteit voor beheren van server en netwerkbelasting
GEN-CON-006 Gegevensuitwisseling Functionaliteit voor de ondersteuning van gegevensuitwisseling (ESB, Message broker)

AI Classificatie Prompt

const CLASSIFICATION_PROMPT = `Je bent een ervaren informatiemanager in de Nederlandse zorg met diepgaande expertise in de Ziekenhuis Referentie Architectuur (ZiRA). Je taak is om applicatiecomponenten te classificeren naar de juiste ZiRA-applicatiefunctie(s).

## Context
Een applicatiefunctie is volgens de ZiRA: "met elkaar samenhangende functionaliteit (geautomatiseerd gedrag) die wordt geboden door een applicatie(component), die ondersteuning biedt aan één of meerdere bedrijfsactiviteiten."

De classificatie is:
- Productonafhankelijk (focus op FUNCTIONALITEIT, niet op merknaam)
- Gebaseerd op de primaire functie van de applicatie
- Aangevuld met secundaire functies indien de applicatie meerdere domeinen bedient

## ZiRA Applicatiefuncties
{ZIRA_TAXONOMY}

## Te classificeren applicatie
Naam: {applicatie_naam}
Beschrijving: {beschrijving}
Leverancier/Product: {supplier_product}
Organisatie: {organisatie}
Hosting Type: {hosting_type}
Status: {status}
Business Importance: {business_importance}
Systeemeigenaar: {system_owner}
Business Owner: {business_owner}
Medische Techniek: {medische_techniek}

## Classificatie-instructies

1. **Analyseer** de beschikbare informatie:
   - Wat doet de applicatie functioneel?
   - Welke bedrijfsactiviteiten ondersteunt het?
   - In welk zorgdomein wordt het primair gebruikt?

2. **Match** met ZiRA-functies:
   - Bepaal de PRIMAIRE functie (hoofddoel van de applicatie)
   - Identificeer SECUNDAIRE functies (indien van toepassing)
   - Let op: veel EPD-functies vallen onder Consultatie & Behandeling
   - Generieke tooling valt vaak onder Bedrijfsondersteuning of Generieke ICT

3. **Beoordeel** de betrouwbaarheid:
   - HOOG: Duidelijke beschrijving, bekende applicatie, eenduidige functie
   - MIDDEN: Beperkte beschrijving maar herkenbare functie
   - LAAG: Onduidelijke beschrijving, generieke naam, meerdere mogelijke functies

## Output (JSON)
{
  "primaire_functie": {
    "code": "[ZiRA-code]",
    "naam": "[ZiRA-naam]", 
    "onderbouwing": "[korte uitleg waarom deze classificatie past]"
  },
  "secundaire_functies": [
    {
      "code": "[ZiRA-code]",
      "naam": "[ZiRA-naam]",
      "onderbouwing": "[korte uitleg]"
    }
  ],
  "confidence": "[HOOG|MIDDEN|LAAG]",
  "aandachtspunten": "[eventuele onzekerheden of suggesties voor verificatie]"
}`;

User Interface Specificaties

Gebruikersflow

┌─────────────────────────────────────────────────────────────────────────────┐
│                            GEBRUIKERSFLOW                                    │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  1. ZOEKEN & FILTEREN                                                        │
│     ↓                                                                        │
│  2. RESULTATENLIJST (klik op applicatie)                                    │
│     ↓                                                                        │
│  3. DETAIL/WIJZIGINGSSCHERM                                                 │
│     • Bekijk alle velden (read-only)                                        │
│     • AI-classificatie aanvragen                                            │
│     • Bewerkbare velden aanpassen                                           │
│     ↓                                                                        │
│  4. OPSLAAN → Automatisch volgende applicatie uit zoekresultaten            │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘

Veldtypes

Type Gedrag Velden
Read-only Alleen weergeven Name, SearchReference, Description, Organisation, Status, Business Importance, Business Impact Analyse, Hosting Type, Supplier Product, Business Owner, System Owner, FAB, TAB, Medische Techniek
Bewerkbaar Weergeven + wijzigen ApplicationFunction, Dynamics Factor, Complexity Factor, Number of Users, ICT Governance Model

Schermen

1. Dashboard

  • Totaal aantal applicaties
  • Aantal geclassificeerd / nog te classificeren (ApplicationFunction)
  • Voortgangsbalk per veld (ApplicationFunction, Dynamics, Complexity, Users, Governance)
  • Verdeling over ZiRA-domeinen (pie chart)
  • Verdeling over Regiemodellen (bar chart)
  • Capaciteitsmatrix (Dynamics x Complexity heatmap)
  • Recent geclassificeerd (activity feed)

2. Zoeken & Filteren (Hoofdscherm)

┌─────────────────────────────────────────────────────────────────────────────┐
│  Application Components                                    [Dashboard]      │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  ┌───────────────────────────────────────────────────────────────────────┐  │
│  │ 🔍 Zoeken...                                                          │  │
│  │    Zoek op naam, beschrijving, leverancier, systeemeigenaar...       │  │
│  └───────────────────────────────────────────────────────────────────────┘  │
│                                                                              │
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │ FILTERS                                                    [Wis alle]  ││
│  │                                                                         ││
│  │ Status:              ApplicationFunction:    Governance Model:          ││
│  │ ☑ In Production      ○ Alle                 ○ Alle                     ││
│  │ ☑ Implementation     ○ Ingevuld             ○ Ingevuld                 ││
│  │ ☐ Proof of Concept   ● Leeg                 ○ Leeg                     ││
│  │ ☐ End of support                                                       ││
│  │ ☐ End of life        Dynamics Factor:       Complexity Factor:         ││
│  │ ☐ Deprecated         ○ Alle                 ○ Alle                     ││
│  │ ☐ Shadow IT          ○ Ingevuld             ○ Ingevuld                 ││
│  │ ☐ Closed             ○ Leeg                 ○ Leeg                     ││
│  │ ☐ Undefined                                                            ││
│  │                      Organisation:          Hosting Type:              ││
│  │                      [Alle              ▼]  [Alle              ▼]      ││
│  └─────────────────────────────────────────────────────────────────────────┘│
│                                                                              │
│  Resultaten: 127 van 500 applicaties                    [Sorteer: Naam ▼]  │
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │ #  │ Naam              │ Status      │ AppFunctie │ Governance │ Dyn│Cmp││
│  ├────┼───────────────────┼─────────────┼────────────┼────────────┼────┼───┤│
│  │ 1  │ Epic Hyperspace   │ Production  │ ⚠️ Leeg    │ Model A    │ 3  │ 4 ││
│  │ 2  │ SAP Finance       │ Production  │ ⚠️ Leeg    │ ⚠️ Leeg    │ 2  │ 3 ││
│  │ 3  │ Philips PACS      │ Production  │ ⚠️ Leeg    │ Model C    │ -  │ - ││
│  │ 4  │ ChipSoft HiX      │ Production  │ ⚠️ Leeg    │ Model A    │ 4  │ 4 ││
│  │ 5  │ TOPdesk           │ Production  │ ⚠️ Leeg    │ ⚠️ Leeg    │ 2  │ 2 ││
│  │ ...│ ...               │ ...         │ ...        │ ...        │ ...│...││
│  └─────────────────────────────────────────────────────────────────────────┘│
│                                                                              │
│  [◀ Vorige]  Pagina 1 van 13  [Volgende ▶]     [Bulk AI Classificatie]     │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘

3. Detail/Wijzigingsscherm (na klik op applicatie)

┌─────────────────────────────────────────────────────────────────────────────┐
│  ← Terug naar lijst                              Applicatie 3 van 127       │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │ APPLICATIE INFORMATIE (read-only)                                       ││
│  │                                                                         ││
│  │ Naam:                    Epic Hyperspace                                ││
│  │ Search Reference:        EPIC-HS                                        ││
│  │ Beschrijving:            Elektronisch Patiëntendossier module voor      ││
│  │                          klinische documentatie en workflow             ││
│  │ ──────────────────────────────────────────────────────────────────────  ││
│  │ Leverancier/Product:     Epic Systems / Hyperspace                      ││
│  │ Organisatie:             Zorg                                           ││
│  │ Hosting Type:            On-premises                                    ││
│  │ Status:                  🟢 In Production                               ││
│  │ ──────────────────────────────────────────────────────────────────────  ││
│  │ Business Importance:     Kritiek                                        ││
│  │ Business Impact Analyse: BIA-2024-0042 (Klasse E)                       ││
│  │ Medische Techniek:       Nee                                            ││
│  │ ──────────────────────────────────────────────────────────────────────  ││
│  │ Business Owner:          Dr. A. van der Berg                            ││
│  │ System Owner:            J. Janssen                                     ││
│  │ Functioneel Beheer:      Team EPD                                       ││
│  │ Technisch Beheer:        Team Zorgapplicaties                           ││
│  └─────────────────────────────────────────────────────────────────────────┘│
│                                                                              │
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │ AI CLASSIFICATIE                                    [🤖 Analyseer]      ││
│  │                                                                         ││
│  │ ┌─────────────────────────────────────────────────────────────────────┐ ││
│  │ │ Status: ✅ Analyse voltooid                     Confidence: HOOG    │ ││
│  │ │                                                                     │ ││
│  │ │ Primaire functie: ZRG-CON-002 - Dossiervoering                     │ ││
│  │ │ "Epic Hyperspace is primair een EPD-module voor klinische          │ ││
│  │ │ documentatie, wat direct past bij de ZiRA-functie Dossiervoering"  │ ││
│  │ │                                                                     │ ││
│  │ │ Secundaire functies:                                                │ ││
│  │ │ • ZRG-CON-008 - Ordermanagement                                    │ ││
│  │ │ • ZRG-CON-003 - Medicatie                                          │ ││
│  │ │                                                                     │ ││
│  │ │                              [✓ Accepteer primaire suggestie]       │ ││
│  │ └─────────────────────────────────────────────────────────────────────┘ ││
│  └─────────────────────────────────────────────────────────────────────────┘│
│                                                                              │
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │ BEWERKBARE VELDEN                                                       ││
│  │                                                                         ││
│  │ ┌─────────────────────────────────┐  ┌───────────────────────────────┐ ││
│  │ │ ZiRA Applicatiefunctie         │  │ ICT Governance Model          │ ││
│  │ │                                │  │                               │ ││
│  │ │ Domein:                        │  │ [Regiemodel A              ▼] │ ││
│  │ │ [Zorg - Consultatie & Beh.  ▼] │  │                               │ ││
│  │ │                                │  │ Centraal Beheer               │ ││
│  │ │ Functie:                       │  │ ICMT voert volledig beheer    │ ││
│  │ │ [ZRG-CON-002 Dossiervoer.  ▼] │  │ uit                           │ ││
│  │ │                                │  │                               │ ││
│  │ │ Huidige waarde: ⚠️ Leeg        │  │ Huidige waarde: Model A       │ ││
│  │ └─────────────────────────────────┘  └───────────────────────────────┘ ││
│  │                                                                         ││
│  │ ┌─────────────────────────────────┐  ┌───────────────────────────────┐ ││
│  │ │ Dynamiek Factor                │  │ Complexiteit Factor           │ ││
│  │ │                                │  │                               │ ││
│  │ │ [3 - Hoog                   ▼] │  │ [4 - Zeer hoog             ▼] │ ││
│  │ │                                │  │                               │ ││
│  │ │ Veel wijzigingen,              │  │ Platform met meerdere         │ ││
│  │ │ > 4 releases/jaar              │  │ workloads, uitgebreide        │ ││
│  │ │                                │  │ governance                    │ ││
│  │ │ Huidige waarde: 3 - Hoog       │  │ Huidige waarde: 4 - Zeer hoog │ ││
│  │ └─────────────────────────────────┘  └───────────────────────────────┘ ││
│  │                                                                         ││
│  │ ┌─────────────────────────────────┐                                    ││
│  │ │ Aantal Gebruikers              │                                    ││
│  │ │                                │                                    ││
│  │ │ [10.000 - 15.000            ▼] │                                    ││
│  │ │                                │                                    ││
│  │ │ Huidige waarde: ⚠️ Leeg        │                                    ││
│  │ └─────────────────────────────────┘                                    ││
│  └─────────────────────────────────────────────────────────────────────────┘│
│                                                                              │
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │ Wijzigingen:  • ApplicationFunction: Leeg → ZRG-CON-002               ││
│  │               • Number of Users: Leeg → 10.000 - 15.000                ││
│  └─────────────────────────────────────────────────────────────────────────┘│
│                                                                              │
│  [◀ Vorige]  [Annuleren]  [Opslaan & Volgende ▶]  [Opslaan & Sluiten]      │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘

Navigatie-gedrag:

  • [Opslaan & Volgende]: Slaat wijzigingen op en opent automatisch de volgende applicatie uit de gefilterde resultatenlijst
  • [Opslaan & Sluiten]: Slaat wijzigingen op en keert terug naar de zoekresultaten
  • [◀ Vorige]: Gaat naar vorige applicatie (zonder op te slaan, vraagt bevestiging bij wijzigingen)
  • [Annuleren]: Keert terug naar zoekresultaten zonder op te slaan

4. Bulk Operaties

  • Filter op confidence niveau (bijv. alleen HOOG auto-accepteren)
  • Preview van bulk-wijzigingen
  • Bevestigingsdialoog
  • Rollback mogelijkheid

4. Rapportage

  • Export naar Excel
  • Classificatie-log met timestamps
  • Overzicht per domein
  • Niet-geclassificeerde applicaties met redenen

UI Componenten

// Status enum for filtering
type ApplicationStatus = 
  | 'Status'
  | 'Closed'
  | 'Deprecated'
  | 'End of life'
  | 'End of support'
  | 'Implementation'
  | 'In Production'
  | 'Proof of Concept'
  | 'Shadow IT'
  | 'Undefined';

// Filter state for search screen
interface SearchFilters {
  searchText: string;
  statuses: ApplicationStatus[];
  applicationFunction: 'all' | 'filled' | 'empty';
  governanceModel: 'all' | 'filled' | 'empty';
  dynamicsFactor: 'all' | 'filled' | 'empty';
  complexityFactor: 'all' | 'filled' | 'empty';
  organisation: string | null;
  hostingType: string | null;
}

// Search results with pagination
interface SearchResult {
  applications: ApplicationListItem[];
  totalCount: number;
  currentPage: number;
  pageSize: number;
  totalPages: number;
}

// List item (summary view)
interface ApplicationListItem {
  id: string;
  key: string;
  name: string;
  status: ApplicationStatus;
  applicationFunction: ReferenceValue | null;
  governanceModel: ReferenceValue | null;
  dynamicsFactor: ReferenceValue | null;
  complexityFactor: ReferenceValue | null;
}

// Full application details (for detail screen)
interface ApplicationDetails {
  // Identity
  id: string;
  key: string;
  
  // Read-only fields
  name: string;
  searchReference: string;
  description: string;
  supplierProduct: string;
  organisation: string;
  hostingType: string;
  status: ApplicationStatus;
  businessImportance: string;
  businessImpactAnalyse: string;
  systemOwner: string;
  businessOwner: string;
  functionalApplicationManagement: string;
  technicalApplicationManagement: string;
  medischeTechniek: boolean;
  
  // Editable reference fields
  applicationFunction: ReferenceValue | null;
  dynamicsFactor: ReferenceValue | null;
  complexityFactor: ReferenceValue | null;
  numberOfUsers: ReferenceValue | null;
  governanceModel: ReferenceValue | null;
}

// Navigation state for detail screen
interface NavigationState {
  currentIndex: number;           // Position in filtered results (0-based)
  totalInResults: number;         // Total applications in current filter
  applicationIds: string[];       // Ordered list of IDs from search results
  filters: SearchFilters;         // Active filters (to restore on "back")
}

interface ReferenceValue {
  objectId: string;
  key: string;
  name: string;
  description?: string;
}

interface AISuggestion {
  primaryFunction: {
    code: string;
    name: string;
    reasoning: string;
  };
  secondaryFunctions: Array<{
    code: string;
    name: string;
    reasoning: string;
  }>;
  confidence: 'HOOG' | 'MIDDEN' | 'LAAG';
  notes: string;
}

// Pending changes (shown before save)
interface PendingChanges {
  applicationFunction?: { from: ReferenceValue | null; to: ReferenceValue };
  dynamicsFactor?: { from: ReferenceValue | null; to: ReferenceValue };
  complexityFactor?: { from: ReferenceValue | null; to: ReferenceValue };
  numberOfUsers?: { from: ReferenceValue | null; to: ReferenceValue };
  governanceModel?: { from: ReferenceValue | null; to: ReferenceValue };
}

interface ClassificationResult {
  applicationId: string;
  changes: PendingChanges;
  source: 'AI_ACCEPTED' | 'AI_MODIFIED' | 'MANUAL';
  timestamp: Date;
  userId: string;
}

// Reference option lists (loaded from Jira Assets)
interface ReferenceOptions {
  dynamicsFactors: ReferenceValue[];
  complexityFactors: ReferenceValue[];
  numberOfUsers: ReferenceValue[];
  governanceModels: ReferenceValue[];
  applicationFunctions: ReferenceValue[];
  organisations: ReferenceValue[];
  hostingTypes: ReferenceValue[];
}

Project Structuur

zira-classificatie-tool/
├── package.json
├── .env.example
├── README.md
├── docker-compose.yml          # Voor lokale development
│
├── backend/
│   ├── package.json
│   ├── tsconfig.json
│   ├── src/
│   │   ├── index.ts            # Express server entry
│   │   ├── config/
│   │   │   └── env.ts          # Environment configuratie
│   │   ├── services/
│   │   │   ├── jiraAssets.ts   # Jira Assets API client
│   │   │   ├── claude.ts       # Claude API client
│   │   │   └── classification.ts
│   │   ├── routes/
│   │   │   ├── applications.ts
│   │   │   ├── classifications.ts
│   │   │   ├── applicationFunctions.ts
│   │   │   └── referenceData.ts    # NEW: Dynamics, Complexity, Users, Governance
│   │   ├── data/
│   │   │   ├── zira-taxonomy.json
│   │   │   └── management-parameters.json  # NEW: Fallback reference data
│   │   └── types/
│   │       └── index.ts
│   └── tests/
│
├── frontend/
│   ├── package.json
│   ├── vite.config.ts
│   ├── tailwind.config.js
│   ├── src/
│   │   ├── main.tsx
│   │   ├── App.tsx
│   │   ├── components/
│   │   │   ├── Dashboard.tsx
│   │   │   ├── SearchFilterBar.tsx         # NEW: Zoekbalk en filters
│   │   │   ├── ApplicationList.tsx         # NEW: Resultatenlijst
│   │   │   ├── ApplicationListItem.tsx     # NEW: Regel in resultatenlijst
│   │   │   ├── ApplicationDetail.tsx       # Detail/wijzigingsscherm
│   │   │   ├── ReadOnlyFields.tsx          # NEW: Read-only velden sectie
│   │   │   ├── AIClassification.tsx        # AI suggestie sectie
│   │   │   ├── EditableFields.tsx          # NEW: Bewerkbare velden sectie
│   │   │   ├── FunctionSelector.tsx        # ZiRA functie dropdown
│   │   │   ├── ManagementParameters.tsx    # Dynamics, Complexity, Users
│   │   │   ├── GovernanceSelector.tsx      # Regiemodel selector
│   │   │   ├── PendingChanges.tsx          # NEW: Wijzigingen preview
│   │   │   ├── NavigationBar.tsx           # NEW: Vorige/Volgende navigatie
│   │   │   ├── CapacityMatrix.tsx          # Visualisatie matrix
│   │   │   └── BulkOperations.tsx
│   │   ├── hooks/
│   │   │   ├── useApplications.ts
│   │   │   ├── useClassification.ts
│   │   │   ├── useReferenceData.ts         # Hook voor reference data
│   │   │   ├── useSearch.ts                # NEW: Zoeken en filteren
│   │   │   └── useNavigation.ts            # NEW: Detail navigatie state
│   │   ├── services/
│   │   │   └── api.ts
│   │   ├── stores/                         # NEW: State management
│   │   │   ├── searchStore.ts              # Filter/zoek state
│   │   │   └── navigationStore.ts          # Navigatie state
│   │   └── types/
│   │       └── index.ts
│   └── public/
│
└── data/
    ├── zira-taxonomy.json      # ZiRA functies als JSON
    └── management-parameters.json  # Beheerparameters als JSON

Environment Variables

# .env.example

# Jira Assets
JIRA_HOST=https://jira.zuyderland.nl
JIRA_PAT=your_personal_access_token_here
JIRA_SCHEMA_ID=your_schema_id

# Object Type IDs (ophalen via API)
JIRA_APPLICATION_COMPONENT_TYPE_ID=your_type_id
JIRA_APPLICATION_FUNCTION_TYPE_ID=your_function_type_id
JIRA_DYNAMICS_FACTOR_TYPE_ID=your_dynamics_factor_type_id
JIRA_COMPLEXITY_FACTOR_TYPE_ID=your_complexity_factor_type_id
JIRA_NUMBER_OF_USERS_TYPE_ID=your_number_of_users_type_id
JIRA_GOVERNANCE_MODEL_TYPE_ID=your_governance_model_type_id

# Attribute IDs (ophalen via API - nodig voor updates)
JIRA_ATTR_APPLICATION_FUNCTION=attribute_id
JIRA_ATTR_DYNAMICS_FACTOR=attribute_id
JIRA_ATTR_COMPLEXITY_FACTOR=attribute_id
JIRA_ATTR_NUMBER_OF_USERS=attribute_id
JIRA_ATTR_GOVERNANCE_MODEL=attribute_id

# Claude API
ANTHROPIC_API_KEY=your_anthropic_api_key_here

# Application
PORT=3001
NODE_ENV=development

Implementatiestappen

Fase 1: Setup (dag 1)

  1. Project initialiseren met Vite + Express
  2. TypeScript configuratie
  3. Jira Assets API connectie testen
  4. Environment setup

Fase 2: Backend (dag 2-3)

  1. Jira Assets service implementeren
  2. Claude API integratie
  3. REST endpoints
  4. Error handling & logging

Fase 3: Frontend (dag 4-5)

  1. Dashboard component
  2. Classificatie werkscherm
  3. Function selector met search
  4. State management

Fase 4: Integratie (dag 6)

  1. End-to-end flow testen
  2. Bulk operaties
  3. Rapportage export
  4. Performance optimalisatie

Fase 5: Testing & Deployment (dag 7)

  1. Unit tests
  2. Integration tests
  3. Documentatie
  4. Deployment instructies

Aandachtspunten voor Claude Code

  1. Start met Jira Assets API testen - Verifieer eerst dat de connectie werkt en je de juiste schema/objecttype ID's hebt

  2. ApplicationFunction objecten ophalen - Deze moeten al bestaan in Jira Assets. Check of ze overeenkomen met de ZiRA-taxonomie

  3. Beveiliging - PAT tokens nooit committen, altijd via .env

  4. Rate limiting - Jira Assets kan rate limits hebben, implementeer exponential backoff

  5. Validatie - Valideer dat de ApplicationFunction die geselecteerd wordt daadwerkelijk bestaat voordat je update

  6. Logging - Uitgebreide logging voor troubleshooting en audit trail


Contactgegevens

  • Project eigenaar: Bert Hausmans
  • Afdeling: ICMT - Zorg en Ondersteunende Applicaties
  • Organisatie: Zuyderland Medisch Centrum