feat(parcel-sync): add ANCPI ePay CF extract ordering backend
Foundation (Phase 1): - CfExtract Prisma model with version tracking, expiry, MinIO path - epay-types.ts: all ePay API response types - epay-counties.ts: WORKSPACE_ID → ePay county index mapping (42 counties) - epay-storage.ts: MinIO helpers (bucket, naming, upload, download) - docker-compose.yml: ANCPI env vars ePay Client (Phase 2): - epay-client.ts: full HTTP client (login, credits, cart, search estate, submit order, poll status, download PDF) with cookie jar + auto-relogin - epay-session-store.ts: separate session from eTerra Queue + API (Phase 3): - epay-queue.ts: sequential FIFO queue (global cart constraint), 10-step workflow per order with DB status updates at each step - POST /api/ancpi/session: connect/disconnect - POST /api/ancpi/order: create single or bulk orders - GET /api/ancpi/orders: list all extracts - GET /api/ancpi/credits: live credit balance - GET /api/ancpi/download: stream PDF from MinIO Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -115,3 +115,50 @@ model RegistryAudit {
|
||||
@@index([entryId])
|
||||
@@index([company, createdAt])
|
||||
}
|
||||
|
||||
// ─── ANCPI ePay: CF Extract Orders ──────────────────────────────────
|
||||
|
||||
model CfExtract {
|
||||
id String @id @default(uuid())
|
||||
orderId String? @unique // ePay orderId
|
||||
basketRowId Int? // ePay cart item ID
|
||||
nrCadastral String // cadastral number
|
||||
nrCF String? // CF number if different
|
||||
siruta String? // UAT SIRUTA code
|
||||
judetIndex Int // ePay county index (0-41)
|
||||
judetName String // county display name
|
||||
uatId Int // ePay UAT numeric ID
|
||||
uatName String // UAT display name
|
||||
prodId Int @default(14200)
|
||||
solicitantId String @default("14452")
|
||||
status String @default("pending") // pending|queued|cart|searching|ordering|polling|downloading|completed|failed|cancelled
|
||||
epayStatus String? // raw ePay status
|
||||
idDocument Int? // ePay document ID
|
||||
documentName String? // ePay filename
|
||||
documentDate DateTime? // when ANCPI generated
|
||||
minioPath String? // MinIO object key
|
||||
minioIndex Int? // file version index
|
||||
creditsUsed Int @default(1)
|
||||
immovableId String? // eTerra immovable ID
|
||||
immovableType String? // T/C/A
|
||||
measuredArea String?
|
||||
legalArea String?
|
||||
address String?
|
||||
gisFeatureId String? // link to GisFeature
|
||||
version Int @default(1) // increments on re-order
|
||||
expiresAt DateTime? // 30 days after documentDate
|
||||
supersededById String? // newer version id
|
||||
requestedBy String?
|
||||
errorMessage String?
|
||||
pollAttempts Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
completedAt DateTime?
|
||||
|
||||
@@index([nrCadastral])
|
||||
@@index([status])
|
||||
@@index([orderId])
|
||||
@@index([gisFeatureId])
|
||||
@@index([createdAt])
|
||||
@@index([nrCadastral, version])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user