Παρατηρητήριο Υγείας Κύπρου
English

Μέθοδοι

Κάθε τιμή που υπολογίζει το Παρατηρητήριο σημειώνεται ως παράγωγη, παραπέμπει στα δεδομένα από τα οποία προκύπτει και εξηγείται εδώ.

ENΔιαθέσιμο μόνο στα αγγλικά.

Anomaly watch

Σειρές: anomaly.weekly_deaths.expected, anomaly.weekly_deaths.z

Code: obs/modules/anomaly.py. Agent: anomaly-watch. It probes daily at 12:30 and computes only when Eurostat's updated stamp on demo_r_mwk_ts moves. API: /v1/anomalies. Page: /en/anomalies.

Weekly deaths: EuroMOMO-style z-scores

Input. Eurostat demo_r_mwk_ts (deaths by week and sex, Cyprus, both sexes). demo_r_mwk_05 (by 5-year age group) is loaded for age-specific runs.

Baseline. For each target week, an ordinary least-squares fit is made on the 2/3-power of deaths:

y^(2/3) = b0 + b1·t + b2·sin(2πw/52.18) + b3·cos(2πw/52.18)
  • t is time in years and w the ISO week.
  • The fit uses the five years before the target week, ending three weeks before it.
  • Like EuroMOMO, it keeps only spring and autumn weeks (ISO weeks 15-26 and 36-45). Winter and summer excesses therefore do not raise the baseline.
  • The 2/3-power transformation stabilises the variance of Poisson-like counts.
  • At least 40 baseline weeks are required.

z-score. z = (y^(2/3) − ŷ^(2/3)) / s, where s is the residual standard deviation of the fit (degrees of freedom n − 4). Expected deaths are ŷ back-transformed: (ŷ^(2/3))^(3/2).

Thresholds.

zClassificationAction
≥ 4substantialone anomaly event with observed, expected, z and method; never twice for the same week
2 to 4elevatedflag shown, no event

Expected deaths and z are stored as derived observations: anomaly.weekly_deaths.expected and anomaly.weekly_deaths.z, with quality_flag derived and the method in notes.

Differences from EuroMOMO. This is "EuroMOMO-style", not EuroMOMO. EuroMOMO uses an overdispersed Poisson GLM with similar baseline exclusions and publishes pooled European estimates. Here the model is a transparent least-squares fit on the 2/3-power scale. The results are indicative and should be checked against EuroMOMO where available.

Acceptance test. tests/test_screening_anomaly.py::test_weekly_z_flags_exactly_one_excess_week uses eight years of synthetic weekly deaths, in the test database only, with seasonality and noise and one week at 1.8 times baseline. The test expects exactly one event, for that week, and none on a re-run.

Monthly deaths by cause

Input: Eurostat hlth_cd_mro (both sexes, all ages, residents) for each ICD-10 group. Each month is compared with the same month in the previous five years (at least three needed): z = (observed − mean) / SD. A group-month with z ≥ 3 and at least 10 deaths is an elevated flag with no event, because small numbers make single causes noisy.

Hospital discharges against trend

Inputs are CYSTAT-DB 2100012E (in-patient discharges from GHS-contracted hospitals, total) and Eurostat hlth_co_inpagg (curative-care discharges). The latest year is compared with a linear trend fitted on the earlier years: residual / residual SD. With fewer than four years no trend is computed; this applies to the CYSTAT series, which begins in 2021.

Notifiable diseases: gap

The Epidemiological Surveillance Unit's bulletin is published on moh.gov.cy, whose robots.txt disallows all user agents. The comparison of notifiable-disease counts with the same weeks of prior years is therefore not made, and a gap line records why. The ECDC Surveillance Atlas has no documented public API (gap line in registry/gaps/stats.yaml).

Screening eligible populations and the uptake model

Σειρές: screening.eligible.breast, screening.eligible.colorectal

Code: obs/modules/screening.py. API: /v1/screening/programmes, /model, /templates, /dashboard, /programme-data. Page: /en/screening.

Programme rules and their sources

The Ministry of Health's programme pages cannot be read: moh.gov.cy's robots.txt disallows all agents. Each rule therefore states where it comes from and how reliable that source is (entity attributes rule_sources and rule_quality).

ProgrammeStatusAges, sexSource of the rule
Colorectalrunning50-74, both sexes; FIT kit by post, colonoscopy after a positive resultEuropean Observatory Health Systems and Policy Monitor, Cyprus 2025: "open to all beneficiaries of the general healthcare system (GeSY) who are between the ages of 50 and 74". Also Cyprus Mail, 20 May 2025, quoting the Ministry. The HIO announcement of 15 May 2026 confirms quarterly invitations of age groups for a stool test.
Breastrunningwomen 45-74; mammography free on invitationPress reports of Ministry statements (Cyprus Mail, 12 Oct 2024 and 25 Sep 2025): expanded from 50-69 to 45-74. Primary not reachable.
Cervicalplannednot announcednone. No eligible population is computed until the rules are announced.
Prostateplannednot announcednone

