# CMDB Insight - 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 ``` ┌─────────────────────────────────────────────────────────────────┐ │ CMDB Insight │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │ │ │ 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). ```typescript // 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 ```bash GET /rest/assets/1.0/objectschema/list ``` #### 2. ObjectType ID vinden ```bash GET /rest/assets/1.0/objectschema/{schemaId}/objecttypes ``` #### 3. Applicaties ophalen (met filters) ```bash # 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 } ``` ```bash # 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 } ``` ```bash # 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) ```bash POST /rest/assets/1.0/aql/objects Content-Type: application/json { "qlQuery": "objectType = \"ApplicationFunction\"", "resultPerPage": 200, "includeAttributes": true } ``` #### 5. Dynamics Factor objecten ophalen ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```typescript 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 ```typescript // 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 ``` cmdb-insight/ ├── 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 # .env.example # Jira Assets JIRA_HOST=https://jira.zuyderland.nl JIRA_PAT=your_personal_access_token_here # 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