From a6952eaf78bbdb168d678c6d3cf7afd9e612991c Mon Sep 17 00:00:00 2001 From: karen-hedges <133129444+karen-hedges@users.noreply.github.com> Date: Mon, 27 Apr 2026 06:48:37 +0100 Subject: [PATCH 1/4] DMP-5245 The performance of the screen presenting Transcription data is too slow, resulting in timeouts. Made changes to the query to use left join instead of complex where clause to transcription document --- .../TranscriptionDocumentRepository.java | 4 +-- .../impl/YourTranscriptsQueryImpl.java | 30 ++----------------- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java b/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java index ef60dc19cfe..d16eb8a6ff3 100644 --- a/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java +++ b/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java @@ -15,7 +15,6 @@ public interface TranscriptionDocumentRepository extends JpaRepository, SoftDeleteRepository { - @Query(""" SELECT distinct new uk.gov.hmcts.darts.transcriptions.model.TranscriptionDocumentResult(tmd.id, t.id, courtCase.id, @@ -52,7 +51,8 @@ public interface TranscriptionDocumentRepository extends JpaRepository findTranscriptionMedia(String caseNumber, String courtHouseDisplayName, LocalDate hearingDate, diff --git a/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java b/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java index 3e1456433d9..d9ea3554414 100644 --- a/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java @@ -59,24 +59,11 @@ public List getRequesterTranscriptions(Integer userId, B JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id + LEFT JOIN transcription_document trd on tra.tra_id=tra_id and trd.is_hidden =false WHERE trw.workflow_actor = :usr_id AND trw.trs_id = 1 AND tra.trs_id <> 7 AND (:include_hidden_from_requester OR tra.hide_request_from_requestor = false) - AND ( - EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id - AND trd.is_hidden = false - ) - OR - NOT EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id - ) - ) AND tra.is_current = true UNION -- Migrated "requester_transcriptions" @@ -101,6 +88,7 @@ NOT EXISTS ( JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id + LEFT JOIN transcription_document trd on tra.tra_id=tra_id and trd.is_hidden =false WHERE trw.workflow_actor = :usr_id AND trw.trs_id = 1 AND tra.trs_id <> 7 @@ -110,20 +98,6 @@ AND NOT EXISTS ( WHERE tra.tra_id = hear_tran.tra_id ) AND (:include_hidden_from_requester OR tra.hide_request_from_requestor = false) - AND ( - EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id - AND trd.is_hidden = false - ) - OR - NOT EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id - ) - ) AND tra.is_current = true ORDER BY requested_ts DESC LIMIT :max_result_size From 3ab709b5b01d428a740e9574636b87179b89f86b Mon Sep 17 00:00:00 2001 From: karen-hedges <133129444+karen-hedges@users.noreply.github.com> Date: Tue, 28 Apr 2026 07:36:42 +0100 Subject: [PATCH 2/4] DMP-5245 The performance of the screen presenting Transcription data is too slow, resulting in timeouts. Made changes to the query to use left join instead of complex where clause to transcription document --- .../darts/common/repository/TranscriptionDocumentRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java b/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java index d16eb8a6ff3..b79a3f32c71 100644 --- a/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java +++ b/src/main/java/uk/gov/hmcts/darts/common/repository/TranscriptionDocumentRepository.java @@ -52,7 +52,6 @@ public interface TranscriptionDocumentRepository extends JpaRepository findTranscriptionMedia(String caseNumber, String courtHouseDisplayName, LocalDate hearingDate, From 24880b748183a677f74971729c33063d56b2a14b Mon Sep 17 00:00:00 2001 From: karen-hedges <133129444+karen-hedges@users.noreply.github.com> Date: Tue, 28 Apr 2026 15:34:18 +0100 Subject: [PATCH 3/4] DMP-5245 The performance of the screen presenting Transcription data is too slow, resulting in timeouts. Made changes to the query to use left join instead of complex where clause to transcription document --- .../component/impl/YourTranscriptsQueryImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java b/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java index d9ea3554414..75ae70360fd 100644 --- a/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java @@ -59,7 +59,7 @@ public List getRequesterTranscriptions(Integer userId, B JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id - LEFT JOIN transcription_document trd on tra.tra_id=tra_id and trd.is_hidden =false + LEFT JOIN darts.transcription_document trd on trd.tra_id = tra.tra_id and trd.is_hidden = false WHERE trw.workflow_actor = :usr_id AND trw.trs_id = 1 AND tra.trs_id <> 7 @@ -88,7 +88,7 @@ public List getRequesterTranscriptions(Integer userId, B JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id - LEFT JOIN transcription_document trd on tra.tra_id=tra_id and trd.is_hidden =false + LEFT JOIN darts.transcription_document trd on trd.tra_id = tra.tra_id and trd.is_hidden = false WHERE trw.workflow_actor = :usr_id AND trw.trs_id = 1 AND tra.trs_id <> 7 From b3b85490576b806cea707b9061b031ff5673242a Mon Sep 17 00:00:00 2001 From: karen-hedges <133129444+karen-hedges@users.noreply.github.com> Date: Wed, 29 Apr 2026 09:15:30 +0100 Subject: [PATCH 4/4] DMP-5245 The performance of the screen presenting Transcription data is too slow, resulting in timeouts. Made changes to the query to use left join instead of complex where clause to transcription document --- .../impl/YourTranscriptsQueryImpl.java | 379 ++++++++++-------- 1 file changed, 215 insertions(+), 164 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java b/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java index 75ae70360fd..36d4e2e42db 100644 --- a/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/transcriptions/component/impl/YourTranscriptsQueryImpl.java @@ -35,70 +35,110 @@ public class YourTranscriptsQueryImpl implements YourTranscriptsQuery { public List getRequesterTranscriptions(Integer userId, Boolean includeHiddenFromRequester) { return jdbcTemplate.query( """ - -- "requester_transcriptions" - SELECT - tra.tra_id as transcription_id, - cas.cas_id as case_id, - cas.case_number, - cth.display_name courthouse_name, - hea.hearing_date, - trt.description as transcription_type, - trs.display_name as status, - tru.description as transcription_urgency_description, - tru.tru_id as transcription_urgency_id, - tru.priority_order as transcription_urgency_priority_order, - (SELECT MIN(workflow_ts) FROM darts.transcription_workflow w WHERE w.tra_id = tra.tra_id AND w.trs_id = 1) as requested_ts, - (SELECT MIN(workflow_ts) FROM darts.transcription_workflow w WHERE w.tra_id = tra.tra_id AND w.trs_id = 3) as approved_ts - FROM darts.transcription_workflow trw - JOIN darts.transcription tra ON trw.tra_id = tra.tra_id - JOIN darts.hearing_transcription_ae hearing_transcription ON tra.tra_id = hearing_transcription.tra_id - JOIN darts.hearing hea ON hearing_transcription.hea_id = hea.hea_id - JOIN darts.court_case cas ON hea.cas_id = cas.cas_id - - JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id - JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id - JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id - LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id - LEFT JOIN darts.transcription_document trd on trd.tra_id = tra.tra_id and trd.is_hidden = false - WHERE trw.workflow_actor = :usr_id - AND trw.trs_id = 1 - AND tra.trs_id <> 7 - AND (:include_hidden_from_requester OR tra.hide_request_from_requestor = false) - AND tra.is_current = true - UNION - -- Migrated "requester_transcriptions" - SELECT - tra.tra_id as transcription_id, - cas.cas_id as case_id, - cas.case_number, - cth.display_name courthouse_name, - tra.hearing_date, - trt.description as transcription_type, - trs.display_name as status, - tru.description as transcription_urgency_description, - tru.tru_id as transcription_urgency_id, - tru.priority_order as transcription_urgency_priority_order, - (SELECT MIN(workflow_ts) FROM darts.transcription_workflow w WHERE w.tra_id = tra.tra_id AND w.trs_id = 1) as requested_ts, - (SELECT MIN(workflow_ts) FROM darts.transcription_workflow w WHERE w.tra_id = tra.tra_id AND w.trs_id = 3) as approved_ts - FROM darts.transcription_workflow trw - JOIN darts.transcription tra ON trw.tra_id = tra.tra_id - JOIN darts.case_transcription_ae case_transcription ON tra.tra_id = case_transcription.tra_id - JOIN darts.court_case cas ON case_transcription.cas_id = cas.cas_id - JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id - JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id - JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id - LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id - LEFT JOIN darts.transcription_document trd on trd.tra_id = tra.tra_id and trd.is_hidden = false - WHERE trw.workflow_actor = :usr_id - AND trw.trs_id = 1 - AND tra.trs_id <> 7 - AND NOT EXISTS ( - SELECT 1 - FROM darts.hearing_transcription_ae hear_tran - WHERE tra.tra_id = hear_tran.tra_id + WITH requester_workflow AS ( + SELECT DISTINCT w.tra_id + FROM darts.transcription_workflow w + WHERE w.workflow_actor = :usr_id + AND w.trs_id = 1 + ), + workflow_ts AS ( + SELECT + w.tra_id, + MIN(CASE WHEN w.trs_id = 1 THEN w.workflow_ts END) AS requested_ts, + MIN(CASE WHEN w.trs_id = 3 THEN w.workflow_ts END) AS approved_ts + FROM darts.transcription_workflow w + GROUP BY w.tra_id ) - AND (:include_hidden_from_requester OR tra.hide_request_from_requestor = false) - AND tra.is_current = true + SELECT * + FROM ( + -- "requester_transcriptions" + SELECT + tra.tra_id as transcription_id, + cas.cas_id as case_id, + cas.case_number, + cth.display_name courthouse_name, + hea.hearing_date, + trt.description as transcription_type, + trs.display_name as status, + tru.description as transcription_urgency_description, + tru.tru_id as transcription_urgency_id, + tru.priority_order as transcription_urgency_priority_order, + wf.requested_ts, + wf.approved_ts + FROM requester_workflow rw + JOIN darts.transcription tra ON rw.tra_id = tra.tra_id + JOIN workflow_ts wf ON tra.tra_id = wf.tra_id + JOIN darts.hearing_transcription_ae hearing_transcription ON tra.tra_id = hearing_transcription.tra_id + JOIN darts.hearing hea ON hearing_transcription.hea_id = hea.hea_id + JOIN darts.court_case cas ON hea.cas_id = cas.cas_id + JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id + JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id + JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id + LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id + WHERE tra.trs_id <> 7 + AND (COALESCE(:include_hidden_from_requester, false) = true OR tra.hide_request_from_requestor = false) + AND ( + EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + AND trd.is_hidden = false + ) + OR + NOT EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + ) + ) + AND tra.is_current = true + UNION ALL + -- Migrated "requester_transcriptions" + SELECT + tra.tra_id as transcription_id, + cas.cas_id as case_id, + cas.case_number, + cth.display_name courthouse_name, + tra.hearing_date, + trt.description as transcription_type, + trs.display_name as status, + tru.description as transcription_urgency_description, + tru.tru_id as transcription_urgency_id, + tru.priority_order as transcription_urgency_priority_order, + wf.requested_ts, + wf.approved_ts + FROM requester_workflow rw + JOIN darts.transcription tra ON rw.tra_id = tra.tra_id + JOIN workflow_ts wf ON tra.tra_id = wf.tra_id + JOIN darts.case_transcription_ae case_transcription ON tra.tra_id = case_transcription.tra_id + JOIN darts.court_case cas ON case_transcription.cas_id = cas.cas_id + JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id + JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id + JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id + LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id + WHERE tra.trs_id <> 7 + AND NOT EXISTS ( + SELECT 1 + FROM darts.hearing_transcription_ae hear_tran + WHERE tra.tra_id = hear_tran.tra_id + ) + AND (COALESCE(:include_hidden_from_requester, false) = true OR tra.hide_request_from_requestor = false) + AND ( + EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + AND trd.is_hidden = false + ) + OR + NOT EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + ) + ) + AND tra.is_current = true + ) requester_transcriptions ORDER BY requested_ts DESC LIMIT :max_result_size """, @@ -114,112 +154,123 @@ AND NOT EXISTS ( public List getApproverTranscriptions(Integer userId) { return jdbcTemplate.query( """ - -- approver_transcriptions - SELECT - tra.tra_id as transcription_id, - cas.cas_id as case_id, - cas.case_number, - cth.display_name courthouse_name, - hea.hearing_date, - trt.description as transcription_type, - trs.display_name as status, - tru.description as transcription_urgency_description, - tru.tru_id as transcription_urgency_id, - tru.priority_order as transcription_urgency_priority_order, - (SELECT MIN(workflow_ts) FROM darts.transcription_workflow w WHERE w.tra_id = tra.tra_id AND w.trs_id = 1) as requested_ts - FROM darts.transcription tra - JOIN darts.hearing_transcription_ae hearing_transcription ON tra.tra_id = hearing_transcription.tra_id - JOIN darts.hearing hea ON hearing_transcription.hea_id = hea.hea_id - JOIN darts.court_case cas ON hea.cas_id = cas.cas_id - - JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id AND cth.cth_id IN ( - SELECT DISTINCT(grc.cth_id) - FROM darts.user_account usr - JOIN darts.security_group_user_account_ae gua ON usr.usr_id = gua.usr_id - JOIN darts.security_group grp ON gua.grp_id = grp.grp_id - JOIN darts.security_group_courthouse_ae grc ON grp.grp_id = grc.grp_id - WHERE usr.usr_id = :usr_id - AND grp.rol_id = :rol_id - AND usr.is_active = true + WITH approver_workflow AS ( + SELECT DISTINCT w.tra_id + FROM darts.transcription_workflow w + WHERE w.trs_id = 1 + AND w.workflow_actor <> :usr_id + ), + workflow_ts AS ( + SELECT + w.tra_id, + MIN(CASE WHEN w.trs_id = 1 THEN w.workflow_ts END) AS requested_ts + FROM darts.transcription_workflow w + GROUP BY w.tra_id ) - JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id - JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id - LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id - JOIN darts.transcription_workflow trw ON tra.tra_id = trw.tra_id - AND trw.trs_id = 1 - WHERE tra.trs_id = :trs_id - AND trw.workflow_actor <> :usr_id - AND ( - EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id - AND trd.is_hidden = false + SELECT * + FROM ( + -- approver_transcriptions + SELECT + tra.tra_id as transcription_id, + cas.cas_id as case_id, + cas.case_number, + cth.display_name courthouse_name, + hea.hearing_date, + trt.description as transcription_type, + trs.display_name as status, + tru.description as transcription_urgency_description, + tru.tru_id as transcription_urgency_id, + tru.priority_order as transcription_urgency_priority_order, + wf.requested_ts + FROM approver_workflow aw + JOIN darts.transcription tra ON aw.tra_id = tra.tra_id + JOIN workflow_ts wf ON tra.tra_id = wf.tra_id + JOIN darts.hearing_transcription_ae hearing_transcription ON tra.tra_id = hearing_transcription.tra_id + JOIN darts.hearing hea ON hearing_transcription.hea_id = hea.hea_id + JOIN darts.court_case cas ON hea.cas_id = cas.cas_id + JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id AND cth.cth_id IN ( + SELECT DISTINCT(grc.cth_id) + FROM darts.user_account usr + JOIN darts.security_group_user_account_ae gua ON usr.usr_id = gua.usr_id + JOIN darts.security_group grp ON gua.grp_id = grp.grp_id + JOIN darts.security_group_courthouse_ae grc ON grp.grp_id = grc.grp_id + WHERE usr.usr_id = :usr_id + AND grp.rol_id = :rol_id + AND usr.is_active = true ) - OR - NOT EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id + JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id + JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id + LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id + WHERE tra.trs_id = :trs_id + AND ( + EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + AND trd.is_hidden = false + ) + OR + NOT EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + ) ) - ) - AND tra.is_current = true - - UNION - - -- Migrated approver_transcriptions - SELECT - tra.tra_id as transcription_id, - cas.cas_id as case_id, - cas.case_number, - cth.display_name courthouse_name, - hearing_date, - trt.description as transcription_type, - trs.display_name as status, - tru.description as transcription_urgency_description, - tru.tru_id as transcription_urgency_id, - tru.priority_order as transcription_urgency_priority_order, - (SELECT MIN(workflow_ts) FROM darts.transcription_workflow w WHERE w.tra_id = tra.tra_id AND w.trs_id = 1) as requested_ts - FROM darts.transcription tra - JOIN darts.case_transcription_ae case_transcription ON tra.tra_id = case_transcription.tra_id - JOIN darts.court_case cas ON case_transcription.cas_id = cas.cas_id - JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id AND cth.cth_id IN ( - SELECT DISTINCT(grc.cth_id) - FROM darts.user_account usr - JOIN darts.security_group_user_account_ae gua ON usr.usr_id = gua.usr_id - JOIN darts.security_group grp ON gua.grp_id = grp.grp_id - JOIN darts.security_group_courthouse_ae grc ON grp.grp_id = grc.grp_id - WHERE usr.usr_id = :usr_id - AND usr.is_active = true - AND grp.rol_id = :rol_id - ) - JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id - JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id - LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id - JOIN darts.transcription_workflow trw ON tra.tra_id = trw.tra_id - AND trw.trs_id = 1 - WHERE tra.trs_id = :trs_id - AND trw.workflow_actor <> :usr_id - AND NOT EXISTS ( - SELECT 1 - FROM darts.hearing_transcription_ae hear_tran - WHERE tra.tra_id = hear_tran.tra_id - ) - AND ( - EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id - AND trd.is_hidden = false + AND tra.is_current = true + UNION ALL + -- Migrated approver_transcriptions + SELECT + tra.tra_id as transcription_id, + cas.cas_id as case_id, + cas.case_number, + cth.display_name courthouse_name, + hearing_date, + trt.description as transcription_type, + trs.display_name as status, + tru.description as transcription_urgency_description, + tru.tru_id as transcription_urgency_id, + tru.priority_order as transcription_urgency_priority_order, + wf.requested_ts + FROM approver_workflow aw + JOIN darts.transcription tra ON aw.tra_id = tra.tra_id + JOIN workflow_ts wf ON tra.tra_id = wf.tra_id + JOIN darts.case_transcription_ae case_transcription ON tra.tra_id = case_transcription.tra_id + JOIN darts.court_case cas ON case_transcription.cas_id = cas.cas_id + JOIN darts.courthouse cth ON cas.cth_id = cth.cth_id AND cth.cth_id IN ( + SELECT DISTINCT(grc.cth_id) + FROM darts.user_account usr + JOIN darts.security_group_user_account_ae gua ON usr.usr_id = gua.usr_id + JOIN darts.security_group grp ON gua.grp_id = grp.grp_id + JOIN darts.security_group_courthouse_ae grc ON grp.grp_id = grc.grp_id + WHERE usr.usr_id = :usr_id + AND usr.is_active = true + AND grp.rol_id = :rol_id ) - OR - NOT EXISTS ( - SELECT 1 - FROM darts.transcription_document trd - WHERE trd.tra_id = tra.tra_id + JOIN darts.transcription_type trt ON tra.trt_id = trt.trt_id + JOIN darts.transcription_status trs ON tra.trs_id = trs.trs_id + LEFT JOIN darts.transcription_urgency tru ON tra.tru_id = tru.tru_id + WHERE tra.trs_id = :trs_id + AND NOT EXISTS ( + SELECT 1 + FROM darts.hearing_transcription_ae hear_tran + WHERE tra.tra_id = hear_tran.tra_id ) - ) - AND tra.is_current = true + AND ( + EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + AND trd.is_hidden = false + ) + OR + NOT EXISTS ( + SELECT 1 + FROM darts.transcription_document trd + WHERE trd.tra_id = tra.tra_id + ) + ) + AND tra.is_current = true + ) approver_transcriptions ORDER BY requested_ts DESC LIMIT :max_result_size """,