Postcard compose: mailing list or PCM carrier-route pick-and-send with cost #11

Closed
opened 2026-09-21 11:25:00 -07:00 by westfarn · 2 comments
Owner

Goal

Mirror monica_site postcard easy pick-and-send in this template (directmail app): on postcard compose, user chooses mailing-list contacts or 1–2 USPS carrier routes, with piece count + estimated cost visible before save/send.

Not official USPS EDDM. PCM First Class / Standard to a purchased occupant list on selected carrier routes.

Related product ticket: (will comment with ai_ml_operations/monica_site issue after it exists).

UX (Portal → Direct mail / postcard compose)

Same as monica:

  • Recipients: mailing list or find carrier routes.
  • ZIP (optional address + radius) → PCM ZipCRRT breakdown.
  • Select one or two routes; show $ per route and selected total (required).
  • Recount selected routes (POST /list/count/carrier-route) so listCountID is only those routes.
  • Mailing-list postcard also shows estimated cost.

Cost source

PCM design pricing[]; fallback PCM_POSTCARD_PRICE_FIRSTCLASS / PCM_POSTCARD_PRICE_STANDARD. Standard mail class unless size is 46/46S. Default list type IRL.

Data / send

  • Audience carrier_route on directmail.Campaign.
  • Persist targeting JSON (listCountID, routes, quote).
  • Do not import purchased occupants into Contacts.
  • Send via POST /order/postcard/with-list-count.
  • Report shows routes + cost, not a fake recipient grid.

Keep template patterns: directmail app (not messaging), existing PCM adapter, portal CSS.

Test plan

Same as monica, under directmail tests:

  • Mailing-list postcard draft unchanged + cost shown.
  • Route lookup/select/recount mocked.
  • Draft persists quote; send hits with-list-count once.
  • Email/SMS apps unaffected.
## Goal Mirror monica_site postcard **easy pick-and-send** in this template (`directmail` app): on postcard compose, user chooses **mailing-list contacts** *or* **1–2 USPS carrier routes**, with **piece count + estimated cost** visible before save/send. Not official USPS EDDM. PCM First Class / Standard to a purchased occupant list on selected carrier routes. Related product ticket: (will comment with `ai_ml_operations/monica_site` issue after it exists). ## UX (Portal → Direct mail / postcard compose) Same as monica: - Recipients: mailing list **or** find carrier routes. - ZIP (optional address + radius) → PCM ZipCRRT breakdown. - Select one or two routes; **show $ per route and selected total** (required). - Recount selected routes (`POST /list/count/carrier-route`) so `listCountID` is only those routes. - Mailing-list postcard also shows estimated cost. ## Cost source PCM design `pricing[]`; fallback `PCM_POSTCARD_PRICE_FIRSTCLASS` / `PCM_POSTCARD_PRICE_STANDARD`. Standard mail class unless size is `46`/`46S`. Default list type `IRL`. ## Data / send - Audience `carrier_route` on `directmail.Campaign`. - Persist targeting JSON (`listCountID`, routes, quote). - Do not import purchased occupants into Contacts. - Send via `POST /order/postcard/with-list-count`. - Report shows routes + cost, not a fake recipient grid. Keep template patterns: `directmail` app (not `messaging`), existing PCM adapter, portal CSS. ## Test plan Same as monica, under `directmail` tests: - [ ] Mailing-list postcard draft unchanged + cost shown. - [ ] Route lookup/select/recount mocked. - [ ] Draft persists quote; send hits with-list-count once. - [ ] Email/SMS apps unaffected.
Author
Owner

Associated product ticket: ai_ml_operations/monica_site#15

Associated product ticket: https://git.aimloperations.com/ai_ml_operations/monica_site/issues/15
Author
Owner
PR: https://git.aimloperations.com/westfarn/web_django_template/pulls/12 Monica mirror: https://git.aimloperations.com/ai_ml_operations/monica_site/issues/15 → https://git.aimloperations.com/ai_ml_operations/monica_site/pulls/16
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: westfarn/web_django_template#11