Bericht für Korridore in Bayern

SupportOID=160800
This commit is contained in:
2026-04-22 10:39:37 +02:00
parent e3c2a6a315
commit ed671d47a2

View File

@@ -0,0 +1,51 @@
-- Wie viel Prozent der Stunden wurden bei Leistungskategorie Qualifiziert durch Assistenzkraft erbracht und andersrum
-- 3432911735 (APP4) Caritasverband GünzburgNeuUlm
-- *** Mapping (kundenspezifisch anpassen) ***
-- Leistungskategorie 'Qualifiziert' -> passende Qualifikation: Q1, Q2
-- Leistungskategorie 'Unterstützend' -> passende Qualifikation: Q3, Q4
SELECT
p.LastName AS 'Nachname',
p.Firstname AS 'Vorname',
c2s.ApprovedStartDate AS 'Bewilligt von',
c2s.ApprovedEndDate AS 'Bewilligt bis',
ROUND(SUM(CASE WHEN scat.Name = 'Qualifiziert' AND q12.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Qualifiziert durch Q1/Q2',
ROUND(SUM(CASE WHEN scat.Name = 'Qualifiziert' AND q34.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Qualifiziert durch Q3/Q4',
ROUND(SUM(CASE WHEN scat.Name = 'Unterstützend' AND q12.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Unterstützend durch Q1/Q2',
ROUND(SUM(CASE WHEN scat.Name = 'Unterstützend' AND q34.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Unterstützend durch Q3/Q4',
ROUND(SUM(CASE WHEN q12.EmployeeOid IS NULL AND q34.EmployeeOid IS NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END) / 60, 2) AS 'Ohne Qualifikation',
ROUND(SUM(sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount)) / 60, 2) AS 'Gesamt (Std)',
-- Unterqualifiziert: Qualifiziert durch Q3/Q4 in %
ROUND(SUM(CASE WHEN scat.Name = 'Qualifiziert' AND q34.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END)
/ NULLIF(SUM(CASE WHEN scat.Name = 'Qualifiziert' THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END), 0) * 100, 1) AS '% Unterqualifiziert',
-- Überqualifiziert: Unterstützend durch Q1/Q2 in %
ROUND(SUM(CASE WHEN scat.Name = 'Unterstützend' AND q12.EmployeeOid IS NOT NULL THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END)
/ NULLIF(SUM(CASE WHEN scat.Name = 'Unterstützend' THEN sr.Roundedduration / IF(sr.GroupEmployeeCount IS NULL, 1, sr.GroupEmployeeCount) ELSE 0 END), 0) * 100, 1) AS '% Überqualifiziert'
FROM servicerecord sr
JOIN costbearer2supportconcept c2s ON sr.CostBearer2SupportConceptOid = c2s.Oid
JOIN supportconcept sc ON c2s.SupportConceptOid = sc.Oid
JOIN customer c ON sc.CustomerOid = c.Oid
JOIN person p ON c.PersonOid = p.Oid
JOIN servicedescription sd ON sd.Oid = sr.ServiceDescriptionOid
JOIN servicecategory scat ON scat.Oid = sd.ServiceCategoryOid
-- *** Mapping (kundenspezifisch anpassen) ***
LEFT JOIN (
SELECT DISTINCT v2o.ObjectOid AS EmployeeOid
FROM valuelistentry2object v2o
JOIN valuelistentry vle ON vle.Oid = v2o.ValuelistEntryOid
WHERE v2o.ObjectTid = 2 AND v2o.IsActive = 1 AND vle.Type = 5 AND vle.IsActive = 1 AND vle.Value IN ('Q1', 'Q2') -- Qualifikationen für 'Qualifiziert'
) q12 ON q12.EmployeeOid = sr.EmployeeOid
LEFT JOIN (
SELECT DISTINCT v2o.ObjectOid AS EmployeeOid
FROM valuelistentry2object v2o
JOIN valuelistentry vle ON vle.Oid = v2o.ValuelistEntryOid
WHERE v2o.ObjectTid = 2 AND v2o.IsActive = 1 AND vle.Type = 5 AND vle.IsActive = 1 AND vle.Value IN ('Q3', 'Q4') -- Qualifikationen für 'Unterstützend'
) q34 ON q34.EmployeeOid = sr.EmployeeOid
-- *** Ende Mapping ***
WHERE scat.Billable = 1 AND c2s.ApprovedStartDate <= CURDATE() AND (c2s.ApprovedEndDate >= CURDATE() OR c2s.ApprovedEndDate IS NULL)
-- AND sr.StartDate >= ':Von' AND sr.StartDate < ':Bis'
GROUP BY p.LastName, p.Firstname, c2s.ApprovedStartDate, c2s.ApprovedEndDate
ORDER BY p.LastName;