Files
query-orchestration/internal/database/queries/fieldextractions.sql
T
Jay Brown 3bdc27f4de Merged in feature/textExtractionsPart2 (pull request #193)
Continue finishing the parts of the text extraction plan

* add missing fields
2025-12-02 19:13:08 +00:00

253 lines
6.6 KiB
SQL

-- name: AddFieldExtraction :one
INSERT INTO documentFieldExtractions (
documentId,
fileName,
contractTitle,
aareteDerivedAmendmentNum,
clientName,
payerName,
payerState,
providerState,
filenameTin,
provGroupTin,
provGroupNpi,
provGroupNameFull,
provOtherTin,
provOtherNpi,
provOtherNameFull,
aareteDerivedEffectiveDt,
aareteDerivedTerminationDt,
autoRenewalInd,
autoRenewalTerm,
createdBy
) VALUES (
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10,
$11, $12, $13, $14, $15, $16, $17, $18, $19, $20
)
RETURNING *;
-- name: AddFieldExtractionArrayField :exec
INSERT INTO documentFieldExtractionArrayFields (
fieldExtractionId,
arrayIndex,
exhibitTitle,
exhibitPage,
reimbProvTin,
reimbProvNpi,
reimbProvName,
reimbEffectiveDt,
reimbTerminationDt,
aareteDerivedClaimTypeCd,
aareteDerivedProduct,
aareteDerivedLob,
aareteDerivedProgram,
aareteDerivedNetwork,
aareteDerivedProvType,
provTaxonomyCd,
provTaxonomyCdDesc,
provSpecialtyCd,
provSpecialtyCdDesc,
placeOfServiceCd,
placeOfServiceCdDesc,
billTypeCd,
billTypeCdDesc,
patientAgeMin,
patientAgeMax,
reimbTerm,
lobProgramRelationship,
lobProductRelationship,
carveoutInd,
carveoutCd,
lesserOfInd,
greaterOfInd,
aareteDerivedReimbMethod,
unitOfMeasure,
reimbPctRate,
reimbFeeRate,
reimbConversionFactor,
triggerCapThresholdAmt,
triggerBaseThreshold,
defaultInd,
additionDesc,
additionMaxFeeRateInc,
additionMaxPctRateInc,
aareteDerivedAdditionRateChangeTimeline,
aareteDerivedFeeSchedule,
aareteDerivedFeeScheduleVersion,
serviceTerm,
cpt4ProcCd,
cpt4ProcCdDesc,
cpt4ProcMod,
cpt4ProcModDesc,
revenueCd,
revenueCdDesc,
diagCd,
diagCdDesc,
ndcCd,
ndcCdDesc,
claimAdmitTypeCd,
authAdmitTypeDesc,
claimStatusCd,
claimStatusCdDesc,
grouperType,
grouperCd,
grouperCdDesc,
grouperPctRate,
grouperBaseRate,
aareteDerivedGrouperVersion,
grouperAlternativeLevelOfCare,
grouperSeverityInd,
grouperSeverity,
grouperRiskOfMortalitySubclass,
grouperTransferInd,
grouperReadmissionsInd,
grouperHacInd,
outlierTerm,
outlierFirstDollarInd,
rangeNbrDays,
outlierFixedLossNbrDaysThreshold,
outlierFixedLossThreshold,
outlierMaximum,
outlierMaximumFrequency,
outlierPctRate,
outlierExclusionCd,
outlierExclusionCdDesc,
facilityAdjustmentTerm,
dshInd,
dshPctRate,
dshFeeRate,
imeInd,
imePctRate,
imeFeeRate,
ntapInd,
ntapPctRate,
ntapFeeRate,
ucInd,
ucPctRate,
ucFeeRate,
gmeInd,
gmePctRate,
gmeFeeRate,
rateEscalatorInd,
rateEscalatorDesc,
rateEscalatorMaxRateIncPct,
rateEscalatorRateChangeTimeline,
stopLossTerm,
stopLossFirstDollarInd,
stopLossRangeNbrDays,
stopLossFixedLossThreshold,
stopLossMaximum,
stopLossMaximumFrequency,
stopLossDailyMaxRate,
stopLossPctRateOnExcessCharges,
stopLossExclusionCd,
stopLossExclusionDesc
) VALUES (
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10,
$11, $12, $13, $14, $15, $16, $17, $18, $19, $20,
$21, $22, $23, $24, $25, $26, $27, $28, $29, $30,
$31, $32, $33, $34, $35, $36, $37, $38, $39, $40,
$41, $42, $43, $44, $45, $46, $47, $48, $49, $50,
$51, $52, $53, $54, $55, $56, $57, $58, $59, $60,
$61, $62, $63, $64, $65, $66, $67, $68, $69, $70,
$71, $72, $73, $74, $75, $76, $77, $78, $79, $80,
$81, $82, $83, $84, $85, $86, $87, $88, $89, $90,
$91, $92, $93, $94, $95, $96, $97, $98, $99, $100,
$101, $102, $103, $104, $105, $106, $107, $108, $109, $110,
$111, $112, $113, $114
);
-- name: AddFieldExtractionEntry :exec
-- Insert a new version entry for a field extraction
-- documentId is required for the unique constraint enforcement
INSERT INTO documentFieldExtractionVersions (fieldExtractionId, documentId, version, createdBy)
VALUES ($1, $2, $3, $4);
-- name: LockFieldExtractionVersionsForDocument :many
-- Lock all existing version rows for a document to prevent concurrent inserts
-- Must be called within a transaction before GetMaxFieldExtractionVersion
-- Returns the locked rows (which may be empty for first version)
SELECT id, version FROM documentFieldExtractionVersions
WHERE documentId = $1
FOR UPDATE;
-- name: GetMaxFieldExtractionVersion :one
-- Get the current max version for a document (call after LockFieldExtractionVersionsForDocument)
-- Returns 0 if no versions exist, otherwise the max version number
-- COALESCE ensures we always get a non-NULL value that can be scanned into int64
SELECT COALESCE(MAX(version), 0) as max_version
FROM documentFieldExtractionVersions
WHERE documentId = $1;
-- name: GetCurrentFieldExtraction :one
SELECT * FROM currentFieldExtractions
WHERE documentId = $1;
-- name: GetFieldExtractionByVersion :one
-- Retrieves a specific version of field extraction for a document
-- Returns the field extraction record with version metadata
SELECT
dfe.id,
dfe.documentId,
dfe.fileName,
dfe.contractTitle,
dfe.aareteDerivedAmendmentNum,
dfe.clientName,
dfe.payerName,
dfe.payerState,
dfe.providerState,
dfe.filenameTin,
dfe.provGroupTin,
dfe.provGroupNpi,
dfe.provGroupNameFull,
dfe.provOtherTin,
dfe.provOtherNpi,
dfe.provOtherNameFull,
dfe.aareteDerivedEffectiveDt,
dfe.aareteDerivedTerminationDt,
dfe.autoRenewalInd,
dfe.autoRenewalTerm,
dfev.version,
dfev.createdBy,
dfev.createdAt
FROM documentFieldExtractions dfe
JOIN documentFieldExtractionVersions dfev
ON dfev.fieldExtractionId = dfe.id
WHERE dfev.documentId = $1 AND dfev.version = $2;
-- name: GetCurrentFieldExtractionWithArrayCount :one
SELECT * FROM currentFieldExtractionsWithArrayCount
WHERE documentId = $1;
-- name: GetFieldExtractionArrayFields :many
SELECT * FROM documentFieldExtractionArrayFields
WHERE fieldExtractionId = $1
ORDER BY arrayIndex;
-- name: GetFieldExtractionHistory :many
SELECT
dfe.id,
dfe.documentId,
dfev.version,
dfev.createdBy,
dfev.createdAt
FROM documentFieldExtractions dfe
JOIN documentFieldExtractionVersions dfev
ON dfev.fieldExtractionId = dfe.id
WHERE dfe.documentId = $1
ORDER BY dfev.version DESC;
-- name: ValidateArrayFieldCount :one
SELECT COUNT(*) as arrayFieldCount
FROM documentFieldExtractionArrayFields
WHERE fieldExtractionId = $1;
-- name: GetFieldExtractionByID :one
SELECT * FROM documentFieldExtractions
WHERE id = $1;
-- name: GetFieldExtractionsByDocumentID :many
SELECT * FROM documentFieldExtractions
WHERE documentId = $1
ORDER BY createdAt DESC;