======================= Tariff Year Transition ======================= .. contents:: :depth: 2 :local: :backlinks: none .. highlight:: java TarifMatcher does not select the applicable tariff year (and hence catalog/PCS version) for a case itself. Which tariff year applies to a given case - typically decided based on its session date - has to be determined by the integrator. Both tariff years can be loaded in parallel, so that cases from before and after a year transition can be processed in the same run. Ambulante Pauschalen -------------------- The annex B pathology exception only applies up to application year 2026 (see `PatientCase#extractPathologyServices(int)`). A pathology service that is billed separately from the flat rate in 2026 is included in the flat rate itself from 2027 on. Example code snippet loading both the 2026 and 2027 tariff components in parallel and evaluating one case per year: :: /** load both tariff years' components; keep both loaded for the transition period. */ Casemaster casemaster2026 = new Casemaster(new File("path/to/oaat-files/system_ambP_11c_cap_assignment.json")); Casemaster casemaster2027 = new Casemaster(new File("path/to/oaat-files/system_ambP_12_cap_assignment.json")); ClassificationSystemReader reader = new ClassificationSystemReader(); PatientClassificationSystem grouper2026 = reader.readFromFile(new File("path/to/oaat-files/system_ambP_11c_lkaat.json")); PatientClassificationSystem grouper2027 = reader.readFromFile(new File("path/to/oaat-files/system_ambP_12_lkaat.json")); Catalog ambPCatalog2026 = Catalog.readFromFile(new File("path/to/oaat-files/catalog_ambP_11c.csv")); Catalog ambPCatalog2027 = Catalog.readFromFile(new File("path/to/oaat-files/catalog_ambP_12.csv")); /** case with session date 31.12.2026: pathology service is billed separately. */ Session s1a = new Session(1, SharedUtils.parseDate("20261231")); s1a.setDiagnosis(new Diagnosis("C44.6")); s1a.addService(new Service("C09.KF.0130", Side.NONE, 1, SharedUtils.parseDate("20261231"), 1)); Session s1b = new Session(2, SharedUtils.parseDate("20261231")); s1b.setDiagnosis(new Diagnosis("C44.6")); s1b.addService(new Service("JM.10.0010", Side.NONE, 1, SharedUtils.parseDate("20261231"), 1)); List sessions2026 = new ArrayList<>(); sessions2026.add(s1a); sessions2026.add(s1b); Patient patient2026 = new Patient(); patient2026.setSessions(sessions2026); /** which tariff year applies is decided by the integrator, e.g. from the session date. */ CasemasterResult cr2026 = casemaster2026.apply(patient2026); PatientCase case2026 = cr2026.patientCases.get(0); GrouperResult gr2026 = grouper2026.evaluate(case2026); /** result: group = "C09.12D" */ System.out.println("2026 group: " + gr2026.group + " tax points: " + ambPCatalog2026.getTaxPoints(gr2026.group)); /** pathology exception still applies: JM.10.0010 is extracted and billed separately. */ List pathologyServices2026 = case2026.extractPathologyServices(grouper2026.getApplicationYear()); /** result: pathologyServices2026 contains JM.10.0010, billed separately from the flat rate. */ System.out.println("2026 pathology services billed separately: " + pathologyServices2026.size()); /** case with session date 01.01.2027: pathology exception no longer applies. */ Session s2a = new Session(1, SharedUtils.parseDate("20270101")); s2a.setDiagnosis(new Diagnosis("C44.6")); s2a.addService(new Service("C09.KF.0130", Side.NONE, 1, SharedUtils.parseDate("20270101"), 1)); Session s2b = new Session(2, SharedUtils.parseDate("20270101")); s2b.setDiagnosis(new Diagnosis("C44.6")); s2b.addService(new Service("JM.10.0010", Side.NONE, 1, SharedUtils.parseDate("20270101"), 1)); List sessions2027 = new ArrayList<>(); sessions2027.add(s2a); sessions2027.add(s2b); Patient patient2027 = new Patient(); patient2027.setSessions(sessions2027); CasemasterResult cr2027 = casemaster2027.apply(patient2027); PatientCase case2027 = cr2027.patientCases.get(0); GrouperResult gr2027 = grouper2027.evaluate(case2027); /** result: group = "C09.35F" */ System.out.println("2027 group: " + gr2027.group + " tax points: " + ambPCatalog2027.getTaxPoints(gr2027.group)); /** pathology exception no longer applies: JM.10.0010 remains part of the flat rate case. */ List pathologyServices2027 = case2027.extractPathologyServices(grouper2027.getApplicationYear()); /** result: pathologyServices2027 is empty, JM.10.0010 stays part of the flat rate case. */ System.out.println("2027 pathology services billed separately: " + pathologyServices2027.size()); TARDOC -------------------- From LKAAT 1.1 / TARDOC 1.5 on, some previously separate LKAAT codes for left/right side are replaced by a single side-aware code that the Mapper resolves via side_mapping to the matching TARDOC code (see CHANGELOG 1.2.0). Example code snippet mapping a service before and after this change: :: Casemaster casemaster2026 = new Casemaster(new File("path/to/oaat-files/system_ambP_11c_cap_assignment.json")); ServiceCatalog lkaatCatalog2026 = ServiceCatalog.readCatalog(new File("path/to/oaat-files/lkaat_1.0c.json")); TardocCatalog tardocCatalog2026 = TardocCatalog.readCatalog(new File("path/to/oaat-files/tardoc_1.4c_de.json")); Mapper mapper2026 = new Mapper(lkaatCatalog2026, tardocCatalog2026); /** case with session date 31.12.2026: no side_mapping yet, code is used directly. */ Session session2026 = new Session(1, SharedUtils.parseDate("20261231")); session2026.setDiagnosis(new Diagnosis("P9", DiagnosisType.TESSINER_CODE)); session2026.addService(new Service("RC.25.0030", Side.NONE, 1, SharedUtils.parseDate("20261231"), 1)); List sessions2026 = new ArrayList<>(); sessions2026.add(session2026); Patient patient2026 = new Patient(); patient2026.setSessions(sessions2026); CasemasterResult cr2026 = casemaster2026.apply(patient2026); MapperResult result2026 = mapper2026.map(cr2026.patientCases.get(0)); /** result: RC.25.0030, Anzahl 1 */ System.out.println("2026 mapped tarpos: " + result2026.addedTarpos.size()); /** case with session date 01.01.2027: RC.25.0021 used on both sides is mapped to RC.25.0030. */ Casemaster casemaster2027 = new Casemaster(new File("path/to/oaat-files/system_ambP_12_cap_assignment.json")); ServiceCatalog lkaatCatalog2027 = ServiceCatalog.readCatalog(new File("path/to/oaat-files/lkaat_1.1.json")); TardocCatalog tardocCatalog2027 = TardocCatalog.readCatalog(new File("path/to/oaat-files/tardoc_1.5_de.json")); Mapper mapper2027 = new Mapper(lkaatCatalog2027, tardocCatalog2027); Session session2027 = new Session(1, SharedUtils.parseDate("20270101")); session2027.setDiagnosis(new Diagnosis("P9", DiagnosisType.TESSINER_CODE)); session2027.addService(new Service("RC.25.0021", Side.L, 1, SharedUtils.parseDate("20270101"), 1)); session2027.addService(new Service("RC.25.0021", Side.R, 1, SharedUtils.parseDate("20270101"), 1)); List sessions2027 = new ArrayList<>(); sessions2027.add(session2027); Patient patient2027 = new Patient(); patient2027.setSessions(sessions2027); CasemasterResult cr2027 = casemaster2027.apply(patient2027); MapperResult result2027 = mapper2027.map(cr2027.patientCases.get(0)); /** result: RC.25.0030, Anzahl 1 (side_mapping combines both sides into one TARDOC position) */ System.out.println("2027 mapped tarpos: " + result2027.addedTarpos.size());