§
    s�’j   ã                  ól   — d dl mZ d dlZd dlmZ d dlmZ  ej        d¦  «        Z G d„ d¦  «        Z	dS )é    )ÚannotationsN)ÚAny)Ú
Connectionz(dscons.postgres.dossier_reviews.sessionsc                  ó.   — e Zd ZdZddœdd	„Zddœdd„ZdS )Ú"DossierReviewSessionMutationsMixinz>Creation and management mutations for Dossier Review sessions.N)Ú
connectionÚpayloadúdict[str, Any]r   úConnection[Any] | NoneÚreturnc               óz   ‡ ‡‡‡— dŠdŠ‰                       |ˆˆˆˆ fd„¦  «        }‰                      ||d¬¦  «        S )zNCreate a dossier review session with optional baseline snapshot and audit log.aÄ  
            INSERT INTO dossier_review_sessions (
                company_id, project_id, review_code, dossier_scope, trigger_source, initiated_by_employee_id,
                lead_reviewer_employee_id, lead_agent_code, status, review_reason, review_summary,
                assigned_departments, metadata, last_reviewed_at
            )
            SELECT
                p.company_id, p.id, %(review_code)s, %(dossier_scope)s, %(trigger_source)s, initiator.id, lead.id,
                %(lead_agent_code)s, %(status)s, %(review_reason)s, %(review_summary)s, %(assigned_departments)s::jsonb,
                %(metadata)s::jsonb, NOW()
            FROM projects p
            LEFT JOIN employees initiator ON initiator.employee_code = %(initiated_by_employee_code)s
            LEFT JOIN employees lead ON lead.employee_code = %(lead_reviewer_employee_code)s
            WHERE p.project_code = %(project_code)s
            RETURNING id::text AS review_id
        aä  
            INSERT INTO dossier_review_snapshots (
                review_session_id, project_id, snapshot_type, captured_by_employee_id, captured_by_agent_code,
                label, summary, dossier_state, missing_matrix, readiness_summary
            )
            SELECT
                rs.id, rs.project_id, %(snapshot_type)s, employee.id, %(captured_by_agent_code)s, %(label)s, %(summary)s,
                %(dossier_state)s::jsonb, %(missing_matrix)s::jsonb, %(readiness_summary)s::jsonb
            FROM dossier_review_sessions rs
            LEFT JOIN employees employee ON employee.employee_code = %(captured_by_employee_code)s
            WHERE rs.id::text = %(review_id)s
            RETURNING id::text AS snapshot_id
        c                ó6   •— ‰                      | ‰‰‰¬¦  «        S )N)Úcursorr	   Úcreate_session_queryÚcreate_snapshot_query)Ú*_create_dossier_review_session_with_cursor)r   r   r   r	   Úselfs    €€€€úIC:\Projects\DSCons\app\core\postgres\dossier_reviews\session_mutations.pyú<lambda>zRDossierReviewSessionMutationsMixin.create_dossier_review_session.<locals>.<lambda>4   s)   ø€ ˜4×JÒJØØØ%9Ø&;ð	 Kñ ô € ó    u<   KhÃ´ng thá»ƒ táº£i láº¡i dossier review session vá»«a táº¡o.©Ú	review_idr   Úerror_message)Ú!_execute_with_optional_connectionÚ$_fetch_single_dossier_review_session)r   r	   r   r   r   r   s   ``  @@r   Úcreate_dossier_review_sessionz@DossierReviewSessionMutationsMixin.create_dossier_review_session   s{   øøøø€ ð Ðð !Ðð ×:Ò:Øðð ð ð ð ð ð ñ
ô 
ˆ	ð ×8Ò8ØØ!ØXð 9ñ 
ô 
ð 	
r   r   Ústrc               óª   ‡ ‡‡‡‡— dŠdŠ‰                       |ˆˆˆˆˆ fd„¦  «        }‰                      ‰|d¬¦  «        }‰                      ||¦  «        S )zECreate a finding under a dossier review session and attach evidences.a"  
            INSERT INTO dossier_review_findings (
                review_session_id, project_id, finding_code, finding_group, finding_type, title, description,
                document_type, dossier_stage, severity, impact_level, responsible_department_code,
                supplement_status, status, is_blocking, due_date, source_snapshot_id, metadata
            )
            SELECT
                rs.id, rs.project_id, %(finding_code)s, %(finding_group)s, %(finding_type)s, %(title)s, %(description)s,
                %(document_type)s, %(dossier_stage)s, %(severity)s, %(impact_level)s, %(responsible_department_code)s,
                %(supplement_status)s, %(status)s, %(is_blocking)s, %(due_date)s, snapshot.id, %(metadata)s::jsonb
            FROM dossier_review_sessions rs
            LEFT JOIN dossier_review_snapshots snapshot
                ON snapshot.id::text = %(source_snapshot_id)s
               AND snapshot.review_session_id = rs.id
            WHERE rs.id::text = %(review_id)s
            RETURNING id::text AS finding_id
        aã  
            INSERT INTO dossier_review_finding_evidence (
                finding_id, evidence_type, source_name, source_uri, source_page, excerpt,
                rule_code, rationale, confidence_score, evidence_payload
            ) VALUES (
                %(finding_id)s::uuid, %(evidence_type)s, %(source_name)s, %(source_uri)s, %(source_page)s, %(excerpt)s,
                %(rule_code)s, %(rationale)s, %(confidence_score)s, %(evidence_payload)s::jsonb
            )
        c                ó8   •— ‰                      | ‰‰‰‰¬¦  «        S )N)r   r   r	   Úcreate_finding_queryÚcreate_evidence_query)Ú*_create_dossier_review_finding_with_cursor)r   r!   r    r	   r   r   s    €€€€€r   r   zRDossierReviewSessionMutationsMixin.create_dossier_review_finding.<locals>.<lambda>e   s,   ø€ ˜4×JÒJØØ#ØØ%9Ø&;ð Kñ ô € r   u>   KhÃ´ng thá»ƒ táº£i láº¡i review session sau khi táº¡o finding.r   )r   r   Ú_find_session_finding)r   r   r	   r   Ú
finding_idÚsessionr!   r    s   ```   @@r   Úcreate_dossier_review_findingz@DossierReviewSessionMutationsMixin.create_dossier_review_findingA   s–   øøøøø€ ð Ðð"!Ðð ×;Ò;Øðð ð ð ð ð ð ð ñ	
ô 	
ˆ
ð ×;Ò;ØØ!ØZð <ñ 
ô 
ˆð
 ×)Ò)¨'°:Ñ>Ô>Ð>r   )r	   r
   r   r   r   r
   )r   r   r	   r
   r   r   r   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   © r   r   r   r      sa   € € € € € ØHÐHð .2ð	1
ð 1
ð 1
ð 1
ð 1
ð 1
ðp .2ð1?ð 1?ð 1?ð 1?ð 1?ð 1?ð 1?ð 1?r   r   )
Ú
__future__r   ÚloggingÚtypingr   Úpsycopg.connectionr   Ú	getLoggerÚloggerr   r+   r   r   ú<module>r2      s“   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )à	ˆÔ	ÐEÑ	FÔ	F€ðg?ð g?ð g?ð g?ð g?ñ g?ô g?ð g?ð g?ð g?r   