Skip to content

Repository files navigation

CLiTICAL

Chronic Limb-Threatening Ischaemia risk CALculator — a bilingual (English / 日本語) web app that predicts peri-procedural and mid-term outcomes of revascularisation for chronic limb-threatening ischaemia (CLTI).

Live app Angular License: MIT

Important

This application is intended as a decision-support aid for healthcare professionals. It does not provide a diagnosis and must not replace clinical judgement. All predictions are statistical estimates derived from the published models cited below.

Overview

The clinician enters patient data on a single form — demographics, nutritional markers, comorbidities, arterial lesion sites and Rutherford class — and the app returns four predicted outcomes plus a nutritional index. Everything is computed locally in the browser: no patient data is transmitted, stored on a server, or persisted between sessions.

Predicted outputs

Output Description
GNRI Geriatric Nutritional Risk Index, classified as no risk / low / moderate / major
2-year OS Overall survival, classified as low / medium / high risk
2-year AFS Amputation-free survival
30-day death or amputation Early peri-procedural outcome
30-day MALE Early major adverse limb events

The two-year models are Cox-type predictors (S₀^exp(Σβx)); the 30-day models are logistic. Coefficients live in src/app/models/patient-risk.ts and are transcribed directly from the source publications.

References

The prediction models are published by Miyata T. et al. from the JCLIMB registry of the Japanese Society for Vascular Surgery:

  1. Risk prediction model for early outcomes of revascularization for chronic limb-threatening ischaemia. Br J Surg. 2022 Oct 14;109(11):1123.
  2. Prediction Models for Two Year Overall Survival and Amputation Free Survival After Revascularisation for Chronic Limb Threatening Ischaemia. Eur J Vasc Endovasc Surg. 2022 Jun 7;S1078-5884(22)00340-9.

Features

  • Bilingual UI — English and Japanese, auto-detected from the browser locale and overridable in Settings (persisted in localStorage; nothing else is).
  • Installable PWA — service worker, web manifest and maskable icons; works offline once installed.
  • Local Excel batch processing — download a validated template, calculate multiple patients in the browser, review row-level errors and export the results without uploading the workbook to a server. See Batch Excel processing.
  • Prerendered (SSR) — every route is prerendered at build time for a fast first paint.
  • Accessible — WCAG AA is a project requirement, enforced by automated axe-core checks in the test suite.
  • Light / dark themes — follows the OS colour scheme, including the browser chrome tint.

Tech stack

Area Choice
Framework Angular 22 (standalone components, signals, native control flow)
UI Angular Material
Forms Signal Forms (@angular/forms/signals)
Rendering Angular SSR with full prerendering
Testing Vitest + jsdom, axe-core for accessibility
Hosting Firebase Hosting, deployed by GitHub Actions

State is held in signals: PatientDataStore owns the form data and the computed risk, and TranslationService owns the locale.

Getting started

Requires Node.js 22+.

npm ci

Start the development server at http://localhost:4200/:

npm start

Development

Run the test suite (Vitest, single run):

npm test

Build the production bundle into dist/clitical-web/:

npm run build

Scaffold a component with the Angular CLI:

ng generate component component-name

Project structure

src/app/
├── models/            # PatientData and the risk prediction models
├── batch-processing/  # Local Excel template, validation and batch calculation
├── services/          # PatientDataStore (signals), TranslationService, i18n messages
├── question-form/     # Patient data entry (Signal Forms) with select/switch rows
├── risk-view/         # Predicted risk results
├── references/        # Source publications
├── settings/          # Language, terms, version
└── navigation/        # App shell and routing chrome

Routes are lazily loaded; see app.routes.ts.

Conventions

Contributor guidance lives in .claude/CLAUDE.md. In short: standalone components, input() / output() functions, signals for state, inject() over constructor injection, native control flow, and no ngClass / ngStyle. Accessibility regressions are treated as bugs.

Deployment

Pushing to main triggers .github/workflows/deploy.yml, which runs the test suite and then deploys to Firebase Hosting at clitical.web.app. Deployment requires the FIREBASE_TOKEN repository secret.

To deploy manually:

npm run deploy

Related projects

CLiTICAL began as clti_risk, a Flutter application; this repository is the Angular web port and shares its prediction models and test cases.

License

Released under the MIT License.

Published by the Japanese Society for Vascular Surgery and the JCLIMB Committee; software by Kazuhiro Miyahara.

About

Bilingual (EN/JA) web app predicting 30-day and 2-year outcomes of revascularisation for chronic limb-threatening ischaemia (CLTI). Angular 22 PWA.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages