Text Extraction Done, UI Fixes Done, Extracted Template Layout Saved in DB
This commit is contained in:
856
prompt.txt
Normal file
856
prompt.txt
Normal file
@@ -0,0 +1,856 @@
|
||||
# PROJECT: TEMPLATE-ENGINE
|
||||
|
||||
You are a senior solution architect, senior Python backend architect, senior Angular architect, OCR/Document AI specialist, PostgreSQL database architect, and enterprise software engineer.
|
||||
|
||||
Generate a COMPLETE production-ready application named:
|
||||
|
||||
template-engine
|
||||
|
||||
The solution must contain:
|
||||
|
||||
1. Angular (latest stable version) frontend using PrimeNG.
|
||||
2. Python backend using FastAPI.
|
||||
3. PostgreSQL database.
|
||||
4. SQL migration scripts.
|
||||
5. Clean architecture.
|
||||
6. Production-grade code.
|
||||
7. Proper logging.
|
||||
8. Exception handling.
|
||||
9. DTOs / Schemas.
|
||||
10. Repository pattern.
|
||||
11. Service layer.
|
||||
12. API documentation.
|
||||
13. Unit-test ready structure.
|
||||
14. Docker support should NOT be generated now.
|
||||
15. Deployment configuration should NOT be generated now.
|
||||
|
||||
---
|
||||
|
||||
# BUSINESS REQUIREMENT
|
||||
|
||||
The application is a Template Mapping Engine for invoices, purchase orders, delivery challans and similar business documents.
|
||||
|
||||
The goal is:
|
||||
|
||||
1. User uploads document.
|
||||
2. System extracts document layout and text.
|
||||
3. Layout preview is rendered.
|
||||
4. User creates template fields.
|
||||
5. User maps extracted document fields to template fields using drag and drop.
|
||||
6. Mapping is stored.
|
||||
7. When same vendor format arrives again, system automatically recognizes template and auto-fills mappings.
|
||||
|
||||
---
|
||||
|
||||
# TECHNOLOGY STACK
|
||||
|
||||
Frontend:
|
||||
|
||||
* Angular
|
||||
* PrimeNG
|
||||
* Angular CDK Drag and Drop
|
||||
* RxJS
|
||||
* Standalone Components
|
||||
* SCSS
|
||||
|
||||
Backend:
|
||||
|
||||
* Python 3.12+
|
||||
* FastAPI
|
||||
* SQLAlchemy
|
||||
* Alembic
|
||||
* Pydantic
|
||||
* PostgreSQL
|
||||
|
||||
Document Processing:
|
||||
|
||||
* pdfplumber
|
||||
* pymupdf (fitz)
|
||||
* pytesseract
|
||||
* opencv
|
||||
* pillow
|
||||
* layoutparser
|
||||
* numpy
|
||||
|
||||
Optional AI Layer:
|
||||
|
||||
* sentence-transformers
|
||||
* scikit-learn
|
||||
|
||||
---
|
||||
|
||||
# HIGH LEVEL MODULES
|
||||
|
||||
1. Document Upload Module
|
||||
2. OCR Module
|
||||
3. Layout Extraction Module
|
||||
4. Preview Rendering Module
|
||||
5. Template Management Module
|
||||
6. Mapping Module
|
||||
7. Template Recognition Engine
|
||||
8. Auto Mapping Engine
|
||||
|
||||
---
|
||||
|
||||
# STEP 1 – FRONTEND DESIGN
|
||||
|
||||
Create a page:
|
||||
|
||||
/template-mapping
|
||||
|
||||
The page must be split vertically.
|
||||
|
||||
---
|
||||
|
||||
| | |
|
||||
| LEFT PANEL | RIGHT PANEL |
|
||||
| DOCUMENT PREVIEW | TEMPLATE MAPPING |
|
||||
| | |
|
||||
-----------------------------------------------------
|
||||
|
||||
Width:
|
||||
|
||||
* Left 60%
|
||||
* Right 40%
|
||||
|
||||
Use PrimeNG Splitter.
|
||||
|
||||
---
|
||||
|
||||
LEFT PANEL
|
||||
|
||||
Header section:
|
||||
|
||||
Title:
|
||||
Document Preview
|
||||
|
||||
Buttons:
|
||||
|
||||
Upload Document
|
||||
|
||||
Supported:
|
||||
|
||||
* PDF
|
||||
* PNG
|
||||
* JPG
|
||||
* JPEG
|
||||
* TIFF
|
||||
|
||||
After upload:
|
||||
|
||||
Show extracted layout in tabular preview.
|
||||
|
||||
Important:
|
||||
|
||||
DO NOT display raw OCR text.
|
||||
|
||||
Render layout structure.
|
||||
|
||||
Example:
|
||||
|
||||
Invoice Header
|
||||
|
||||
Invoice Number
|
||||
INV001
|
||||
|
||||
Invoice Date
|
||||
01-Jan-2026
|
||||
|
||||
Vendor Name
|
||||
ABC Industries
|
||||
|
||||
---
|
||||
|
||||
Line Items
|
||||
|
||||
| Item | Qty | Rate | Amount |
|
||||
|
||||
---
|
||||
|
||||
Tax Section
|
||||
|
||||
---
|
||||
|
||||
Total Section
|
||||
|
||||
Maintain visual hierarchy.
|
||||
|
||||
Styling is not important.
|
||||
|
||||
Layout preservation is important.
|
||||
|
||||
Every text block should be selectable.
|
||||
|
||||
Every text block should be draggable.
|
||||
|
||||
Store unique layout node id.
|
||||
|
||||
---
|
||||
|
||||
RIGHT PANEL
|
||||
|
||||
Header:
|
||||
|
||||
Template Name [textbox]
|
||||
|
||||
Add Field Button
|
||||
|
||||
Create Template Button
|
||||
|
||||
---
|
||||
|
||||
When user clicks Add Field:
|
||||
|
||||
Open PrimeNG Dialog.
|
||||
|
||||
Fields:
|
||||
|
||||
Field Label
|
||||
|
||||
Field Type
|
||||
|
||||
Supported Types:
|
||||
|
||||
TEXT
|
||||
NUMBER
|
||||
DATE
|
||||
AMOUNT
|
||||
ADDRESS
|
||||
TABLE_COLUMN
|
||||
|
||||
Save
|
||||
|
||||
This creates records in template_fields.
|
||||
|
||||
---
|
||||
|
||||
Below header show:
|
||||
|
||||
Template Fields Tree/Grid
|
||||
|
||||
Example:
|
||||
|
||||
Vendor Name
|
||||
|
||||
Invoice Number
|
||||
|
||||
Invoice Date
|
||||
|
||||
GST Number
|
||||
|
||||
Item Name
|
||||
|
||||
Qty
|
||||
|
||||
Rate
|
||||
|
||||
Tax %
|
||||
|
||||
Tax Amount
|
||||
|
||||
Grand Total
|
||||
|
||||
Each field is droppable.
|
||||
|
||||
---
|
||||
|
||||
Bottom:
|
||||
|
||||
Save Mapping Button
|
||||
|
||||
---
|
||||
|
||||
# STEP 2 – DOCUMENT UPLOAD, EXTRACTION AND DATABASE STORAGE
|
||||
|
||||
When file uploaded:
|
||||
|
||||
Detect type:
|
||||
|
||||
PDF
|
||||
IMAGE
|
||||
|
||||
---
|
||||
|
||||
PDF PROCESSING
|
||||
|
||||
If text PDF:
|
||||
|
||||
Use pdfplumber
|
||||
|
||||
Extract:
|
||||
|
||||
* text
|
||||
* coordinates
|
||||
* page
|
||||
* bounding box
|
||||
|
||||
---
|
||||
|
||||
SCANNED PDF
|
||||
|
||||
Convert pages to image.
|
||||
|
||||
Run OCR.
|
||||
|
||||
Use:
|
||||
|
||||
pytesseract
|
||||
|
||||
Extract:
|
||||
|
||||
* text
|
||||
* coordinates
|
||||
|
||||
---
|
||||
|
||||
IMAGE PROCESSING
|
||||
|
||||
Run:
|
||||
|
||||
OpenCV preprocessing
|
||||
|
||||
* grayscale
|
||||
* denoise
|
||||
* threshold
|
||||
|
||||
Run OCR.
|
||||
|
||||
Extract:
|
||||
|
||||
* text
|
||||
* coordinates
|
||||
|
||||
---
|
||||
|
||||
For every extracted item store:
|
||||
|
||||
text
|
||||
|
||||
x
|
||||
|
||||
y
|
||||
|
||||
width
|
||||
|
||||
height
|
||||
|
||||
page_no
|
||||
|
||||
block_type
|
||||
|
||||
parent_block
|
||||
|
||||
sequence
|
||||
|
||||
confidence
|
||||
|
||||
---
|
||||
|
||||
Create logical blocks:
|
||||
|
||||
HEADER
|
||||
|
||||
VENDOR
|
||||
|
||||
BILL_TO
|
||||
|
||||
SHIP_TO
|
||||
|
||||
TABLE
|
||||
|
||||
TABLE_ROW
|
||||
|
||||
TABLE_CELL
|
||||
|
||||
TAX
|
||||
|
||||
TOTAL
|
||||
|
||||
FOOTER
|
||||
|
||||
---
|
||||
|
||||
Store everything in database.
|
||||
|
||||
---
|
||||
|
||||
# STEP 3 – RENDER LAYOUT PREVIEW
|
||||
|
||||
Backend returns:
|
||||
|
||||
DocumentLayoutResponse
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
documentId,
|
||||
pages:[
|
||||
]
|
||||
}
|
||||
|
||||
Layout must preserve:
|
||||
|
||||
* hierarchy
|
||||
* coordinates
|
||||
* parent child relationships
|
||||
|
||||
Frontend converts response into preview tree.
|
||||
|
||||
Render:
|
||||
|
||||
Header
|
||||
|
||||
Vendor
|
||||
|
||||
Line Items
|
||||
|
||||
Tax
|
||||
|
||||
Total
|
||||
|
||||
Footer
|
||||
|
||||
Every node:
|
||||
|
||||
draggable
|
||||
|
||||
---
|
||||
|
||||
# STEP 4 – TEMPLATE MANAGEMENT
|
||||
|
||||
Template Creation Flow
|
||||
|
||||
User enters:
|
||||
|
||||
Template Name
|
||||
|
||||
Click Create Template
|
||||
|
||||
Create record in templates.
|
||||
|
||||
---
|
||||
|
||||
Add Field Dialog
|
||||
|
||||
Create rows in template_fields.
|
||||
|
||||
Fields:
|
||||
|
||||
field_label
|
||||
|
||||
field_type
|
||||
|
||||
display_order
|
||||
|
||||
required_flag
|
||||
|
||||
created_at
|
||||
|
||||
---
|
||||
|
||||
Support unlimited fields.
|
||||
|
||||
Support edit/delete field.
|
||||
|
||||
---
|
||||
|
||||
# STEP 5 – DRAG AND DROP MAPPING
|
||||
|
||||
Use Angular CDK.
|
||||
|
||||
Drag Source:
|
||||
|
||||
Document preview nodes.
|
||||
|
||||
Drop Target:
|
||||
|
||||
Template fields.
|
||||
|
||||
---
|
||||
|
||||
Mapping UI:
|
||||
|
||||
Vendor Name
|
||||
← ABC Industries
|
||||
|
||||
Invoice Number
|
||||
← INV-1001
|
||||
|
||||
Invoice Date
|
||||
← 2026-01-01
|
||||
|
||||
GST Number
|
||||
← 27ABCDE1234F1Z5
|
||||
|
||||
---
|
||||
|
||||
Save Mapping
|
||||
|
||||
Backend stores:
|
||||
|
||||
template_fields_mapping
|
||||
|
||||
Include:
|
||||
|
||||
document coordinates
|
||||
|
||||
page number
|
||||
|
||||
bounding box
|
||||
|
||||
confidence
|
||||
|
||||
layout path
|
||||
|
||||
parent section
|
||||
|
||||
---
|
||||
|
||||
# STEP 6 – TEMPLATE RECOGNITION ENGINE
|
||||
|
||||
Requirement:
|
||||
|
||||
When same vendor document arrives again:
|
||||
|
||||
System automatically identifies template.
|
||||
|
||||
---
|
||||
|
||||
Create template fingerprint.
|
||||
|
||||
Store:
|
||||
|
||||
Vendor Name
|
||||
|
||||
Header Positions
|
||||
|
||||
Table Header Names
|
||||
|
||||
Relative Coordinates
|
||||
|
||||
Document Structure
|
||||
|
||||
---
|
||||
|
||||
Generate fingerprint hash.
|
||||
|
||||
Store in database.
|
||||
|
||||
---
|
||||
|
||||
Recognition Strategy
|
||||
|
||||
Level 1
|
||||
|
||||
Vendor Name Match
|
||||
|
||||
Level 2
|
||||
|
||||
Header Similarity
|
||||
|
||||
Level 3
|
||||
|
||||
Layout Similarity
|
||||
|
||||
Level 4
|
||||
|
||||
Coordinate Similarity
|
||||
|
||||
---
|
||||
|
||||
Use weighted score.
|
||||
|
||||
Example:
|
||||
|
||||
Vendor Match = 40%
|
||||
|
||||
Header Match = 20%
|
||||
|
||||
Layout Match = 20%
|
||||
|
||||
Coordinate Match = 20%
|
||||
|
||||
Threshold:
|
||||
|
||||
85%
|
||||
|
||||
If matched:
|
||||
|
||||
Auto apply template.
|
||||
|
||||
---
|
||||
|
||||
# AUTO MAPPING ENGINE
|
||||
|
||||
After template recognized:
|
||||
|
||||
Find mapped coordinates.
|
||||
|
||||
Extract values from same coordinate zones.
|
||||
|
||||
Populate template fields automatically.
|
||||
|
||||
Return:
|
||||
|
||||
{
|
||||
templateMatched:true,
|
||||
templateId:1,
|
||||
confidence:96.5,
|
||||
extractedFields:[
|
||||
]
|
||||
}
|
||||
|
||||
Frontend should immediately show populated template values.
|
||||
|
||||
User may modify and save again.
|
||||
|
||||
---
|
||||
|
||||
# DATABASE DESIGN
|
||||
|
||||
Create schema:
|
||||
|
||||
templates
|
||||
|
||||
---
|
||||
|
||||
TABLE documents
|
||||
|
||||
pk_document_id BIGSERIAL PK
|
||||
|
||||
document_name VARCHAR(500)
|
||||
|
||||
document_type VARCHAR(100)
|
||||
|
||||
file_name VARCHAR(500)
|
||||
|
||||
file_hash VARCHAR(500)
|
||||
|
||||
page_count INTEGER
|
||||
|
||||
status VARCHAR(50)
|
||||
|
||||
created_at TIMESTAMP
|
||||
|
||||
updated_at TIMESTAMP
|
||||
|
||||
---
|
||||
|
||||
TABLE document_layout
|
||||
|
||||
pk_document_data_id BIGSERIAL PK
|
||||
|
||||
fk_document_id BIGINT
|
||||
|
||||
page_no INTEGER
|
||||
|
||||
text_value TEXT
|
||||
|
||||
block_type VARCHAR(100)
|
||||
|
||||
parent_block_id BIGINT
|
||||
|
||||
x_coordinate NUMERIC
|
||||
|
||||
y_coordinate NUMERIC
|
||||
|
||||
width NUMERIC
|
||||
|
||||
height NUMERIC
|
||||
|
||||
confidence NUMERIC
|
||||
|
||||
sequence_no INTEGER
|
||||
|
||||
layout_path TEXT
|
||||
|
||||
created_at TIMESTAMP
|
||||
|
||||
---
|
||||
|
||||
TABLE templates
|
||||
|
||||
pk_template_id BIGSERIAL PK
|
||||
|
||||
template_name VARCHAR(255)
|
||||
|
||||
template_fingerprint TEXT
|
||||
|
||||
active_flag BOOLEAN
|
||||
|
||||
created_at TIMESTAMP
|
||||
|
||||
updated_at TIMESTAMP
|
||||
|
||||
---
|
||||
|
||||
TABLE template_fields
|
||||
|
||||
pk_template_field_id BIGSERIAL PK
|
||||
|
||||
fk_template_id BIGINT
|
||||
|
||||
field_label VARCHAR(255)
|
||||
|
||||
field_type VARCHAR(100)
|
||||
|
||||
display_order INTEGER
|
||||
|
||||
required_flag BOOLEAN
|
||||
|
||||
created_at TIMESTAMP
|
||||
|
||||
---
|
||||
|
||||
TABLE template_fields_mapping
|
||||
|
||||
pk_mapping_id BIGSERIAL PK
|
||||
|
||||
fk_template_id BIGINT
|
||||
|
||||
fk_template_field_id BIGINT
|
||||
|
||||
fk_document_data_id BIGINT
|
||||
|
||||
page_no INTEGER
|
||||
|
||||
x_coordinate NUMERIC
|
||||
|
||||
y_coordinate NUMERIC
|
||||
|
||||
width NUMERIC
|
||||
|
||||
height NUMERIC
|
||||
|
||||
mapping_confidence NUMERIC
|
||||
|
||||
layout_path TEXT
|
||||
|
||||
created_at TIMESTAMP
|
||||
|
||||
---
|
||||
|
||||
TABLE template_recognition_history
|
||||
|
||||
pk_history_id BIGSERIAL PK
|
||||
|
||||
fk_template_id BIGINT
|
||||
|
||||
fk_document_id BIGINT
|
||||
|
||||
recognition_score NUMERIC
|
||||
|
||||
matched_flag BOOLEAN
|
||||
|
||||
created_at TIMESTAMP
|
||||
|
||||
---
|
||||
|
||||
Generate complete SQL scripts.
|
||||
|
||||
Generate Alembic migrations.
|
||||
|
||||
Generate indexes.
|
||||
|
||||
Generate foreign keys.
|
||||
|
||||
Generate constraints.
|
||||
|
||||
---
|
||||
|
||||
# BACKEND APIS
|
||||
|
||||
POST /api/documents/upload
|
||||
|
||||
GET /api/documents/{id}
|
||||
|
||||
GET /api/documents/{id}/layout
|
||||
|
||||
POST /api/templates
|
||||
|
||||
PUT /api/templates/{id}
|
||||
|
||||
DELETE /api/templates/{id}
|
||||
|
||||
POST /api/template-fields
|
||||
|
||||
PUT /api/template-fields/{id}
|
||||
|
||||
DELETE /api/template-fields/{id}
|
||||
|
||||
POST /api/mappings/save
|
||||
|
||||
POST /api/templates/recognize
|
||||
|
||||
POST /api/templates/auto-map
|
||||
|
||||
---
|
||||
|
||||
# PROJECT STRUCTURE
|
||||
|
||||
Generate complete folder structure.
|
||||
|
||||
Frontend structure.
|
||||
|
||||
Backend structure.
|
||||
|
||||
Models.
|
||||
|
||||
Repositories.
|
||||
|
||||
Services.
|
||||
|
||||
Controllers.
|
||||
|
||||
DTOs.
|
||||
|
||||
Validation.
|
||||
|
||||
Error Handling.
|
||||
|
||||
Logging.
|
||||
|
||||
Configurations.
|
||||
|
||||
Environment files.
|
||||
|
||||
Constants.
|
||||
|
||||
Utilities.
|
||||
|
||||
OCR helpers.
|
||||
|
||||
Template recognition engine.
|
||||
|
||||
Auto mapping engine.
|
||||
|
||||
---
|
||||
|
||||
# OUTPUT REQUIREMENT
|
||||
|
||||
Generate code step-by-step in the following order:
|
||||
|
||||
1. Complete solution architecture.
|
||||
2. PostgreSQL schema and SQL scripts.
|
||||
3. Backend folder structure.
|
||||
4. Backend implementation.
|
||||
5. OCR and layout extraction implementation.
|
||||
6. Template recognition engine.
|
||||
7. API layer.
|
||||
8. Angular folder structure.
|
||||
9. Angular UI implementation.
|
||||
10. PrimeNG screens.
|
||||
11. Drag and drop implementation.
|
||||
12. API integration.
|
||||
13. Auto mapping implementation.
|
||||
14. Validation.
|
||||
15. Testing strategy.
|
||||
|
||||
All generated code must be production-ready, runnable, and complete with no placeholders or TODO comments.
|
||||
|
||||
|
||||
Use existing frontend project and enable this route //{ path: 'templates', component: TemplateComponent } and create respective component and add and design our page in this component.
|
||||
|
||||
Use backend project for python logic and related endpoints. database details are available in database.py. use or create new schema "templates" for this task
|
||||
|
||||
Move to next step once I give the confirmation that step 1 is done.
|
||||
Reference in New Issue
Block a user