Pre-Close Deal Tracking
Workflow purpose
Keep every deal from PSA signature through funding on schedule: track the closing checklist row-by-row, show the key-date countdown, catch contingency removal evidence gaps before they become escrow delays, and escalate when lender deliverables are at risk. The workflow does not execute closing actions — the deal team does. Its job is to surface the countdown and the gaps consistently so the human decisions are timely.
Trigger conditions
- Explicit: "closing checklist for DP_DEAL_019", "daily close tracking for next week's closes", "what's open on this deal", "key-date countdown".
- Implicit: deal enters
under_psa, under_dd, under_financing, or pre_close in Dealpath; a deal_key_date approaches within the overlay alert band (e.g., DD-period-end within 5 days).
- Recurring: weekly for all deals past
under_psa; daily for deals within the overlay-defined closing window (typically 5-10 business days before expected_close_date).
Inputs (required / optional)
| Input |
Type |
Required |
Notes |
Dealpath normalized deal records |
table |
required |
canonical shape from normalized_contract.yaml |
Dealpath normalized deal_key_date records |
table |
required |
LOI expiry, PSA expiry, DD period end, financing contingency, close target, tax lookback |
Dealpath normalized deal_milestone records |
table |
required |
closing-checklist milestones and contingency-removal evidence linkage |
| Closing-checklist template overlay |
overlay |
required |
per-segment / per-deal-type rows; overlay carries as_of_date |
| Lender deliverable schedule |
overlay |
optional |
per-lender requirements; falls back to overlay default |
| Escrow agent contact / SLA |
overlay |
optional |
per-jurisdiction default; overlay-tunable |
| Legal entity setup status |
reference |
optional |
signals readiness for funding; falls back to not_started warning |
Outputs
| Output |
Type |
Shape |
| Per-deal closing dashboard |
kpi_review |
key dates, days remaining, status per row |
| Closing checklist with status |
checklist |
row, owner, due date, evidence, state (open / complete / waived / blocked) |
| Open-contingency list |
checklist |
contingency, evidence required, responsible party, deadline |
| Lender-deliverable scorecard |
kpi_review |
item, responsible, state, days to lender deadline |
| Escalation notices |
email_draft |
draft_for_review; to deal_team_lead / investments_lead when key date approaches |
| Closing-week dashboard |
kpi_review |
all deals within close_window_days; at-risk flags |
| Narrative memo (per deal) |
memo |
summary of what's open, what's cleared, next 72 hours |
Required context
asset_class=residential_multifamily. Deal grain: either a single deal_id or a list of deal_ids within a portfolio or fund scope. org_id required for approval-threshold bands. Segment and form_factor used only for overlay selection (closing-checklist template varies by deal_type and segment). jurisdiction relevant for tax-lookback day count and legal-entity setup bands.
Process
- Freshness + DQ gate. Evaluate Dealpath
dq_rules.yaml. dp_freshness_deals blocker halts the run for affected deals. Log dp_handoff_lag warnings for recently closed deals.
- Scope. Resolve the deal list: either a named
deal_id, all deals past under_psa, or all deals within the overlay-defined closing window.
- Key-date countdown. For each deal, pull every
deal_key_date row. Compute key_date_days_remaining per row. Flag any date within the overlay alert band (yellow) or past date without recorded achievement (red).
- Closing-checklist composition. Load overlay-defined checklist template per deal type and segment. For each row, read Dealpath
deal_milestone state; resolve to one of open / complete / waived / blocked. Attach evidence pointer when present; surface missing-evidence rows explicitly.
- Contingency tracking. Enumerate open contingencies with their evidence requirement and responsible party. For each, flag if past its removal deadline or if evidence is missing.
- Escrow status. Surface escrow account status (opened / funded / pending), earnest-money posted state, and any hold-back or reserve requirements. Defer to reference if the adapter does not carry it; surface the gap.
- Lender deliverable tracking. For each item on the lender schedule, resolve state from milestones and
deal_document references. Compute lender_deliverable_status_score (overlay-defined).
- Tax lookback + legal entity readiness. Compute days remaining on tax lookback; flag legal entity setup status (warn if
not_started past overlay band).
- Closing certainty. Composite
closing_certainty_score from open-contingency count, key-date countdown, lender deliverable score, and escrow status. Overlay-tunable weighting. Publish with proposed: true.
- Escalation. If any key date breach is imminent, any open contingency is past deadline, or any lender deliverable is blocked, compose escalation draft (
email_draft, draft_for_review) to deal_team_lead and investments_lead.
- Price change / retrade screen. If Dealpath records show a requested price adjustment, extension, or seller concession request, open a retrade line item and cross-link to
workflows/pipeline_review/ retrade list.
- Compose per-deal memo. Three sections: (a) state of play, (b) what's open in the next 72 hours, (c) escalations sent / pending. Every claim cites a metric slug or evidence reference.
- Closing-week dashboard. Roll all deals in
close_window_days into one view; at-risk flags per deal; capital-funding sequence noted.
- Confidence banner. Adapter
as_of_date, overlay status, dq outcomes, any fallback behavior invoked.
Metrics used
See frontmatter metrics_used. All metric slugs for this workflow are proposed (proposed: true) — no pre-close metric has landed in _core/metrics.md yet. Every output carries the proposed flag on each metric.
Reference files used
reference/connectors/adapters/dealpath_deal_pipeline/normalized_contract.yaml
reference/connectors/adapters/dealpath_deal_pipeline/dq_rules.yaml
reference/connectors/deal_pipeline/schema.yaml
reference/connectors/master_data/asset_crosswalk.yaml
reference/normalized/approval_threshold_defaults.csv
reference/normalized/close_calendar__portfolio.csv
Escalation points
- Key-date breach imminent (within overlay alert band): deal_team_lead -> investments_lead.
- Open contingency past deadline: deal_team_lead -> investments_lead -> asset_management_director.
- Lender deliverable blocked: deal_team_lead -> investments_lead -> finance_systems_team.
- Retrade / price-change request surfaced: deal_team_lead -> investments_lead -> executive.
- DQ blocker from Dealpath: data_platform_team -> investments_lead; affected deals paused.
Required approvals
None for the tracking pack itself. Any closing-week action (PSA extension, deposit release, price adjustment, contingency waiver) opens its own ApprovalRequest via the originating workflow — this pack surfaces the gap but does not execute.
Failure modes
- Marking a checklist row complete without evidence pointer. Fix: evidence required or row stays
open.
- Using a closing-checklist template that does not match the deal type. Fix: overlay selection checks
deal_type and segment; mismatch refused.
- Reporting
days_to_close without surfacing imminent key-date breach. Fix: imminent breaches flagged before overall countdown is published.
- Silently defaulting escrow status when reference is absent. Fix: absent state surfaces as
unknown with warning, not a clean status.
- Composing an escalation draft without
draft_for_review tag. Fix: every email output carries draft_for_review until overlay permits auto-send.
- Claiming funding on partial closing (equity closed but debt pending). Fix: funding claimed only when both tranches record; split state reported explicitly.
- Surfacing contingency as
waived without policy reference. Fix: waiver requires overlay policy reference and approval_request link.
Edge cases
- Stalled deal (post-PSA, no DD progress): deal shows extended days in
under_dd — flagged with owner and last activity; escalation draft composed.
- Retrade request: seller or buyer requests price adjustment after PSA — surfaced on retrade list with evidence pointer; cross-link to pipeline_review retrade screen.
- Declined-then-resurrected deal: deal previously dropped that returns to active — key-date countdown restarts from new LOI; prior-decision pointer retained.
- Deal renamed after IC: name change logged via
dp_renamed_after_approval; closing checklist reads canonical deal_id regardless of display name.
- Multi-asset deal (portfolio acquisition): one deal, multiple target properties — closing checklist enumerates per-asset contingencies (title, survey, PCR, Phase I) while keeping single financing key dates.
- Cross-fund allocation: deal split across funds — capital sequence noted per fund; per-fund funding state tracked.
- Debt market shift mid-close: lender indicates term adjustment inside closing window — surface immediately; cross-link to pipeline_review debt variance and escalate.
- Partial closing: equity closes before debt (or vice versa) — two positions recorded; closing_certainty_score reflects the partial state; no "closed" claim until both record.
- Condition unresolved at close (ic_approved pending conditions): open condition within
resolution_deadline — if deadline lapses before close, escalate per approval_matrix; block closed transition until resolved.
- Late legal entity setup: legal_entity_id not populated post-close beyond overlay lag — flagged as
dp_handoff_lag warning; cross-link to acquisition_handoff when that workflow exists.
- Escrow holdback: reserved funds post-close (repairs, compliance, litigation) — tracked as a separate line item with release trigger.
Example invocations
- "Build the closing checklist snapshot for DP_DEAL_019. What's open this week?"
- "Daily close tracking for all deals closing next week. Flag at-risk deals."
- "Key-date countdown for DP_DEAL_022. Where are we on lender deliverables?"
- "What contingencies are still open on DP_DEAL_004 and who owns each?"
- "Draft an escalation to the investments lead — DD period ends tomorrow on DP_DEAL_027 and the roof scope is unresolved."
Example outputs
See examples/example_pre_close_deal_tracking_output.md for the full artifact shape.
Output — Closing dashboard (abridged, DP_DEAL_019)
Deal. DP_DEAL_019 — 248-unit garden acquisition, Charlotte, expected close 2026-04-22.
Key-date countdown.
- LOI expiry: achieved 2026-02-10.
- PSA expiry: achieved 2026-03-05.
- DD period end: 2026-04-18 (3 business days remaining). Within alert band. Flag.
- Financing contingency: 2026-04-19 (4 business days remaining). Within alert band.
- Close target: 2026-04-22.
- Tax lookback: 2026-04-15 (today — compliant).
Open contingencies. 3.
- Title commitment review: evidence pending; responsible L. Garcia; deadline 2026-04-17.
- Survey acceptance: evidence received; pending legal sign-off.
- Phase I ESA: cleared; evidence on file.
Lender deliverables. 8 items; 6 complete, 2 pending (insurance binder, entity certificate of good standing). lender_deliverable_status_score = 0.75 (proposed). Within overlay band but trending tight.
Escrow. Earnest money posted; final deposit required by 2026-04-21.
Closing certainty. closing_certainty_score = 0.82 (proposed). On track conditional on title commitment review by 2026-04-17.
Escalation. Draft composed (draft_for_review) to deal_team_lead: title commitment review flag.
Confidence banner. dealpath_deal_pipeline@2026-04-15 (sample), close_calendar__portfolio@2026-03-31 (starter), approval_threshold_defaults@2026-03-31 (starter).
1---2name: pre-close-deal-tracking3description: Per-deal closing discipline. Tracks PSA / financing key-date countdown (LOI expiry, PSA expiry, DD period end, financing contingency, close target, tax lookback), open contingencies and their evidence of removal, escrow funding status, and lender deliverable status. Produces a weekly running scorecard per deal (daily for closing-week deals), triggers escalations as key dates approach, and composes a closing-week dashboard covering every deal within the close_window_days overlay band.4---56# Pre-Close Deal Tracking78## Workflow purpose910Keep every deal from PSA signature through funding on schedule: track the closing checklist row-by-row, show the key-date countdown, catch contingency removal evidence gaps before they become escrow delays, and escalate when lender deliverables are at risk. The workflow does not execute closing actions — the deal team does. Its job is to surface the countdown and the gaps consistently so the human decisions are timely.1112## Trigger conditions1314- **Explicit:** "closing checklist for DP_DEAL_019", "daily close tracking for next week's closes", "what's open on this deal", "key-date countdown".15- **Implicit:** deal enters `under_psa`, `under_dd`, `under_financing`, or `pre_close` in Dealpath; a `deal_key_date` approaches within the overlay alert band (e.g., DD-period-end within 5 days).16- **Recurring:** weekly for all deals past `under_psa`; daily for deals within the overlay-defined closing window (typically 5-10 business days before `expected_close_date`).1718## Inputs (required / optional)1920| Input | Type | Required | Notes |21|---|---|---|---|22| Dealpath normalized `deal` records | table | required | canonical shape from `normalized_contract.yaml` |23| Dealpath normalized `deal_key_date` records | table | required | LOI expiry, PSA expiry, DD period end, financing contingency, close target, tax lookback |24| Dealpath normalized `deal_milestone` records | table | required | closing-checklist milestones and contingency-removal evidence linkage |25| Closing-checklist template overlay | overlay | required | per-segment / per-deal-type rows; overlay carries `as_of_date` |26| Lender deliverable schedule | overlay | optional | per-lender requirements; falls back to overlay default |27| Escrow agent contact / SLA | overlay | optional | per-jurisdiction default; overlay-tunable |28| Legal entity setup status | reference | optional | signals readiness for funding; falls back to `not_started` warning |2930## Outputs3132| Output | Type | Shape |33|---|---|---|34| Per-deal closing dashboard | `kpi_review` | key dates, days remaining, status per row |35| Closing checklist with status | `checklist` | row, owner, due date, evidence, state (open / complete / waived / blocked) |36| Open-contingency list | `checklist` | contingency, evidence required, responsible party, deadline |37| Lender-deliverable scorecard | `kpi_review` | item, responsible, state, days to lender deadline |38| Escalation notices | `email_draft` | `draft_for_review`; to deal_team_lead / investments_lead when key date approaches |39| Closing-week dashboard | `kpi_review` | all deals within close_window_days; at-risk flags |40| Narrative memo (per deal) | `memo` | summary of what's open, what's cleared, next 72 hours |4142## Required context4344`asset_class=residential_multifamily`. Deal grain: either a single `deal_id` or a list of `deal_id`s within a portfolio or fund scope. `org_id` required for approval-threshold bands. Segment and form_factor used only for overlay selection (closing-checklist template varies by deal_type and segment). `jurisdiction` relevant for tax-lookback day count and legal-entity setup bands.4546## Process47481. **Freshness + DQ gate.** Evaluate Dealpath `dq_rules.yaml`. `dp_freshness_deals` blocker halts the run for affected deals. Log `dp_handoff_lag` warnings for recently closed deals.492. **Scope.** Resolve the deal list: either a named `deal_id`, all deals past `under_psa`, or all deals within the overlay-defined closing window.503. **Key-date countdown.** For each deal, pull every `deal_key_date` row. Compute `key_date_days_remaining` per row. Flag any date within the overlay alert band (yellow) or past date without recorded achievement (red).514. **Closing-checklist composition.** Load overlay-defined checklist template per deal type and segment. For each row, read Dealpath `deal_milestone` state; resolve to one of `open / complete / waived / blocked`. Attach evidence pointer when present; surface missing-evidence rows explicitly.525. **Contingency tracking.** Enumerate open contingencies with their evidence requirement and responsible party. For each, flag if past its removal deadline or if evidence is missing.536. **Escrow status.** Surface escrow account status (opened / funded / pending), earnest-money posted state, and any hold-back or reserve requirements. Defer to reference if the adapter does not carry it; surface the gap.547. **Lender deliverable tracking.** For each item on the lender schedule, resolve state from milestones and `deal_document` references. Compute `lender_deliverable_status_score` (overlay-defined).558. **Tax lookback + legal entity readiness.** Compute days remaining on tax lookback; flag legal entity setup status (warn if `not_started` past overlay band).569. **Closing certainty.** Composite `closing_certainty_score` from open-contingency count, key-date countdown, lender deliverable score, and escrow status. Overlay-tunable weighting. Publish with `proposed: true`.5710. **Escalation.** If any key date breach is imminent, any open contingency is past deadline, or any lender deliverable is blocked, compose escalation draft (`email_draft`, `draft_for_review`) to deal_team_lead and investments_lead.5811. **Price change / retrade screen.** If Dealpath records show a requested price adjustment, extension, or seller concession request, open a retrade line item and cross-link to `workflows/pipeline_review/` retrade list.5912. **Compose per-deal memo.** Three sections: (a) state of play, (b) what's open in the next 72 hours, (c) escalations sent / pending. Every claim cites a metric slug or evidence reference.6013. **Closing-week dashboard.** Roll all deals in `close_window_days` into one view; at-risk flags per deal; capital-funding sequence noted.6114. **Confidence banner.** Adapter `as_of_date`, overlay `status`, dq outcomes, any fallback behavior invoked.6263## Metrics used6465See frontmatter `metrics_used`. All metric slugs for this workflow are proposed (`proposed: true`) — no pre-close metric has landed in `_core/metrics.md` yet. Every output carries the `proposed` flag on each metric.6667## Reference files used6869- `reference/connectors/adapters/dealpath_deal_pipeline/normalized_contract.yaml`70- `reference/connectors/adapters/dealpath_deal_pipeline/dq_rules.yaml`71- `reference/connectors/deal_pipeline/schema.yaml`72- `reference/connectors/master_data/asset_crosswalk.yaml`73- `reference/normalized/approval_threshold_defaults.csv`74- `reference/normalized/close_calendar__portfolio.csv`7576## Escalation points7778- Key-date breach imminent (within overlay alert band): deal_team_lead -> investments_lead.79- Open contingency past deadline: deal_team_lead -> investments_lead -> asset_management_director.80- Lender deliverable blocked: deal_team_lead -> investments_lead -> finance_systems_team.81- Retrade / price-change request surfaced: deal_team_lead -> investments_lead -> executive.82- DQ blocker from Dealpath: data_platform_team -> investments_lead; affected deals paused.8384## Required approvals8586None for the tracking pack itself. Any closing-week action (PSA extension, deposit release, price adjustment, contingency waiver) opens its own `ApprovalRequest` via the originating workflow — this pack surfaces the gap but does not execute.8788## Failure modes89901. Marking a checklist row complete without evidence pointer. Fix: evidence required or row stays `open`.912. Using a closing-checklist template that does not match the deal type. Fix: overlay selection checks `deal_type` and `segment`; mismatch refused.923. Reporting `days_to_close` without surfacing imminent key-date breach. Fix: imminent breaches flagged before overall countdown is published.934. Silently defaulting escrow status when reference is absent. Fix: absent state surfaces as `unknown` with warning, not a clean status.945. Composing an escalation draft without `draft_for_review` tag. Fix: every email output carries `draft_for_review` until overlay permits auto-send.956. Claiming funding on partial closing (equity closed but debt pending). Fix: funding claimed only when both tranches record; split state reported explicitly.967. Surfacing contingency as `waived` without policy reference. Fix: waiver requires overlay policy reference and approval_request link.9798## Edge cases99100- **Stalled deal (post-PSA, no DD progress):** deal shows extended days in `under_dd` — flagged with owner and last activity; escalation draft composed.101- **Retrade request:** seller or buyer requests price adjustment after PSA — surfaced on retrade list with evidence pointer; cross-link to pipeline_review retrade screen.102- **Declined-then-resurrected deal:** deal previously dropped that returns to active — key-date countdown restarts from new LOI; prior-decision pointer retained.103- **Deal renamed after IC:** name change logged via `dp_renamed_after_approval`; closing checklist reads canonical `deal_id` regardless of display name.104- **Multi-asset deal (portfolio acquisition):** one deal, multiple target properties — closing checklist enumerates per-asset contingencies (title, survey, PCR, Phase I) while keeping single financing key dates.105- **Cross-fund allocation:** deal split across funds — capital sequence noted per fund; per-fund funding state tracked.106- **Debt market shift mid-close:** lender indicates term adjustment inside closing window — surface immediately; cross-link to pipeline_review debt variance and escalate.107- **Partial closing:** equity closes before debt (or vice versa) — two positions recorded; closing_certainty_score reflects the partial state; no "closed" claim until both record.108- **Condition unresolved at close (ic_approved pending conditions):** open condition within `resolution_deadline` — if deadline lapses before close, escalate per approval_matrix; block `closed` transition until resolved.109- **Late legal entity setup:** legal_entity_id not populated post-close beyond overlay lag — flagged as `dp_handoff_lag` warning; cross-link to acquisition_handoff when that workflow exists.110- **Escrow holdback:** reserved funds post-close (repairs, compliance, litigation) — tracked as a separate line item with release trigger.111112## Example invocations1131141. "Build the closing checklist snapshot for DP_DEAL_019. What's open this week?"1152. "Daily close tracking for all deals closing next week. Flag at-risk deals."1163. "Key-date countdown for DP_DEAL_022. Where are we on lender deliverables?"1174. "What contingencies are still open on DP_DEAL_004 and who owns each?"1185. "Draft an escalation to the investments lead — DD period ends tomorrow on DP_DEAL_027 and the roof scope is unresolved."119120## Example outputs121122See `examples/example_pre_close_deal_tracking_output.md` for the full artifact shape.123124### Output — Closing dashboard (abridged, DP_DEAL_019)125126**Deal.** DP_DEAL_019 — 248-unit garden acquisition, Charlotte, expected close 2026-04-22.127128**Key-date countdown.**129- LOI expiry: achieved 2026-02-10.130- PSA expiry: achieved 2026-03-05.131- DD period end: 2026-04-18 (3 business days remaining). Within alert band. Flag.132- Financing contingency: 2026-04-19 (4 business days remaining). Within alert band.133- Close target: 2026-04-22.134- Tax lookback: 2026-04-15 (today — compliant).135136**Open contingencies.** 3.137- Title commitment review: evidence pending; responsible L. Garcia; deadline 2026-04-17.138- Survey acceptance: evidence received; pending legal sign-off.139- Phase I ESA: cleared; evidence on file.140141**Lender deliverables.** 8 items; 6 complete, 2 pending (insurance binder, entity certificate of good standing). `lender_deliverable_status_score` = 0.75 (proposed). Within overlay band but trending tight.142143**Escrow.** Earnest money posted; final deposit required by 2026-04-21.144145**Closing certainty.** `closing_certainty_score` = 0.82 (proposed). On track conditional on title commitment review by 2026-04-17.146147**Escalation.** Draft composed (`draft_for_review`) to deal_team_lead: title commitment review flag.148149**Confidence banner.** `dealpath_deal_pipeline@2026-04-15 (sample)`, `close_calendar__portfolio@2026-03-31 (starter)`, `approval_threshold_defaults@2026-03-31 (starter)`.