Files
cim_summary/backend/sql/create-job-bypass-rls-fk.sql
admin 9c916d12f4 feat: Production release v2.0.0 - Simple Document Processor
Major release with significant performance improvements and new processing strategy.

## Core Changes
- Implemented simple_full_document processing strategy (default)
- Full document → LLM approach: 1-2 passes, ~5-6 minutes processing time
- Achieved 100% completeness with 2 API calls (down from 5+)
- Removed redundant Document AI passes for faster processing

## Financial Data Extraction
- Enhanced deterministic financial table parser
- Improved FY3/FY2/FY1/LTM identification from varying CIM formats
- Automatic merging of parser results with LLM extraction

## Code Quality & Infrastructure
- Cleaned up debug logging (removed emoji markers from production code)
- Fixed Firebase Secrets configuration (using modern defineSecret approach)
- Updated OpenAI API key
- Resolved deployment conflicts (secrets vs environment variables)
- Added .env files to Firebase ignore list

## Deployment
- Firebase Functions v2 deployment successful
- All 7 required secrets verified and configured
- Function URL: https://api-y56ccs6wva-uc.a.run.app

## Performance Improvements
- Processing time: ~5-6 minutes (down from 23+ minutes)
- API calls: 1-2 (down from 5+)
- Completeness: 100% achievable
- LLM Model: claude-3-7-sonnet-latest

## Breaking Changes
- Default processing strategy changed to 'simple_full_document'
- RAG processor available as alternative strategy 'document_ai_agentic_rag'

## Files Changed
- 36 files changed, 5642 insertions(+), 4451 deletions(-)
- Removed deprecated documentation files
- Cleaned up unused services and models

This release represents a major refactoring focused on speed, accuracy, and maintainability.
2025-11-09 21:07:22 -05:00

77 lines
1.6 KiB
PL/PgSQL

-- Create job bypassing RLS foreign key check
-- This uses a SECURITY DEFINER function to bypass RLS
-- Step 1: Create a function that bypasses RLS
CREATE OR REPLACE FUNCTION create_processing_job(
p_document_id UUID,
p_user_id TEXT,
p_options JSONB DEFAULT '{"strategy": "document_ai_agentic_rag"}'::jsonb,
p_max_attempts INTEGER DEFAULT 3
)
RETURNS TABLE (
job_id UUID,
document_id UUID,
status TEXT,
created_at TIMESTAMP WITH TIME ZONE
)
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
DECLARE
v_job_id UUID;
BEGIN
-- Insert job (bypasses RLS due to SECURITY DEFINER)
INSERT INTO processing_jobs (
document_id,
user_id,
status,
attempts,
max_attempts,
options,
created_at
) VALUES (
p_document_id,
p_user_id,
'pending',
0,
p_max_attempts,
p_options,
NOW()
)
RETURNING id INTO v_job_id;
-- Return the created job
RETURN QUERY
SELECT
pj.id,
pj.document_id,
pj.status,
pj.created_at
FROM processing_jobs pj
WHERE pj.id = v_job_id;
END;
$$;
-- Step 2: Grant execute permission
GRANT EXECUTE ON FUNCTION create_processing_job TO postgres, authenticated, anon, service_role;
-- Step 3: Use the function to create the job
SELECT * FROM create_processing_job(
'78359b58-762c-4a68-a8e4-17ce38580a8d'::uuid,
'B00HiMnleGhGdJgQwbX2Ume01Z53',
'{"strategy": "document_ai_agentic_rag"}'::jsonb,
3
);
-- Step 4: Verify job was created
SELECT
id,
document_id,
status,
created_at
FROM processing_jobs
WHERE document_id = '78359b58-762c-4a68-a8e4-17ce38580a8d'::uuid
ORDER BY created_at DESC;