fix(sync): fix Untersuchungen column parsing, sync exams to atemschutz profile, handle legacy shifted data
This commit is contained in:
@@ -332,14 +332,21 @@ export async function syncAT20ToAtemschutz(pool: Pool): Promise<void> {
|
|||||||
*/
|
*/
|
||||||
export async function syncUntersuchungenToAtemschutz(pool: Pool): Promise<void> {
|
export async function syncUntersuchungenToAtemschutz(pool: Pool): Promise<void> {
|
||||||
// --- Leistungstest (Finnentest) ---
|
// --- Leistungstest (Finnentest) ---
|
||||||
|
// Match both correct data (art='Atemschutz Leistungstest') and old bugged data
|
||||||
|
// where the scraper shifted columns (art='Finnen Test bestanden', anmerkungen='Atemschutz Leistungstest')
|
||||||
const ltResult = await pool.query(
|
const ltResult = await pool.query(
|
||||||
`INSERT INTO atemschutz_traeger (id, user_id, leistungstest_datum, leistungstest_gueltig_bis, leistungstest_bestanden)
|
`INSERT INTO atemschutz_traeger (id, user_id, leistungstest_datum, leistungstest_gueltig_bis, leistungstest_bestanden)
|
||||||
SELECT uuid_generate_v4(), u.user_id, u.max_datum, u.max_datum + INTERVAL '1 year', true
|
SELECT uuid_generate_v4(), u.user_id, u.max_datum, make_date(EXTRACT(YEAR FROM u.max_datum)::int + 1, 12, 31), true
|
||||||
FROM (
|
FROM (
|
||||||
SELECT user_id, MAX(datum) AS max_datum
|
SELECT user_id, MAX(datum) AS max_datum
|
||||||
FROM untersuchungen
|
FROM untersuchungen
|
||||||
WHERE TRIM(art) = 'Atemschutz Leistungstest'
|
WHERE (
|
||||||
AND TRIM(ergebnis) ILIKE '%bestanden%'
|
-- correct data (after scraper fix)
|
||||||
|
(TRIM(art) = 'Atemschutz Leistungstest' AND TRIM(ergebnis) ILIKE '%bestanden%')
|
||||||
|
OR
|
||||||
|
-- old bugged data (columns shifted: art has ergebnis, anmerkungen has art)
|
||||||
|
(TRIM(anmerkungen) = 'Atemschutz Leistungstest' AND TRIM(art) ILIKE '%bestanden%')
|
||||||
|
)
|
||||||
GROUP BY user_id
|
GROUP BY user_id
|
||||||
) u
|
) u
|
||||||
ON CONFLICT (user_id) DO UPDATE
|
ON CONFLICT (user_id) DO UPDATE
|
||||||
@@ -352,19 +359,27 @@ export async function syncUntersuchungenToAtemschutz(pool: Pool): Promise<void>
|
|||||||
|
|
||||||
// --- Atemschutztauglichkeit (G26 medical exam) ---
|
// --- Atemschutztauglichkeit (G26 medical exam) ---
|
||||||
// Map FDISK ergebnis text to the DB enum (tauglich / bedingt_tauglich / nicht_tauglich)
|
// Map FDISK ergebnis text to the DB enum (tauglich / bedingt_tauglich / nicht_tauglich)
|
||||||
|
// Also handle old bugged data where art/ergebnis columns were shifted
|
||||||
const atResult = await pool.query(
|
const atResult = await pool.query(
|
||||||
`INSERT INTO atemschutz_traeger (id, user_id, untersuchung_datum, untersuchung_ergebnis)
|
`INSERT INTO atemschutz_traeger (id, user_id, untersuchung_datum, untersuchung_ergebnis)
|
||||||
SELECT uuid_generate_v4(), sub.user_id, sub.datum,
|
SELECT uuid_generate_v4(), sub.user_id, sub.datum,
|
||||||
CASE
|
CASE
|
||||||
WHEN sub.ergebnis ILIKE '%nicht%tauglich%' THEN 'nicht_tauglich'
|
WHEN sub.ergebnis_text ILIKE '%nicht%tauglich%' THEN 'nicht_tauglich'
|
||||||
WHEN sub.ergebnis ILIKE '%bedingt%tauglich%' THEN 'bedingt_tauglich'
|
WHEN sub.ergebnis_text ILIKE '%bedingt%tauglich%' THEN 'bedingt_tauglich'
|
||||||
WHEN sub.ergebnis ILIKE '%tauglich%' THEN 'tauglich'
|
WHEN sub.ergebnis_text ILIKE '%tauglich%' THEN 'tauglich'
|
||||||
ELSE NULL
|
ELSE NULL
|
||||||
END
|
END
|
||||||
FROM (
|
FROM (
|
||||||
SELECT DISTINCT ON (user_id) user_id, datum, ergebnis
|
SELECT DISTINCT ON (user_id) user_id, datum,
|
||||||
|
CASE
|
||||||
|
-- correct data: ergebnis has the result text
|
||||||
|
WHEN TRIM(art) = 'Atemschutztauglichkeit' THEN ergebnis
|
||||||
|
-- bugged data: art has the result, anmerkungen has the real art
|
||||||
|
WHEN TRIM(anmerkungen) = 'Atemschutztauglichkeit' THEN art
|
||||||
|
ELSE ergebnis
|
||||||
|
END AS ergebnis_text
|
||||||
FROM untersuchungen
|
FROM untersuchungen
|
||||||
WHERE TRIM(art) = 'Atemschutztauglichkeit'
|
WHERE (TRIM(art) = 'Atemschutztauglichkeit' OR TRIM(anmerkungen) = 'Atemschutztauglichkeit')
|
||||||
AND datum IS NOT NULL
|
AND datum IS NOT NULL
|
||||||
ORDER BY user_id, datum DESC
|
ORDER BY user_id, datum DESC
|
||||||
) sub
|
) sub
|
||||||
|
|||||||
Reference in New Issue
Block a user