Screening intervals are not stated in the sources held, so they are left blank rather than assumed.

Eligible population (derived)

Census 2021 residents (CYSTAT-DB table 1891129E, single years of age) are summed over each programme's age range, by sex and district, and by 5-year band. A partial sum is never shown as a total. The results are stored as screening.eligible.<programme> with quality_flag derived and the method in notes.

The colorectal programme invites GeSY beneficiaries, so Census residents of the same ages are an upper bound. The figures refer to the census date (1 October 2021).

Published uptake

TypeSeries
Programme dataEurostat hlth_ps_prev: breast (C50), women screened in the programme; Cyprus reports no cervical or colorectal programme data.
Survey (EHIS)hlth_ehis_pa7e: mammography within 2 years, women 50-69
Survey (EHIS)hlth_ehis_pa5e: colorectal test within 2 years, 50-74
Survey (EHIS)hlth_ehis_pa8e: cervical smear within 3 years, women 20-69

The CYSTAT EHIS 2019 and 2014 reports are held as documents. The OECD Country Cancer Profile is followed by the international watchers.

The uptake model

projected uptake   = min(0.95, base uptake × Π RR(lever) × (1 + share reached in own language × (RR_language − 1)))
projected screened = eligible × projected uptake
  • Base uptake: the latest published programme uptake for Cyprus, or the latest survey uptake when no programme data exist. Either can be overridden.
  • Levers. Relative risks (95% CI) are taken from the abstract of Camilloni L, et al. Methods to increase participation in organised screening programs: a systematic review. BMC Public Health 2013;13:464 (PMID 23663511), retrieved through the Europe PMC API:
LeverBreastCervicalColorectal
Postal reminder1.37 (1.25-1.51)1.71 (1.60-1.83)1.33 (1.17-1.51)
GP's signature on the invitation1.13 (1.11-1.16)1.20 (1.10-1.30)1.15 (1.07-1.24)
Scheduled appointment instead of open invitation1.26 (1.02-1.55)1.49 (1.27-1.75)1.79 (1.65-1.93)
Self-sampling kit mailed to non-respondersn/a2.37 (1.44-3.90)n/a

The review found telephone reminders effective but gives no pooled estimate. There is also no pooled estimate in the source held for SMS channels or language-concordant invitations. Those levers default to no effect (RR 1.0) and must be set from programme data, for example a trial within the programme. The model never invents an effect size.

  • Limits. Levers are multiplied as if independent. The RRs come from trials elsewhere and may not transfer to Cyprus. Uptake is capped at 95%. The output is labelled model output (derived) and is never stored as an observation.

Templates

Invitation, reminder and no-show templates are provided in Greek, English and Russian. Placeholders ({name}, {age_range}, {test_instructions}, {phone}...) are left for the programme owner to fill. Each template is headed "TEMPLATE for the programme owner - not sent by the Cyprus Health Observatory". The templates state no rule that is not in the programme's own material.

Dashboard for the programme owner

The KPIs are: invited, screened, uptake, positives, follow-up completed, and median days to follow-up. Each shows "awaiting programme data" until the programme owner posts counts to POST /v1/screening/programme-data. That call needs an API key and a source_url. The counts are stored as official figures of that owner, under source moh_screening_programme.

The nurse workforce estimate and the definitional gaps

Σειρές: workforce.estimate.nurses_practising, workforce.estimate.nurses_non_practising

Code: obs/modules/workforce.py. Agent: workforce-reconcile (weekly). API: /v1/workforce/counts, /estimate, /gap, /gaps, /projection. Page: /en/workforce.

1. The reconciliation table

Every published count is a row with its definition, sector, year, unit and source (COUNT_SPECS). Nothing is adjusted. Each count is shown as its producer publishes it.

StatusWhat is countedMain producers
practisingpeople providing services directly to patients (headcount, 31 December)Eurostat hlth_rs_prs2 / hlth_rs_prsns (joint OECD/Eurostat/WHO questionnaire)
professionally activepractising plus those whose post requires the qualification (management, teaching, research)Eurostat hlth_rs_prs2
licensedlicensed to practise, as Cyprus reports it to the joint questionnaireEurostat hlth_rs_prs2
employedfilled posts by employer sector (public, private)CYSTAT-DB 2140011E, 2140013E, 2110015E
employed ratenurses and midwives per 10,000 populationWHO GHO HWF_0006
registeredeveryone on the Nursing and Midwifery Council's register, wherever they workofficial statements (change log); not otherwise published
not renewinglicence holders who did not renew in a period (a flow)official statements and testimony (988 under-40s, 19 Oct 2026, as reported)
students / graduatesthe training pipelinestatements (enrolments 98 in 2024 and 238 in 2025); Eurostat hlth_rs_grd2

