Bildbeskrivning: Färgprover och en färgpalett bredvid en smartphone som visar olika färgalternativ.
Tillgänglig datavisualisering
Tillgänglig datavisualisering
En heltäckande guide för utvecklare om hur man skapar diagram, instrumentpaneler och infografik som är uppfattbara, användbara, begripliga och robusta – i full överensstämmelse med WCAG 2.2 AA.
Datavisualisering är ett av de mest kraftfulla verktygen i den moderna utvecklarens verktygslåda – och ett av de som oftast är otillgängliga. Ett diagram som ser vackert ut för seende användare med normalt färgseende kan vara helt obegripligt för en användare av skärmläsare, en person med deuteranopi eller någon som navigerar helt med tangentbordet. Det är inte ett sällsynt specialfall: ungefär 1 av 12 män och 1 av 200 kvinnor har någon form av färgblindhet (prevalenssiffrorna baseras främst på befolkningsstudier i Nordeuropa; siffrorna varierar beroende på befolkning). Enligt WHO lever cirka 16 % av världens befolkning – ungefär 1,3 miljarder människor – med någon form av funktionsnedsättning.
Den goda nyheten? Tillgänglighet inom datavisualisering är i stort sett ett tekniskt problem med välkända lösningar. Den här guiden går igenom varje steg – från färgkontrast och semantisk markering till ARIA-mönster, tangentbordsnavigering och alternativ till datatabeller – så att dina diagram och instrumentpaneler fungerar för alla.
ett WCAG-fel (WebAIM 2024)
en funktionsnedsättning — ca 16 % (WHO)
) i Storbritannien och USA
1. WCAG 2.2 för datavisualisering: Det viktigaste
WCAG 2.2 strukturerar kraven kring fyra principer – Uppfattbar, Användbar, Förståelig och Robust (POUR). Varje brist i datavisualiseringen kan härledas till ett brott mot en eller flera av dessa principer. I följande tabell kopplas de mest diagramrelevanta framgångskriterierna till respektive princip på nivå AA.
| Kriterium | Nivå | Vad det innebär för diagram | Vanligt fel | Prioritet |
|---|---|---|---|---|
| 1.1.1 Icke-textinnehåll | A | Varje diagram måste ha ett textalternativ eller en motsvarande datatabell | SVG/canvas utan aria-label eller title |
Avgörande |
| 1.3.1 Information och relationer | A | Den struktur som förmedlas visuellt måste kunna fastställas programmatiskt | Legender utan semantisk koppling till dataserier | Avgörande |
| 1.3.3 Sensoriska egenskaper | A | Instruktionerna får inte enbart baseras på färg eller form | ”De röda staplarna visar fel” i diagramkommentarerna | Avgörande |
| 1.4.1 Användning av färg | A | Färg kan inte vara det enda visuella sättet att förmedla information | Linjediagram där serierna endast skiljs åt genom färg | Avgörande |
| 1.4.3 Kontrast (minimivärde) | AA | Texten i/på diagrammen måste uppfylla kravet på 4,5:1 (3:1 för stor text) | Axeltiketter eller verktygstips på bakgrunder med låg kontrast | Hög |
| 1.4.11 Kontrast för icke-text | AA | UI-komponenter och grafiska element måste ha en kontrast på 3:1 mot intilliggande färger | Ljusgrå datapunkter på vit bakgrund | Hög |
| 2.1.1 Tangentbord | A | Alla diagramfunktioner kan styras med tangentbordet | Verktygstips som endast visas när man håller muspekaren över dem | Avgörande |
| 2.4.3 Fokusordning | A | Fokus flyttas mellan diagramkomponenterna i en logisk ordning | SVG-elementens ordning i DOM stämmer inte överens med den visuella ordningen | Hög |
| 2.4.7 Fokus synligt | AA | Det diagramelement som för närvarande har fokus måste ha en synlig fokusindikator | Standardkontur döljs med outline: none |
Hög |
| 4.1.2 Namn, roll, värde | A | Anpassade diagramkomponenter måste tillhandahålla information om namn, roll och status till hjälpmedel | Anpassade växlingsfilter utan ARIA-status | Avgörande |
WCAG 2.2 jämfört med 2.1
WCAG 2.2 inför 9 nya framgångskriterier, tar bort SC 4.1.1 Parsing (föråldrat i moderna webbläsare) och höjer kravet på synlig fokus från 2.4.7 till det strängare 2.4.11. De kriterier som har störst inverkan på diagram är 2.4.11 Fokusutseende (förbättrade krav på storlek och kontrast för fokusindikatorer) och 2.5.3 Etikett i namn (vilket påverkar verktygstips för ikonknappar på diagramkontroller). För att uppfylla nivå AA måste alla A- och AA-kriterier uppfyllas. Konsultera alltid den officiella W3C-specifikationen för att verifiera aktuella kriterier.
2. Färg: Mer än bara rött och grönt
Färg är det vanligaste problemet när det gäller tillgänglighet inom datavisualisering. Lösningen är inte att undvika färg – utan att aldrig förlita sig enbart på färg. Det finns tre aspekter av färgtillgänglighet i diagram: val av färgpalett, kontrastförhållanden och redundant kodning.
2.1 Färgblinda-anpassade färgpaletter
Det farligaste färgparet inom datavisualisering är rött och grönt – en kombination som cirka 8 % av den manliga befolkningen inte kan skilja åt. Följande färgpalett är ett av de mest omtalade färgblindvänliga alternativen inom forskningen om datavisualisering, utformad för att vara tydligt urskiljbar för personer med deuteranopi, protanopi och tritanopi – även om specifika färgkombinationer fortfarande bör valideras med en färgblindhetssimulator för just ditt diagram.
Rekommenderas: Okabe-Ito-paletten (anses allmänt vara lämplig för personer med färgblindhet; kontrollera kombinationerna i just ditt sammanhang)
Kontrastexempel — Beräknade med hjälp av WCAG:s formel för relativ luminans
2.2 Redundant kodning
Den absolut mest effektiva tillgänglighetstekniken för diagram är redundant kodning: att förmedla samma information via flera visuella kanaler samtidigt. Förlita dig aldrig enbart på färg – kombinera den med minst en av följande faktorer: form, mönster, placering, text eller struktur.
Linjediagram endast i färg
Tre serier som endast skiljer sig åt i nyans (röd/grön/blå). Omöjliga att skilja åt för personer med deuteranopi. Inga etiketter på linjerna. Verktygstips visas endast vid muspekning.
Färg- och mönsterkodning
Samma tre linjer använder både olika färgnyanser OCH olika streckmönster (heldragna / streckade / prickade). Varje linje är direkt märkt vid ändhållplatsen. Markeringarna har olika former (cirkel / fyrkant / triangel).
Redundant kodning + alt-text + tabell
Färg + mönster + form + tydliga etiketter + omfattande aria-label + dold sammanfattning + länkad datatabell. Fungerar för alla användare och i alla sammanhang.
Fällan med statusöversikter
Statusindikatorer i form av trafikljus (rött/gult/grönt) är ett av de vanligaste tillgänglighetsproblemen i företagsdashboards. Kombinera dem alltid med en ikon eller en textetikett: aria-label="Status: Error" och en synlig text eller symbol. Använd aldrig enbart färg för att visa systemets status.
3. Semantisk markering och ARIA för diagram
Diagram som renderas i SVG eller <canvas> är ofta otillgängliga för hjälpmedel
om man inte gör en medveten ansträngning. SVG kan visar semantik när den är korrekt utformad; <canvas>,
som en bitmapyta, saknar helt och hållet en inbyggd tillgänglighetsmodell. Oavsett vilket kräver meningsfull
tillgänglighet en genomtänkt markeringsstrategi. Här är en hierarki över olika tillvägagångssätt,
från det enklaste till det mest fullständiga.
3.1 Tillgänglighet för SVG
SVG har inbyggd tillgänglighetssemantik när det används på rätt sätt. Ett fullt tillgängligt SVG-diagram kräver
<title>, <desc>, samt lämpliga roller vid det yttersta elementet.
<!-- Accessible SVG bar chart shell -->
<svg
role="img"
aria-labelledby="chart-title chart-desc"
viewBox="0 0 600 400"
xmlns="http://www.w3.org/2000/svg">
<!-- Screen readers read title + desc as the alt text -->
<title id="chart-title">Monthly active users, Jan–Jun 2025</title>
<desc id="chart-desc">
Bar chart showing MAU growth from 42,000 in January to
89,500 in June 2025. Peak month: June. Lowest: January.
</desc>
<!-- Each data bar is individually focusable -->
<g role="list" aria-label="Monthly data bars">
<g role="listitem">
<rect
tabindex="0"
role="img"
aria-label="January: 42,000 monthly active users"
x="40" y="200" width="60" height="168"
fill="#0072B2"
aria-describedby="jan-tooltip"
/>
<text id="jan-tooltip" class="sr-only">
January 2025, 42,000 users, 112% of Q4 average
</text>
</g>
<!-- Repeat for each data point -->
</g>
</svg>
<!-- Always provide a visible data table fallback -->
<details>
<summary>View data as table</summary>
<!-- Full table here -->
</details>
3.2 Diagram i Canvas
<canvas> visas som en bitmapp — den har nej inbyggd tillgänglighetssemantik.
Mönstret för tillgänglig canvas använder en reserv-DOM-delträd inuti canvas-elementet
som hjälpmedel istället läser upp.
<canvas
id="revenue-chart"
width="800"
height="400"
aria-label="Revenue by region, Q1 2025"
role="img">
<!-- Fallback: AT reads this when canvas is unsupported -->
<p>
Q1 2025 Revenue by Region: EMEA £2.4M (38%),
Americas £2.1M (33%), APAC £1.8M (29%).
EMEA leads for third consecutive quarter.
</p>
<table>
<!-- Full data table -->
</table>
</canvas>
<!-- For Chart.js: use the accessibility plugin -->
<script>
new Chart(ctx, {
plugins: [{
id: 'a11y',
afterRender(chart) {
// Rebuild live ARIA region from chart data
const liveRegion = document.getElementById('chart-live');
liveRegion.textContent = buildSummary(chart.data);
}
}]
});
</script>
Chart.js + chartjs-plugin-a11y
Community-pluginet chartjs-plugin-a11y genererar automatiskt tillgängliga reservtabeller och ARIA-beskrivningar utifrån Chart.js-dataobjekt. Det sparar mycket standardkod för team som redan använder Chart.js.
4. Tangentbordsnavigering och fokushantering
Tillgänglighet via tangentbordet i diagram innebär tre saker: att kunna nå alla interaktiva element med tangentbordet, att kunna använda dessa element utan mus, och att få samma information (verktygstips, zoom, filter) som musanvändare.
4.1 Det rörliga tabindexmönstret
För diagram med många datapunkter (t.ex. ett punktdiagram med 200 punkter) blir det omöjligt att använda om varje punkt
ingår i tabbningsordningen. Använd rörligt tabindex mönster: endast
en punkt åt gången ingår i tabulatorsekvensen (tabindex="0"); med piltangenterna flyttar du fokus inom
diagramgruppen.
// Roving tabindex for interactive chart data points
class AccessibleChart {
constructor(containerEl) {
this.points = [...containerEl.querySelectorAll('[data-point]')];
this.currentIndex = 0;
this.init();
}
init() {
// Set initial roving tabindex
this.points.forEach((pt, i) => {
pt.setAttribute('tabindex', i === 0 ? '0' : '-1');
pt.addEventListener('keydown', (e) => this.handleKey(e, i));
});
}
handleKey(e, idx) {
const { key } = e;
let next = idx;
if (key === 'ArrowRight' || key === 'ArrowDown')
next = Math.min(idx + 1, this.points.length - 1);
else if (key === 'ArrowLeft' || key === 'ArrowUp')
next = Math.max(idx - 1, 0);
else if (key === 'Home') next = 0;
else if (key === 'End') next = this.points.length - 1;
else return;
e.preventDefault();
this.points[idx].setAttribute('tabindex', '-1');
this.points[next].setAttribute('tabindex', '0');
this.points[next].focus();
// Show tooltip programmatically
this.showTooltip(this.points[next]);
}
}
4.2 Fokusindikatorer
WCAG 2.2 inför strängare krav på fokusindikatorer genom 2.4.11 Fokus utseende (AA). Indikatorn måste ha en yta som minst motsvarar omkretsen av den komponent som inte har fokus × 2 CSS-pixlar, med en kontrast på minst 3:1 mellan fokuserat och ofokuserat tillstånd.
/* WCAG 2.2 AA compliant focus indicator for data points */
[data-point]:focus-visible {
/* 2px offset, 3px ring = clearly visible at any size */
outline: 3px solid #005fcc;
outline-offset: 3px;
/* Additional contrast boost for AAA */
box-shadow: 0 0 0 5px rgba(0, 95, 204, 0.2);
}
/* Respect user preference */
@media (forced-colors: active) {
[data-point]:focus-visible {
outline-color: Highlight;
outline-width: 3px;
}
}
5. Mönster för skärmläsare
Att utforma för skärmläsare innebär att utforma för en linjär ljudupplevelse av data som i sig är rumslig och visuell. Den viktigaste insikten är att du inte omvandlar diagrammet – du skriver istället en beskrivning av vad diagrammet förmedlar.
5.1 Att skriva bra diagrambeskrivningar
En bra diagrambeskrivning består av tre delar:
- Typ och syfte: ”Stapeldiagram som visar kvartalsintäkterna för räkenskapsåret 2025.”
- Huvudsaklig slutsats: ”Det tredje kvartalet var det starkaste med 4,2 miljoner pund, en ökning med 28 % jämfört med det andra kvartalet.”
- Viktiga undantag eller sammanhang: ”Nedgången under första kvartalet beror på störningar i leveranskedjan i januari.”
Allmän alt-text
alt="chart"alt="bar chart"alt="revenue dashboard"
Dessa uppfyller inte kraven i 1.1.1. De identifierar behållaren, inte innehållet.
Beskrivande alt-text
”Stapeldiagram som visar månadsförsäljningen januari–juni 2025. Juni har den högsta försäljningen på 89 500 dollar. Januari har den lägsta på 42 000 dollar.”
Räcker för enkla diagram. Saknar beskrivning av trender.
Berättat med sammanhang
”Stapeldiagram: Antal aktiva användare per månad, jan–jun 2025. Stadig tillväxt varje månad. Antalet aktiva användare per månad fördubblades från 42 000 (jan) till 89 500 (jun). Vändpunkten i mars sammanfaller med lanseringen av version 2.0.”
5.2 Live-regioner för dynamiska diagram
När data i diagram uppdateras i realtid (analyspaneler, övervakningsverktyg) ska du använda ARIA-live-regioner för att meddela ändringar utan att störa användarens aktuella läsposition.
<!-- Polite live region: announces after current speech -->
<div
id="chart-status"
role="status"
aria-live="polite"
aria-atomic="true"
class="sr-only">
</div>
<!-- Assertive region: interrupts for critical alerts only -->
<div
id="chart-alert"
role="alert"
aria-live="assertive"
class="sr-only">
</div>
<script>
// When data updates, push a human-readable summary
function announceChartUpdate(newData, isAlert = false) {
const id = isAlert ? 'chart-alert' : 'chart-status';
const el = document.getElementById(id);
// Clear then set: forces screen readers to re-read
el.textContent = '';
requestAnimationFrame(() => {
el.textContent = buildSummary(newData);
});
}
</script>
6. Tillgängliga datatabeller som reservlösningar
Varje diagram bör åtföljas av en tillgänglig datatabell – antingen synlig eller tillgänglig via en utfällningsknapp. Detta är inte bara ett tillgänglighetskrav, utan också god informationsarkitektur. Tabeller gör det möjligt för användarna att hitta specifika värden, som ofta döljs i diagram.
6.1 Rekommenderade metoder för tabellmarkering
| Krav | Genomförande | Effekt | Ansträngning |
|---|---|---|---|
| Bildtext / titel | <caption> element eller aria-labelledby |
Skärmläsare läser upp tabellens syfte före innehållet | Låg |
| Kolumnrubriker | <th scope="col"> för varje kolumn |
Cellrelationerna visas korrekt | Låg |
| Radrubriker | <th scope="row"> för den första kolumnen när det är relevant |
Användarna kan navigera rad för rad utan att tappa sammanhanget | Låg |
| Komplexa rubriker | id + headers egenskaper för sammanslagna celler |
Rubriker på flera nivåer läses upp korrekt i NVDA/JAWS | Medel |
| Sammanfattning | <caption> eller föregående stycke med sammanfattning |
Användarna kan välja om de vill se hela tabellen | Låg |
| Sorterbara kolumner | aria-sort="ascending|descending|none" på <th> |
Aktuell sorteringsstatus meddelas till skärmläsaren | Medel |
| Överskjutning / bläddra | Vik in role="region" med tabindex="0" och aria-label |
Rullbara områden som kan nås med tangentbordet | Låg |
| Tomma celler | Användning — eller uttryckligen ”Inga uppgifter” – lämna aldrig fältet tomt |
Förhindrar förvirrande tystnader i skärmläsarens uppläsning | Låg |
7. Jämförelse av diagramtyper: Avvägningar mellan tillgänglighet
Alla diagramtyper är inte lika lättillgängliga direkt. I följande matris betygsätts varje vanlig typ utifrån fyra tillgänglighetsaspekter, med rekommenderade lösningar för svåra fall.
| Diagramtyp | Skärmläsare | Färgblind | Tangentbord | Synnedsättning | Viktiga riskreducerande åtgärder |
|---|---|---|---|---|---|
| Stapel / Kolumn | Bra | Bra | Bra | Bra | Direkta etiketter, datatabell |
| Linjediagram | Mässa | Dålig | Mässa | Mässa | Streckmönster + markörer + etiketter |
| Paj / Donut | Dålig | Dålig | Mässa | Dålig | Ersätt med stapeldiagram när det är möjligt; ange alltid procentandelar |
| Spridningsdiagram | Dålig | Mässa | Dålig | Dålig | Rörligt tabindex; sammanfattning av kluster; datatabell |
| Värmekarta | Dålig | Dålig | Mässa | Dålig | Sekventiell enfärgad palett; cellvärdesetiketter; tabell |
| Ytdiagram | Mässa | Mässa | Mässa | Mässa | Undvik att stapla fler än tre serier; använd mönster |
| Mätare / Radial | Dålig | Mässa | Dålig | Dålig | Ange det numeriska värdet tydligt; aria-value="now/min/max" |
| Tabell + minidiagram | Bra | Bra | Bra | Bra | Bästa standardinställning för instrumentpaneler med många mätvärden |
Rekommendation för cirkeldiagram
Pie charts are the hardest chart type to make accessible and often communicate less information than a sorted bar chart. Unless a specific use case requires part-to-whole relationships (and <5 segments), prefer bar charts. This is both an accessibility and a data communication recommendation.
Demo av tillgänglig diagram
Följande stapeldiagram visar de mönster som beskrivs i denna guide. Varje stapel kan markeras med tangentbordet och har en egen aria-label, och diagrammet innehåller en synlig reservtabell.
Visa underliggande data i tabellform
| Diagramtyp | Användningsgrad | Förändring jämfört med föregående år | Den viktigaste saknade funktionen |
|---|---|---|---|
| Datatabeller | 82% | +11 sidor | Sortera myndighetsmeddelanden |
| Stapeldiagram | 71% | +9 procentenheter | Tangentbordsnavigering mellan raderna |
| Linjediagram | 54% | +6 procentenheter | Redundant kodning (utan färgskillnad) |
| Ytdiagram | 43% | +4 procentenheter | Mönsterfyllningar för staplade områden |
| Spridningsdiagram | 31% | +2 sidor | Rörligt tabindex / punktnavigering |
| Cirkeldiagram | 23% | +1 s. | Segmentbeteckningar med procenttal |
8. Räckviddsberäknare: Beräkna din icke-nådda målgrupp
Ett av de mest effektiva sätten att skapa engagemang inom organisationen för tillgänglighetsarbetet är att beräkna hur stor målgruppen är. Använd kalkylatorn nedan för att uppskatta hur många användare som för närvarande utestängs på grund av vanliga brister i diagrammens tillgänglighet.
🧮 Beräkningsverktyg för tillgänglighet
Ange dina analysdata för att uppskatta hur många användare som eventuellt inte får tillgång till dina nuvarande diagram.
9. Testa din implementering
Inget automatiserat verktyg kan upptäcka alla tillgänglighetsproblem – forskning tyder på att automatiserade verktyg endast upptäcker 30–40 % av bristerna enligt WCAG. En heltäckande teststrategi kombinerar automatiserad genomsökning, manuella tester och användartester med hjälpmedel.
9.1 Testverktygskedja
| Verktyg | Typ | Bäst för | Kostnad | Gäller det just den här tabellen? |
|---|---|---|---|---|
| axe DevTools | Webbläsartillägg | Automatisk WCAG-skanning, ARIA-validering | Gratis / Pro | Delvis |
| NVDA + Firefox | Skärmläsare (Windows) | Praktisk erfarenhet av hjälpmedel, fälttester | Gratis | Ja |
| VoiceOver + Safari | Skärmläsare (macOS/iOS) | Apples ekosystem; tillgänglighet för SVG | Gratis | Ja |
| Färgkontrastanalysator | Skrivbordsapp | Kontrastkontroll pixel för pixel på alla användargränssnitt | Gratis | Ja |
| Coblis / Sim-daltonism | Färgsimulator | Förhandsgranska diagram för åtta olika typer av färgblindhet | Gratis | Ja |
| Navigering enbart med tangentbordet | Handbok | Tabbningsordning, upptäckt av fokusfällor, rörligt tabindex | Gratis | Ja |
| Pa11y CI | CLI-/CI-integration | Automatiserad tillgänglighetsregression i arbetsflöden | Gratis | Delvis |
| WAVE | Webbläsartillägg | Visuell översikt över WCAG-problem; användbart för etiketter | Gratis | Delvis |
9.2 Rekommenderad testsekvens
10. Checklista för genomförande
Använd denna checklista när du lanserar nya diagram, instrumentpaneler eller funktioner för datavisualisering. Alla punkter märkta med WCAG AA är obligatoriska för att uppfylla lagkraven i många jurisdiktioner (EN 301 549 inom EU, Section 508 i USA).
Uppfattbar
-
Diagrammet visar en tydlig
alt,aria-label, eller<title>/<desc>kombination – inte bara ”diagram” (WCAG 1.1.1) - Färg är aldrig det enda sättet att koda information – mönster, form eller direkt text som används redundant (WCAG 1.4.1)
- All text i/på diagram uppfyller kontrastförhållandet 4,5:1 (3:1 för 18 pt eller mer, eller fetstil 14 pt eller mer) (WCAG 1.4.3)
- Grafiska element (staplar, linjer, datapunkter) uppfyller kravet på 3:1 kontrast mot intilliggande bakgrund (WCAG 1.4.11)
- Struktur och relationer i diagram kan fastställas programmatiskt (ARIA-roller tillämpas) (WCAG 1.3.1)
- Diagrammet anpassas/rullas vid 200 % zoom utan förlust av innehåll eller funktionalitet (WCAG 1.4.10)
Fungerande
- Alla interaktiva diagramelement kan nås och manövreras enbart med tangentbordet (WCAG 2.1.1)
- Diagram med många punkter använder rörligt tabindex — inte hundratals sekventiella tabbstopp
- Fokusindikatorn är synlig och uppfyller kraven på storlek och kontrast i 2.4.11 (WCAG 2.4.7 / 2.4.11)
- Verktygstips/popup-fönster som kan stängas med Escape-tangenten och inte enbart aktiveras med musen (WCAG 1.4.13)
- Ingen fokusfälla inom diagramkomponenten om det inte är avsiktligt (modalt överlägg)
Förståeligt
- Diagramtiteln och axelbeteckningarna är skrivna i klarspråk – inga oförklarade förkortningar
- Fel- och statusmeddelanden har tydlig text/ikon – inte bara färg (WCAG 1.3.3)
-
Kontrollerna för filtrering och sortering har synliga etiketter med
aria-labeleller relaterade<label>
Robust
- Anpassade diagramwidgets exponerar namn, roll och värde för hjälpmedel via giltig ARIA (WCAG 4.1.2)
- Reservtabell tillhandahålls för varje icke-trivialt diagram (synligt eller via avslöjande)
-
Användning av dynamiska uppdateringar
aria-liveregioner eller fokusledning, beroende på vad som är lämpligt - HTML-validering (inga dubbla ID:n, inga ogiltiga kombinationer av ARIA-roller/egenskaper)
- Testat med NVDA + Firefox och VoiceOver + Safari före lansering
”Tillgänglighet är inte en funktion som man lägger till i slutet av ett projekt – det är en kvalitet som måste byggas in redan från det första designbeslutet. När det gäller datavisualisering innebär det att frågan aldrig är ’hur gör vi det här diagrammet tillgängligt?’, utan ’vilket är det mest tillgängliga sättet att förmedla dessa data?’” — AIOPSGROUP Engineering Practice