pipekit/config/modules/open.sql
Paul Trowbridge d0e72e270f Add the CMS AP subledger modules (avtx, vchr, open)
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>
2026-09-04 01:05:34 -04:00

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