Completes the AP source layer: GP was covered by the pm* modules, but the CMS side had only cms.vend. These three are what SQL/fiscal/analysis/open_ap_aging.db2.sql actually joins. avtx 966,553 A/P voucher transaction events incremental on AVTSTM vchr 792,348 vouchers entered, period to date full open 538,544 open payables; FHCBAL is live full AVTX is the artrn analog -- the per-event apply detail. It matters because the AR aging in /opt/clean reconstructs balances from application events rather than a single settle_date, so AP needs an applications fact too, not just documents. Grains verified exactly unique before drafting: AVTX (avtco#,avtvh#,avttx#) 966,553/966,553; VCHR (idcom#,idvch#,idbnk#,idfisy,idfisp) 792,348/792,348; OPEN (fhcom#,fhvch#,fhpyy,fhpper) 538,544/538,544. All three reconcile IN SYNC. vchr and open stay full: no change signal, only business dates, and FHCBAL is a live mutable balance. Two things worth knowing for the next DB2 module: - pipekit maps DB2 TIMESTMP to Postgres text, so a watermark resolver doing COALESCE(MAX(ts), TIMESTAMP '...') fails on mismatched types. Cast explicitly. cms.gtran was already the precedent. - Watermarks resolve at engine step 2 but --create-dest builds the table at step 3b, so a watermark reading its own dest table fails on the first run. Pre-create the table or seed with a constant. Note LGDAT.AP* is a dead end -- APVH has 14 rows, APVD has 22. CMS AP does not live in AP-prefixed files. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
70 lines
2.0 KiB
SQL
70 lines
2.0 KiB
SQL
SELECT
|
|
"FHCOM#" AS fhcom#,
|
|
RTRIM(FHBANK) AS fhbank,
|
|
"FHVCH#" AS fhvch#,
|
|
FHPYY AS fhpyy,
|
|
FHPPER AS fhpper,
|
|
RTRIM(FHHSTS) AS fhhsts,
|
|
RTRIM("FHINV#") AS fhinv#,
|
|
RTRIM(FHIDTE) AS fhidte,
|
|
RTRIM(FHDDTE) AS fhddte,
|
|
"FHCHQ#" AS fhchq#,
|
|
RTRIM(FHMDTE) AS fhmdte,
|
|
RTRIM(FHA1) AS fha1,
|
|
RTRIM(FHANU) AS fhanu,
|
|
FHGRS AS fhgrs,
|
|
FHDIS AS fhdis,
|
|
RTRIM(FHPCOD) AS fhpcod,
|
|
RTRIM(FHVCLS) AS fhvcls,
|
|
RTRIM(FHDSDT) AS fhdsdt,
|
|
RTRIM(FHA4) AS fha4,
|
|
FHPTD AS fhptd,
|
|
FHPTD2 AS fhptd2,
|
|
RTRIM(FHPIND) AS fhpind,
|
|
RTRIM(FHDSCD) AS fhdscd,
|
|
RTRIM(FHA3) AS fha3,
|
|
RTRIM(FHVDES) AS fhvdes,
|
|
FHPAY AS fhpay,
|
|
RTRIM("FHVEN#") AS fhven#,
|
|
FHGSTA AS fhgsta,
|
|
FHGSTX AS fhgstx,
|
|
"FHADR#" AS fhadr#,
|
|
CASE WHEN FHIDAT IN (DATE('0001-01-01'), DATE('9999-12-31')) THEN NULL ELSE FHIDAT END AS fhidat,
|
|
CASE WHEN FHDDAT IN (DATE('0001-01-01'), DATE('9999-12-31')) THEN NULL ELSE FHDDAT END AS fhddat,
|
|
CASE WHEN FHMDAT IN (DATE('0001-01-01'), DATE('9999-12-31')) THEN NULL ELSE FHMDAT END AS fhmdat,
|
|
CASE WHEN FHSDAT IN (DATE('0001-01-01'), DATE('9999-12-31')) THEN NULL ELSE FHSDAT END AS fhsdat,
|
|
RTRIM("FHPRJ#") AS fhprj#,
|
|
RTRIM(FHCURR) AS fhcurr,
|
|
FHAMTP AS fhamtp,
|
|
RTRIM(FHVBKC) AS fhvbkc,
|
|
FHHQCN AS fhhqcn,
|
|
RTRIM(FHHQBC) AS fhhqbc,
|
|
FHCBAL AS fhcbal,
|
|
RTRIM(FHSTSC) AS fhstsc,
|
|
RTRIM(FHSTSK) AS fhstsk,
|
|
RTRIM(FHFUT1) AS fhfut1,
|
|
RTRIM(FHFUT2) AS fhfut2,
|
|
RTRIM(FHFUT3) AS fhfut3,
|
|
RTRIM(FHFUT4) AS fhfut4,
|
|
RTRIM(FHFUT5) AS fhfut5,
|
|
RTRIM(FHFUT6) AS fhfut6,
|
|
RTRIM(FHFUT7) AS fhfut7,
|
|
FHFUT8 AS fhfut8,
|
|
FHFUT9 AS fhfut9,
|
|
RTRIM(FHFUTA) AS fhfuta,
|
|
FHWTYC AS fhwtyc,
|
|
CASE WHEN FHCDAT IN (DATE('0001-01-01'), DATE('9999-12-31')) THEN NULL ELSE FHCDAT END AS fhcdat,
|
|
FHOEXT AS fhoext,
|
|
CASE WHEN FHIRDT IN (DATE('0001-01-01'), DATE('9999-12-31')) THEN NULL ELSE FHIRDT END AS fhirdt,
|
|
FHDSNT AS fhdsnt,
|
|
FHGSTD AS fhgstd,
|
|
FHFUTB AS fhfutb,
|
|
FHFUTC AS fhfutc,
|
|
RTRIM(FHFUTD) AS fhfutd,
|
|
RTRIM(FHFUTE) AS fhfute,
|
|
RTRIM(FHFUTF) AS fhfutf,
|
|
RTRIM(FHMCRF) AS fhmcrf,
|
|
RTRIM(FHEHCD) AS fhehcd,
|
|
FHMISA AS fhmisa
|
|
FROM LGDAT.OPEN
|