A row without a published value is shown as a gap. It is not filled.

2. Why the figures differ

explain_gap(a, b) names every factor that separates two counts. These factors come from the definitions above, not from a model.

  • Status. A licence or registration includes people who are abroad, retired early, on a career break or working in another field. Practising counts only those treating patients in Cyprus. The difference is the non-practising pool the Minister asked about.
  • Professionally active vs practising adds managers, teachers and researchers.
  • Employment counts posts, not people. A person with two jobs may be counted twice, and agency or self-employed staff may be missed.
  • Sector scope. A public-sector count (CYSTAT, OKYpY statements) is part of the all-sector total. It is never an alternative to it.
  • Profession scope. Some counts include midwives or health visitors (WHO's nursing-and-midwifery density; CYSTAT public-sector nursing personnel). Others exclude them (Eurostat NRS).
  • Unit. A density per 10,000 cannot be compared with a headcount until it is converted with the same year's population.
  • Date. Each count refers to its own reference date.
  • What Cyprus reports. In every year 2018-2024 Cyprus reports the same number for "licensed" and "professionally active". That figure therefore cannot be the register of all licence holders. The estimate checks for this and says so.

3. The estimate (derived)

For the latest year with a Eurostat practising headcount:

  • Practising nurses. The central value is the Eurostat practising headcount (NRS, PRACT, NR). The band runs from the lowest to the highest practising-equivalent all-sector count for the same year: the Eurostat practising count and CYSTAT's nursing officers employed in both sectors.
  • Non-practising nurses. This is licence or register holders minus practising nurses. The lower bound uses the joint-questionnaire licensed count, and the upper bound uses the largest stated register count. It is never below a stated count of nurses not renewing; that count covers only under-40s, so it is a floor. With no register figure stored, the estimate says so. Because the licensed figure equals professionally active, the implied pool is a lower bound.

The bands are written to observations as workforce.estimate.nurses_practising and workforce.estimate.nurses_non_practising. They are stored with quality_flag = derived and breakdown_json = {"band": low|central|high}, with every input listed in notes. The figure that would narrow the band most is the Council's register total. Its absence is a gap line.

4. The reasoning note

workforce-reconcile sends only the reconciliation table and the estimate to a Sonnet-class model. It asks for two paragraphs that name the definitions and years, quote numbers exactly, cite row keys and make no recommendation. The note is labelled AI-generated on the page. The ceiling is 1 EUR a week; one call costs well under a cent.

5. Projection (stock-flow)

project(params, scenario), repeated each year:

supply(t+1) = supply(t) + graduates x entry_rate + non_EU_recruits + returners - supply(t) x (attrition + retirement)
pool(t+1)   = pool(t) - returners + supply(t) x attrition x attrition_to_pool
demand(t+1) = demand(t) x (1 + GeSY activity growth)
  • Starting stock: the central practising estimate.
  • Graduates: the mean of the last three Eurostat nursing-graduate years.
  • Demand growth: the annual growth of GeSY specialist-visit beneficiaries in the change log, falling back to personal-doctor visits, then registrations. Without two periods it is a stated 2% assumption.
  • Assumptions, all stated in the response and changeable through the API: entry rate 0.8, attrition 3%/yr, retirement 2%/yr. No Cyprus age profile of nurses is published (Eurostat hlth_rs_nurse has no Cyprus values), so retirement is an assumption. Half of leavers stay licensed in Cyprus.
  • Scenarios: baseline; retention (attrition 2%, 2% of the pool returning each year); recruitment (300 non-EU recruits a year); combined.

The projection is model output, labelled as such, and is never stored as an observation.

The listening programme question bank and codebook

Code: obs/modules/listening_bank.py (BANK_VERSION 2026-10-19.1, programme nurse-leavers-2026). The flow is in obs/modules/listening.py (next_question). It is deterministic: no model takes part in the interview.

Design

The items are the Observatory's own wording, in Greek and English. The domains come from published nurse-retention and work-environment instruments, cited per item below. No licensed instrument item is reproduced verbatim, so the bank can be published and changed freely. Any change to wording or branching bumps BANK_VERSION, and each session records the version it used.

Branching is declarative (show_if on earlier answers). For example, the pay follow-ups appear only if pay was a reason, and the violence follow-up only if violence was. The same answers always give the same path.

DomainItemsInformed by
Profileregister (nurse/midwife), status today, age group, years practised, last setting, when they stoppedNEXT; Flinkman 2010; RN4CAST (settings)
Why they leftreasons (multi), the main reasonNEXT; Heinen 2013; Flinkman 2010; Hayes 2012
Payfairness for effort and responsibility; the increase that would have kept themSiegrist effort-reward imbalance (ERI); COPSOQ
Shiftshardest aspects (nights, 12-hour shifts, overtime, short notice, weekends, rest); say over hoursNEXT; COPSOQ
Staffing and workloadenough staff for good care; care left undonePES-NWI (Lake 2002); RN4CAST; MISSCARE (Kalisch 2009)
Managementbacking from the nurse manager; nurses' voice in decisionsPES-NWI
Violencefrequency of aggression; whether it was reported and acted onILO/ICN/WHO/PSI workplace-violence instrument (2003); COPSOQ
Burnoutworn out at the end of a shiftCopenhagen Burnout Inventory (Kristensen 2005); COPSOQ
Licensingwhat made renewal hard (fee, CPD hours, paperwork, not needed, registered abroad)Observatory item (the 988 under-40s not renewing)
Workplace (everyone)teamwork with doctors; could give the care they were trained to give; respected and valuedPES-NWI; RN4CAST; COPSOQ; ERI
Intentionhow often they thought of giving up the professionNEXT; Heinen 2013
Returnwould they practise in Cyprus again; what would bring them back; the top changeWHO State of the World's Nursing 2020; Flinkman 2010; Hayes 2012
Free textwhat made you leave; one change that would bring colleagues back. Both are redacted at entry.none

References

  • Hasselhorn HM, Tackenberg P, Müller BH (eds). Working conditions and intent to leave the profession among nursing staff in Europe. SALTSA Report 2003:7 (NEXT - Nurses' Early Exit Study).
  • Sermeus W, Aiken LH, Van den Heede K, et al. Nurse forecasting in Europe (RN4CAST): rationale, design and methodology. BMC Nursing 2011;10:6.
  • Heinen MM, van Achterberg T, Schwendimann R, et al. Nurses' intention to leave their profession: a cross sectional observational study in 10 European countries. Int J Nurs Stud 2013;50(2):174-184.
  • Lake ET. Development of the Practice Environment Scale of the Nursing Work Index. Research in Nursing & Health 2002;25(3):176-188.
  • Kristensen TS, Hannerz H, Høgh A, Borg V. The Copenhagen Psychosocial Questionnaire. Scand J Work Environ Health 2005;31(6):438-449; Burr H, et al. The third version of the COPSOQ. Saf Health Work 2019;10(4):482-503.
  • Kristensen TS, Borritz M, Villadsen E, Christensen KB. The Copenhagen Burnout Inventory. Work & Stress 2005;19(3):192-207.
  • Siegrist J. Adverse health effects of high-effort/low-reward conditions. J Occup Health Psychol 1996;1(1):27-41.
  • Kalisch BJ, Williams RA. Development and psychometric testing of a tool to measure missed nursing care. J Nurs Adm 2009;39(5):211-219.
  • ILO/ICN/WHO/PSI Joint Programme on Workplace Violence in the Health Sector. Survey questionnaire. Geneva, 2003.
  • Flinkman M, Leino-Kilpi H, Salanterä S. Nurses' intention to leave the profession: integrative review. J Adv Nurs 2010;66(7):1422-1434.
  • Hayes LJ, O'Brien-Pallas L, Duffield C, et al. Nurse turnover: a literature review - an update. Int J Nurs Stud 2012;49(7):887-905.
  • World Health Organization. State of the world's nursing 2020. Geneva: WHO, 2020.

Codebook

There are 27 codes (CODEBOOK) in three themes:

  • why they left: PAY, SHIFTS, STAFFING, WORKLOAD, MANAGEMENT, RECOGNITION, CAREER, VIOLENCE, BURNOUT, FAMILY, ABROAD, LICENSING, COVID, OTHER_JOB;
  • workplace: TEAMWORK, QUALITY;
  • conditions for return: RET_PAY, RET_FLEX, RET_RATIOS, RET_REFRESHER, RET_CHILDCARE, RET_SETTING, RET_LICENCE, RET_LEADERSHIP, RET_SAFETY, RET_CAREER, RET_NEVER.

Structured answers map to codes deterministically through from, for example q_reasons:pay → PAY. The weekly synthesis codes free text against the same codes. Without a model budget, it uses each code's keyword list instead.