@1aboveio/skills 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/.codex-plugin/resources.json +297 -216
- package/README.md +3 -3
- package/package.json +10 -8
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-foundation/SKILL.md +35 -37
- package/skills/app-dev/android-foundation/references/delivery-focus.md +4 -2
- package/skills/app-dev/android-foundation/references/feature-work.md +50 -0
- package/skills/app-dev/android-foundation/references/setup.md +24 -9
- package/skills/app-dev/android-foundation/references/workspace.md +81 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/app-dev/app-debug/SKILL.md +1 -1
- package/skills/app-dev/better-auth/SKILL.md +1 -1
- package/skills/app-dev/data-catalog/SKILL.md +1 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/SKILL.md +15 -10
- package/skills/app-dev/ios-foundation/references/setup.md +25 -9
- package/skills/app-dev/ios-foundation/references/workspace.md +82 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/app-dev/monorepo/SKILL.md +1 -1
- package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
- package/skills/app-dev/prisma-setup/SKILL.md +1 -1
- package/skills/app-dev/pyspark/SKILL.md +1 -1
- package/skills/app-dev/python-backend/SKILL.md +1 -1
- package/skills/app-dev/shadcn/SKILL.md +1 -1
- package/skills/app-dev/zod-v4/SKILL.md +1 -1
- package/skills/cicd/cloud-build/SKILL.md +1 -1
- package/skills/cicd/cloud-debug/SKILL.md +1 -1
- package/skills/cicd/cloud-deploy/SKILL.md +1 -1
- package/skills/cicd/docker/SKILL.md +1 -1
- package/skills/cicd/github-actions/SKILL.md +1 -1
- package/skills/cicd/github-flow/SKILL.md +1 -1
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/mergify/SKILL.md +1 -1
- package/skills/cicd/podman/SKILL.md +1 -1
- package/skills/content/article-review/SKILL.md +1 -1
- package/skills/content/article-to-image/SKILL.md +1 -1
- package/skills/content/flowchart-svg/SKILL.md +1 -1
- package/skills/content/image-gen/SKILL.md +1 -1
- package/skills/content/mermaid/SKILL.md +1 -1
- package/skills/content/wechat-article-writer/SKILL.md +1 -1
- package/skills/content/wechat-publisher/SKILL.md +1 -1
- package/skills/content/wechat-search/SKILL.md +1 -1
- package/skills/content/xai-search/SKILL.md +1 -1
- package/skills/core/distill-writing/SKILL.md +3 -3
- package/skills/core/distill-writing/references/extraction.md +1 -1
- package/skills/core/doc-to-md/SKILL.md +1 -1
- package/skills/core/editorial-review/SKILL.md +82 -12
- package/skills/core/editorial-review/references/checklist.md +26 -1
- package/skills/core/house-style/SKILL.md +8 -3
- package/skills/core/house-style/references/analytical-reporting.md +123 -0
- package/skills/core/house-style/references/analytical-writing-patterns.md +79 -0
- package/skills/core/house-style/references/analytical-writing-research.md +129 -0
- package/skills/core/{write-doc → house-style}/references/bilingual.md +7 -5
- package/skills/core/house-style/references/definitions-and-metrics.md +86 -0
- package/skills/core/house-style/references/document-workflow.md +193 -0
- package/skills/core/house-style/references/initialization.md +66 -0
- package/skills/core/house-style/references/persistence.md +9 -4
- package/skills/core/house-style/references/rules.md +11 -4
- package/skills/core/house-style/scripts/init-guidance.mjs +213 -0
- package/skills/core/house-style/templates/analytical-report.md +54 -0
- package/skills/core/house-style/templates/gap-analysis.md +1 -1
- package/skills/core/plain-language/SKILL.md +2 -2
- package/skills/core/polish-cn/SKILL.md +9 -2
- package/skills/core/reg-parser/SKILL.md +3 -3
- package/skills/core/terminology/SKILL.md +8 -4
- package/skills/core/write-doc/SKILL.md +40 -151
- package/skills/core/write-report/SKILL.md +129 -0
- package/skills/core/{write-doc → write-report}/references/compliance-reports.md +4 -4
- package/skills/engineering/better-review/SKILL.md +37 -37
- package/skills/engineering/better-review/references/passes.md +35 -41
- package/skills/engineering/better-review/references/result.md +10 -9
- package/skills/engineering/e2e-test/SKILL.md +17 -17
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +11 -13
- package/skills/engineering/e2e-test/references/presentation-sweep.md +7 -7
- package/skills/engineering/e2e-test/references/reviewing.md +9 -11
- package/skills/engineering/e2e-test/references/route-manifest.md +1 -1
- package/skills/engineering/engineering/SKILL.md +124 -0
- package/skills/engineering/engineering/references/engineering-conventions.md +32 -0
- package/skills/engineering/engineering/references/feature-delivery.md +8 -0
- package/skills/engineering/engineering/references/init-scope.md +37 -0
- package/skills/engineering/engineering/scripts/init.mjs +160 -0
- package/skills/engineering/{contributing → engineering}/scripts/persist-conventions.mjs +1 -1
- package/skills/engineering/engineering-runtime/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +19 -19
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
- package/skills/engineering/ensure-coverage/SKILL.md +22 -109
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +7 -5
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +4 -4
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +3 -3
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +4 -65
- package/skills/engineering/ensure-coverage/references/depth/grading.md +5 -7
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +6 -12
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +1 -1
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +6 -6
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +7 -23
- package/skills/engineering/ensure-coverage/references/process/output-template.md +18 -133
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +7 -12
- package/skills/engineering/ensure-coverage/scripts/README.md +12 -4
- package/skills/engineering/golden-path/SKILL.md +1 -1
- package/skills/engineering/harness-runtime/SKILL.md +3 -1
- package/skills/engineering/harness-runtime/bin/workspaces.mjs +52 -0
- package/skills/engineering/harness-runtime/native-workspace.mjs +239 -0
- package/skills/engineering/harness-runtime/references/workspaces.md +78 -0
- package/skills/engineering/harness-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/engineering/resolve-issues/SKILL.md +40 -61
- package/skills/engineering/resolve-issues/references/ci.md +13 -3
- package/skills/engineering/resolve-issues/references/delivery-progress.md +4 -3
- package/skills/engineering/resolve-issues/references/done.md +11 -2
- package/skills/engineering/resolve-issues/references/expire.md +9 -2
- package/skills/engineering/resolve-issues/references/implementation.md +33 -17
- package/skills/engineering/resolve-issues/references/preflight.md +3 -1
- package/skills/engineering/resolve-issues/references/principles.md +52 -0
- package/skills/engineering/resolve-issues/references/review.md +25 -15
- package/skills/engineering/resolve-issues/references/task-plan.md +64 -27
- package/skills/engineering/resolve-issues/references/workspaces.md +164 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +185 -317
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +44 -7
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +36 -2
- package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +9 -8
- package/skills/engineering/resolve-issues/scripts/workspace-lifecycle.mjs +1 -0
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- package/skills/engineering/rush-issues/SKILL.md +7 -5
- package/skills/engineering/rush-release/SKILL.md +1 -1
- package/skills/engineering/test-quality/SKILL.md +19 -4
- package/skills/engineering/test-quality/references/lint.md +1 -1
- package/skills/engineering/test-quality/references/principles.md +2 -2
- package/skills/engineering/test-quality/references/testing-conventions.md +1 -1
- package/skills/risk-compliance/compliance-audit/SKILL.md +4 -8
- package/skills/risk-compliance/compliance-audit/references/audience-and-reports.md +12 -0
- package/skills/risk-compliance/contract-compare/SKILL.md +17 -1
- package/skills/risk-compliance/contract-review/SKILL.md +6 -1
- package/skills/risk-compliance/contract-review/references/report-stage.md +17 -0
- package/skills/risk-compliance/doc-authenticity/SKILL.md +11 -1
- package/skills/risk-compliance/fraud-detection/LICENSE +3 -0
- package/skills/risk-compliance/fraud-detection/SKILL.md +148 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/first-party-fraud.md +3 -2
- package/skills/risk-compliance/fraud-detection/references/archetypes/third-party-fraud.md +47 -0
- package/skills/risk-compliance/fraud-detection/references/collection-payout-features.md +151 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/contexts/bank-transfer.md +4 -3
- package/skills/risk-compliance/fraud-detection/references/contexts/card-payment.md +70 -0
- package/skills/risk-compliance/fraud-detection/references/contexts/payment-collection.md +34 -0
- package/skills/risk-compliance/fraud-detection/references/contexts/payout.md +34 -0
- package/skills/risk-compliance/fraud-detection/references/enrichment.md +74 -0
- package/skills/risk-compliance/fraud-detection/references/entities.md +48 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/feature-engineering.md +69 -33
- package/skills/risk-compliance/fraud-detection/references/feature-sql.md +150 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-rationale.md +4 -2
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-template.md +45 -23
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/review-checklist.md +60 -20
- package/skills/risk-compliance/fraud-detection/references/workflow.md +216 -0
- package/skills/risk-compliance/fraud-detection/release-check.mjs +95 -0
- package/skills/risk-compliance/payment-analysis/SKILL.md +36 -17
- package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +2 -2
- package/skills/risk-compliance/payment-analysis/references/report-template.md +10 -2
- package/skills/risk-compliance/payment-analysis/references/visualization.md +11 -1
- package/skills/risk-compliance/portfolio-payment-analysis/LICENSE +3 -0
- package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +170 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/identity-and-reconciliation.md +46 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/metrics-and-reporting.md +170 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/risk-history.md +89 -0
- package/skills/risk-compliance/portfolio-payment-analysis/release-check.mjs +95 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/analyze.py +636 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/build_report.py +386 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/comparison_charts.py +425 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/csv_export.py +52 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/render.py +160 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/risk_history.py +435 -0
- package/skills/risk-compliance/similar-domain/SKILL.md +9 -4
- package/skills/risk-compliance/tld-detection/SKILL.md +124 -239
- package/skills/risk-compliance/tld-detection/agents/openai.yaml +1 -1
- package/skills/risk-compliance/tld-detection/references/clean.md +18 -51
- package/skills/risk-compliance/tld-detection/references/fx-conversion.md +56 -219
- package/skills/risk-compliance/tld-detection/references/metric-contract.md +109 -0
- package/skills/risk-compliance/tld-detection/references/pattern.md +99 -0
- package/skills/risk-compliance/tld-detection/references/report-template.md +49 -272
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +46 -13
- package/skills/risk-compliance/tld-detection/scripts/detect_patterns.py +346 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +51 -19
- package/skills/risk-compliance/tld-detection/scripts/profile_groups.py +109 -0
- package/skills/risk-compliance/tld-detection/scripts/render_charts.py +218 -0
- package/skills/risk-compliance/tld-detection/scripts/tld_common.py +243 -0
- package/skills/engineering/contributing/SKILL.md +0 -70
- package/skills/risk-compliance/fraud-analysis/SKILL.md +0 -114
- package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +0 -27
- package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +0 -30
- package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +0 -20
- package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +0 -20
- package/skills/risk-compliance/fraud-analysis/references/workflow.md +0 -175
- package/skills/risk-compliance/tld-detection/references/chinese-polish.md +0 -55
- package/skills/risk-compliance/tld-detection/references/clustering.md +0 -235
- package/skills/risk-compliance/tld-detection/references/decision.md +0 -189
- package/skills/risk-compliance/tld-detection/references/streams.md +0 -141
- package/skills/risk-compliance/tld-detection/references/terminology.md +0 -95
- package/skills/risk-compliance/tld-detection/references/workflow.md +0 -95
- /package/skills/{engineering/contributing → core/write-report}/LICENSE +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/audit-report-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/external-assessment-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/management-report-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/vars-report-template.md +0 -0
- /package/skills/{engineering/contributing → core/write-report}/release-check.mjs +0 -0
- /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/LICENSE +0 -0
- /package/skills/engineering/{contributing → engineering}/references/tracker-conventions.md +0 -0
- /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/release-check.mjs +0 -0
- /package/skills/engineering/{contributing → engineering}/scripts/persist-conventions-core.mjs +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/authorized-payment-scam.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/mechanisms/account-takeover.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/taxonomy.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/terminology.md +0 -0
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# Risk decision
|
|
2
|
-
|
|
3
|
-
After currency-amount-pair detection and same-descriptor baseline comparison,
|
|
4
|
-
assign investigation-priority risk tiers. This is prioritization, not a finding
|
|
5
|
-
that transaction laundering occurred.
|
|
6
|
-
|
|
7
|
-
## Eligibility versus risk
|
|
8
|
-
|
|
9
|
-
The cluster gate (at least three theoretical levels, fixed 2x adjacency, at
|
|
10
|
-
least 100 exact-member attempts) determines which currency-amount pairs enter
|
|
11
|
-
the result. Passing that gate does not by itself determine High, Medium, or Low
|
|
12
|
-
risk.
|
|
13
|
-
|
|
14
|
-
Risk uses independent post-membership evidence:
|
|
15
|
-
|
|
16
|
-
- structural strength beyond the minimum, such as a fourth or later level
|
|
17
|
-
- cluster share of its descriptor
|
|
18
|
-
- authorization-success and suspected-fraud differences versus the same-
|
|
19
|
-
descriptor baseline
|
|
20
|
-
- issuing-bank differences versus that baseline
|
|
21
|
-
- transaction-date and BIN-country-local-hour differences versus that baseline
|
|
22
|
-
- externally evidenced MCC or merchant-business mismatch; never infer this
|
|
23
|
-
from a suggestive descriptor name alone
|
|
24
|
-
- payment-pattern evidence from [streams.md](streams.md), treated as separate
|
|
25
|
-
observations with known coverage and inference limits: unexpected inferred
|
|
26
|
-
pricing currency, tested source-to-top-up rate stability, low repeat-card or
|
|
27
|
-
decline-retry activity, and concentrated dates/hours. Do not count a business
|
|
28
|
-
hypothesis itself or correlated measurements as independent corroboration.
|
|
29
|
-
|
|
30
|
-
Declare portfolio-specific thresholds for a materially different rate,
|
|
31
|
-
distribution, or descriptor share in the run methodology before assigning
|
|
32
|
-
risk. Do not invent universal cutoffs after seeing the results.
|
|
33
|
-
|
|
34
|
-
## BIN-country evidence
|
|
35
|
-
|
|
36
|
-
BIN country is post-membership evidence, not a partition, membership key, or
|
|
37
|
-
veto. Pattern inference can use country to propose pricing currencies but
|
|
38
|
-
cannot filter canonical members. Measure any canonical single-country
|
|
39
|
-
concentration on the complete descriptor/currency/amount membership, never
|
|
40
|
-
on a country-selected pattern slice as independent risk evidence. `Mixed` is neutral and must never reduce a risk tier by itself.
|
|
41
|
-
|
|
42
|
-
For every Top 3 cluster BIN country, report both conditional views:
|
|
43
|
-
|
|
44
|
-
```text
|
|
45
|
-
cluster composition = cluster attempts in country / all cluster attempts
|
|
46
|
-
country-slice coverage = cluster attempts in country /
|
|
47
|
-
all attempts in the same descriptor and country
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
An exact **100% single-BIN-country cluster** is a standout characteristic in the canonical original-currency run. In the BIN-country base-currency sensitivity, BIN country constructs the target currency and is therefore not independent evidence; report 100% concentration descriptively but do not use it to raise the FX risk tier.
|
|
51
|
-
Country-slice coverage explains how large that concentration is inside the
|
|
52
|
-
descriptor-country population, but it has no fixed threshold and contributes
|
|
53
|
-
no independent risk points. Values such as 20% or 33.8% are descriptive, not
|
|
54
|
-
self-interpreting risk signals. Any value below 100% is not promoted merely
|
|
55
|
-
because it is numerically high.
|
|
56
|
-
|
|
57
|
-
## Risk tiers
|
|
58
|
-
|
|
59
|
-
Assign exactly one tier to every identified currency-amount pair:
|
|
60
|
-
|
|
61
|
-
| Tier | Use when |
|
|
62
|
-
|---|---|
|
|
63
|
-
| High | In the canonical run, an exact 100% single-country standout has at least one independent corroborating risk characteristic, or several independently strong non-country characteristics converge; FX concentration cannot raise tier |
|
|
64
|
-
| Medium | At least two independent characteristics materially differ from the same-descriptor baseline, but High is not justified |
|
|
65
|
-
| Low | The structural cluster gate is met, but observed corroborating evidence is limited or not material |
|
|
66
|
-
|
|
67
|
-
Do not use a generic 0–100 score unless the business has approved and calibrated
|
|
68
|
-
its weights and cutoffs. Missing fields reduce confidence and must be disclosed;
|
|
69
|
-
they are not evidence that risk is Low.
|
|
70
|
-
|
|
71
|
-
Sort report results `High → Medium → Low`. Within a tier, sort by the number and
|
|
72
|
-
magnitude of independently supported characteristics, then by exact-member
|
|
73
|
-
attempts. Preserve stable cluster IDs when sorting an existing result.
|
|
74
|
-
|
|
75
|
-
## Reader-facing conclusion
|
|
76
|
-
|
|
77
|
-
Write for a payment-risk operator, not the detector's implementer. The reader
|
|
78
|
-
must understand who to review first, why, what remains unknown, and what to
|
|
79
|
-
check next without opening the methodology or decoding cluster IDs.
|
|
80
|
-
|
|
81
|
-
Begin each main report with one short decision summary, followed by Main
|
|
82
|
-
findings and Next checks. Do not repeat a closing Verdict. Keep exhaustive
|
|
83
|
-
cluster profiles and exposure tables in linked evidence. Use the same
|
|
84
|
-
evidence-first approach in the final chat handoff.
|
|
85
|
-
|
|
86
|
-
The summary is at most three short sentences, each with one main point.
|
|
87
|
-
Prioritize evidence, not descriptor volume alone; if no defensible priority
|
|
88
|
-
exists, say so instead of forcing a target. Pattern labels are hypotheses:
|
|
89
|
-
|
|
90
|
-
1. Name the first investigation target and the relevant time window; state
|
|
91
|
-
the highest detected-cluster tier when one exists. Use the exact descriptor
|
|
92
|
-
to locate the activity, not as proof of a verified merchant identity.
|
|
93
|
-
2. Give the strongest observed reason in plain language, using only one or
|
|
94
|
-
two essential figures. Explain why that observation warrants review.
|
|
95
|
-
3. State what the data cannot establish, including that investigation priority
|
|
96
|
-
is not confirmation of transaction laundering.
|
|
97
|
-
|
|
98
|
-
The three-sentence limit applies to the summary, not the entire report.
|
|
99
|
-
For a Chinese summary, keep each sentence within 80 characters and use at
|
|
100
|
-
most two numerical facts across the whole summary, excluding its date window
|
|
101
|
-
and identifiers. Move amounts, percentages,
|
|
102
|
-
source/target currencies, thresholds, and technical labels to the explanation
|
|
103
|
-
unless essential to the immediate business takeaway. Do not join many clauses
|
|
104
|
-
with semicolons to squeeze a data inventory into it. Keep full anchor lists,
|
|
105
|
-
cluster IDs, and by-tier exposure in supporting tables.
|
|
106
|
-
|
|
107
|
-
Preserve the supplied fact scope: bind every figure to its stated descriptor,
|
|
108
|
-
period, numerator, denominator, and metric. If any is missing, mark it unknown;
|
|
109
|
-
do not resolve ambiguity by borrowing a nearby period or population. Never
|
|
110
|
-
translate an authorization decline as a chargeback (`拒付`). Small samples
|
|
111
|
-
limit generalization; their observed rates still describe those samples and
|
|
112
|
-
must not be dismissed as meaningless. `Other pattern` can mean insufficient
|
|
113
|
-
evidence: do not assert that a menu or e-commerce test failed, or that fields
|
|
114
|
-
are missing, unless the run actually records that reason.
|
|
115
|
-
|
|
116
|
-
### Supporting explanation
|
|
117
|
-
|
|
118
|
-
Use Main findings and Next checks for the supporting explanation. Within each
|
|
119
|
-
finding, present observed evidence first, then the supported pattern hypothesis
|
|
120
|
-
and uncertainty, then its relationship to formal amount clusters. Only give
|
|
121
|
-
intersection counts supported by saved row-level reconciliation. A preset menu
|
|
122
|
-
can contain non-doubling prices; the three-level, fixed-2x, 100-attempt gate
|
|
123
|
-
belongs to formal clusters, not to every top-up hypothesis.
|
|
124
|
-
|
|
125
|
-
Use short subsections or bullets as needed:
|
|
126
|
-
|
|
127
|
-
- **Who and why:** pair each prioritized descriptor's concrete observation
|
|
128
|
-
with its business meaning and an unresolved question. Different amount or
|
|
129
|
-
card-country patterns can justify checking whether several businesses share
|
|
130
|
-
a billing name; they do not prove that they do.
|
|
131
|
-
- **What detection found:** report qualifying clusters and exact-member exposure
|
|
132
|
-
by tier with explicit denominators, or zero qualifying clusters and zero
|
|
133
|
-
identified-cluster exposure. Explain the tested pattern in ordinary words:
|
|
134
|
-
repeated amounts with a fixed doubling relationship and sufficient attempts.
|
|
135
|
-
Explain stream observations separately; the exact-amount test is not the
|
|
136
|
-
whole analysis.
|
|
137
|
-
- **What to check next:** name specific observed orders or activity to reconcile
|
|
138
|
-
with products, websites, actual sellers, or fulfillment records. These are
|
|
139
|
-
bounded evidence-gathering suggestions, not findings or enforcement commands.
|
|
140
|
-
Do not claim those records were inspected when they were not.
|
|
141
|
-
|
|
142
|
-
Use only evidence already established in the report. If evidence cannot support
|
|
143
|
-
prioritizing a target or naming a useful follow-up, say so rather than inventing
|
|
144
|
-
one. Do not recommend filing a SAR, terminating a merchant, or correcting an MCC.
|
|
145
|
-
|
|
146
|
-
### No qualifying cluster and period focus
|
|
147
|
-
|
|
148
|
-
No qualifying cluster means the tested pattern did not meet this run's gates,
|
|
149
|
-
not that the merchant is safe or all suspicious activity was excluded. State
|
|
150
|
-
this plainly, especially below 100 attempts. Keep descriptor-level investigation
|
|
151
|
-
leads separate from formal cluster tiers and cluster exposure; do not assign
|
|
152
|
-
a High/Medium/Low cluster tier to an unqualified lead. Missing fields and small
|
|
153
|
-
samples constrain interpretation; they are not evidence of Low risk.
|
|
154
|
-
Do not reclassify e-commerce or other-pattern rows as top-ups merely by obtaining
|
|
155
|
-
their charge currency. Direct versus FX-converted is a subtype distinction only
|
|
156
|
-
after a supported preset-menu hypothesis exists for those rows.
|
|
157
|
-
|
|
158
|
-
For a month or active-merchant focus, lead with activity observed in that window.
|
|
159
|
-
Separate historical findings, historical members' current-period slices, and
|
|
160
|
-
independent current-period detection. No observed activity in the supplied files
|
|
161
|
-
does not prove a business stopped operating. Never carry historical tier or
|
|
162
|
-
exposure into the current period without current-period evidence. Keep canonical
|
|
163
|
-
and FX findings separate.
|
|
164
|
-
|
|
165
|
-
### Chinese readability
|
|
166
|
-
|
|
167
|
-
Introduce a descriptor as `账单名称`, retaining its exact value. Explain BIN
|
|
168
|
-
country as where the card was issued, not customer location. Explain suspected-
|
|
169
|
-
fraud rates as the share of authorization attempts declined with a suspected-
|
|
170
|
-
fraud response, not confirmed fraud. Define the baseline as the relevant remaining
|
|
171
|
-
attempts using the same-descriptor scope. A pattern-only comparison must be
|
|
172
|
-
labeled separately and cannot replace the canonical cluster baseline.
|
|
173
|
-
|
|
174
|
-
Do not use `敞口`, `精确成员`, `canonical`, `FXC*`, `menu-12 frozen`, or
|
|
175
|
-
`standout` as a substitute for explaining the conclusion. Keep technical labels
|
|
176
|
-
in supporting tables and methods. Explain the relevance of selected statistics;
|
|
177
|
-
keep hypotheses as questions, not facts.
|
|
178
|
-
|
|
179
|
-
Use the approved payment-pattern names from [terminology.md](terminology.md).
|
|
180
|
-
Direct/FX-converted top-up and e-commerce names remain hypotheses, not verified
|
|
181
|
-
business facts. Explain inferred top-up versus actual charge currencies; fixed
|
|
182
|
-
amounts are supplementary, not a separate business class.
|
|
183
|
-
|
|
184
|
-
Read back the conclusion without its tables. If who to review, why, and what
|
|
185
|
-
is unknown are still unclear, rewrite during `editorial-review`, before `polish-cn`.
|
|
186
|
-
Polishing cannot repair missing analytical explanation.
|
|
187
|
-
|
|
188
|
-
First use of TLD is “transaction laundering (TLD)”. Proofread with
|
|
189
|
-
[terminology.md](terminology.md).
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
# Payment-pattern inference
|
|
2
|
-
|
|
3
|
-
Run after cleaning and before canonical descriptor-local clustering. Reader-facing
|
|
4
|
-
reports call this **Payment patterns / 收款模式**, not upstream streams. A
|
|
5
|
-
billing descriptor is not a verified merchant identity; different patterns do
|
|
6
|
-
not prove that several businesses, websites, or cashiers share it.
|
|
7
|
-
|
|
8
|
-
Patterns are descriptive hypotheses. Canonical clustering runs on every cleaned
|
|
9
|
-
authorization in each descriptor, with exact original currency and amount keys.
|
|
10
|
-
Do not split, filter, or reassign canonical members by inferred pattern or BIN
|
|
11
|
-
country. The cluster baseline is the whole descriptor minus that cluster.
|
|
12
|
-
Pattern-specific behavior can be shown separately, with its population stated;
|
|
13
|
-
it must not replace this baseline or become a cluster tier of its own.
|
|
14
|
-
|
|
15
|
-
## Business names
|
|
16
|
-
|
|
17
|
-
| Report name | Chinese | Evidence and limits |
|
|
18
|
-
|---|---|---|
|
|
19
|
-
| Direct top-up pattern | 直接充值模式 | A supported preset menu whose inferred top-up currency equals the actual charge currency |
|
|
20
|
-
| FX-converted top-up pattern | 换汇充值模式 | A supported preset menu in an inferred top-up currency different from the actual charge currency |
|
|
21
|
-
| E-commerce pattern / Retail pattern | 电商模式 | Several distinct amounts resembling product list prices, possibly multiplied by one constant; actual goods and fulfillment remain unverified |
|
|
22
|
-
| Other pattern | 其他模式 | No supported preset menu or e-commerce fit, insufficient sample, or ambiguous evidence; not evidence of low risk |
|
|
23
|
-
|
|
24
|
-
For top-up hypotheses, show **inferred top-up currency / 推断充值币种** separately
|
|
25
|
-
from **charge currency / 扣款币种**, which comes from the authorization file.
|
|
26
|
-
The script's `wallet` is the inferred top-up currency, not an observed wallet
|
|
27
|
-
balance. BIN-country legal tender is only one candidate, never proof of wallet
|
|
28
|
-
currency or customer location. Distinguish direct versus FX-converted top-ups
|
|
29
|
-
only after a supported preset-menu hypothesis exists for the same rows. Charge
|
|
30
|
-
currency alone cannot turn e-commerce or other rows into top-ups. Single versus
|
|
31
|
-
multiple currencies is an attribute, not the direct/FX distinction.
|
|
32
|
-
|
|
33
|
-
Examples: USD 10/20/50 presets charged in USD are direct; EUR 10/20/50 presets
|
|
34
|
-
charged in USD are FX-converted. EUR and GBP presets both charged in USD are
|
|
35
|
-
multiple inferred top-up currencies within the FX-converted category. If one
|
|
36
|
-
inferred EUR menu includes EUR and USD charges, report the direct and converted
|
|
37
|
-
parts separately with counts; do not label all rows direct or all converted.
|
|
38
|
-
These display subdivisions do not change canonical detection.
|
|
39
|
-
|
|
40
|
-
Fixed amounts / 定额 are a supplementary pricing characteristic, not a
|
|
41
|
-
fifth mutually exclusive business pattern. The display flags exact charge
|
|
42
|
-
amounts observed on at least two distinct dates within the same charge currency;
|
|
43
|
-
it does not claim all amounts or daily modes are fixed. Both top-ups and
|
|
44
|
-
e-commerce can have fixed amounts. Same-currency fixed prices do not demonstrate frozen FX. Do not
|
|
45
|
-
rename fixed amounts as batch, bot, generated traffic, or fraud without separate
|
|
46
|
-
supporting evidence. Every business name is an inferred hypothesis, not a
|
|
47
|
-
verified business identity.
|
|
48
|
-
|
|
49
|
-
## Script and raw labels
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
python3 {baseDir}/scripts/detect_streams.py cleaned-authorizations.csv \
|
|
53
|
-
--rates rates_cache.json --fetch-rates 2026-07-01 2026-08-31 \
|
|
54
|
-
--amount-column amount --currency-column currency --date-column timestamp \
|
|
55
|
-
--descriptor-column descriptor --bin-country-column bin_country \
|
|
56
|
-
--response-column response --approval-values A001 --suspected-fraud-values D102 \
|
|
57
|
-
--account-column account --card-type-column card_type --avs-column avs --auth-column auth \
|
|
58
|
-
--output streams.json --markdown streams.md
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Keep script filenames and existing raw `stream` fields for compatibility. A
|
|
62
|
-
`<CCY> menu-10` or `menu-12` label with supported scheme coverage supplies a
|
|
63
|
-
top-up hypothesis; determine direct/converted per actual charge currency, not
|
|
64
|
-
from the raw name or country. `menu-none` lacks a supported preset menu and is
|
|
65
|
-
reported as Other unless separately verified evidence supports a more specific
|
|
66
|
-
interpretation. `retail x<k>` maps to E-commerce; `off-menu` and `small groups`
|
|
67
|
-
map to Other. Keep the raw label in methodology or audit detail, not as the
|
|
68
|
-
reader's explanation.
|
|
69
|
-
|
|
70
|
-
`frozen` is a supplementary rate-consistency test result, not a business class.
|
|
71
|
-
The raw `live` label means only that the frozen condition was not met; it may
|
|
72
|
-
include insufficient day coverage or same-currency charges. Check the detail's
|
|
73
|
-
tested attempts, days, source currency, and actual cross-rate movement before
|
|
74
|
-
claiming floating or fixed conversion. Report untested evidence as unknown.
|
|
75
|
-
|
|
76
|
-
## FX cache
|
|
77
|
-
|
|
78
|
-
`--rates` is a daily cache `{base, rates:{YYYY-MM-DD:{CCY:rate}}}` quoted as
|
|
79
|
-
units per one base unit; `--fetch-rates` uses Frankfurter v1 for discovery.
|
|
80
|
-
Search backward from the actual transaction date, at most seven days by default.
|
|
81
|
-
Do not use future or over-age rates. Missing rates must be reported and cannot
|
|
82
|
-
be silently replaced by cache endpoints. `rates_carried_days` counts successful
|
|
83
|
-
carry lookups by currency, not distinct days or transactions. Peg assumptions
|
|
84
|
-
(SAR, AED, QAR, KWD, BHD, OMR, HKD) are built in; record their use.
|
|
85
|
-
|
|
86
|
-
This discovery cache is separate from the Frankfurter v2 exact-date contract in
|
|
87
|
-
[fx-conversion.md](fx-conversion.md). Missing discovery coverage does not remove
|
|
88
|
-
rows from the canonical cleaned universe.
|
|
89
|
-
|
|
90
|
-
## Detection detail
|
|
91
|
-
|
|
92
|
-
Per descriptor and BIN-country group (default at least 80 attempts):
|
|
93
|
-
|
|
94
|
-
1. Strong retail test: search a constant in 1.00 to 1.15 under which at least
|
|
95
|
-
30% of amounts resemble list prices (`x.99`, `x.95`, `x.98`, `x.00`), with
|
|
96
|
-
at least eight distinct base prices, against jittered controls. The fitted
|
|
97
|
-
constant is descriptive; it does not establish a tax, fee, markup, or fraud.
|
|
98
|
-
2. For each candidate top-up currency (card-country legal tender, EUR, USD,
|
|
99
|
-
GBP, CHF), convert amounts using the day's source-to-candidate cross-rate;
|
|
100
|
-
find peaks within 1.2% and measure top-ten coverage, jittered control, and
|
|
101
|
-
daily median drift. Acceptance uses the configured coverage and excess
|
|
102
|
-
thresholds, or the lower coverage threshold with a supported preset scheme.
|
|
103
|
-
3. Match peaks within 1.5% to the 10- or 12-scheme and supported scales. On-menu
|
|
104
|
-
rows form a descriptive group; other rows remain available for further
|
|
105
|
-
inference and canonical detection.
|
|
106
|
-
4. Test rate consistency separately for each peak and actual charge currency:
|
|
107
|
-
at least three observations per day on at least four days. A fixed-FX
|
|
108
|
-
observation requires identical daily modal charge amounts, differing
|
|
109
|
-
source/top-up currencies, and at least 0.1% movement in that cross-rate.
|
|
110
|
-
Never pool incomparable source-currency amounts or use movement against an
|
|
111
|
-
unrelated cache base. Modal stability is not proof that every row is fixed.
|
|
112
|
-
5. Apply the weak retail test to the remainder (20% coverage, five base prices),
|
|
113
|
-
then retain unclassified rows. Small-sample groups are retained separately.
|
|
114
|
-
|
|
115
|
-
Up to three rounds per group. Every threshold is a CLI option echoed under
|
|
116
|
-
`parameters`. Country helps candidate inference but is not a canonical member
|
|
117
|
-
filter. A single-country pattern selected using country cannot supply an
|
|
118
|
-
independent country-concentration risk signal; canonical concentration must be
|
|
119
|
-
computed on the complete exact descriptor/currency/amount membership.
|
|
120
|
-
|
|
121
|
-
## Reported behavior and investigation
|
|
122
|
-
|
|
123
|
-
In the main report, show observed amounts and relevant behavior before the
|
|
124
|
-
supported pattern hypothesis, its uncertainty, and its relationship to formal
|
|
125
|
-
amount clusters. Keep exhaustive pattern tables in linked evidence. Pattern/
|
|
126
|
-
cluster intersections require saved row-level reconciliation to both
|
|
127
|
-
populations; matching labels are not enough. A preset menu can contain
|
|
128
|
-
non-doubling prices. Do not apply formal cluster eligibility (three levels,
|
|
129
|
-
fixed 2x, 100 attempts) to every pattern hypothesis.
|
|
130
|
-
|
|
131
|
-
Report attempts, distinct masked-card counts, repeat-card share, decline retries,
|
|
132
|
-
UTC hour concentration, address-verification presence, 3-D Secure presence,
|
|
133
|
-
authorization success, and suspected-fraud responses with their denominators.
|
|
134
|
-
Masked-card identifiers and missing fields limit interpretation. Compare these
|
|
135
|
-
features as observations, not proof of players, shops, bots, or upstream owners.
|
|
136
|
-
|
|
137
|
-
A shared preset across currencies can justify checking common pricing; it does
|
|
138
|
-
not prove a common cashier. Different presets can justify checking whether more
|
|
139
|
-
than one business shares a billing name; they do not prove multiple businesses.
|
|
140
|
-
Investigate products, orders, sellers, and fulfillment before making business
|
|
141
|
-
claims. Never infer fees or fictitious tax from an unexplained fitted constant.
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Terminology
|
|
2
|
-
|
|
3
|
-
Use these terms in TLD reports. Read before writing. After writing, run
|
|
4
|
-
the proofread in `SKILL.md`.
|
|
5
|
-
|
|
6
|
-
TLD in this skill is **transaction laundering**. Spell it out on first
|
|
7
|
-
use as **transaction laundering (TLD)**. The English report title is the first
|
|
8
|
-
use and must carry that expansion. It is not a top-level domain.
|
|
9
|
-
|
|
10
|
-
## Canonical glossary
|
|
11
|
-
|
|
12
|
-
| English | Chinese | Do not write |
|
|
13
|
-
|---|---|---|
|
|
14
|
-
| transaction laundering (TLD) | 交易清洗(TLD) | 把 TLD 写成域名;洗钱结案 |
|
|
15
|
-
| potential TLD currency-amount pair | 潜在 TLD 币种金额对 | 已确认 TLD;TLD 商户 |
|
|
16
|
-
| cluster (report section) | 币种金额对 | 客户簇;客群;分群结果 |
|
|
17
|
-
| anchor detection | 锚点识别 | 客户聚类(对业务读者) |
|
|
18
|
-
| currency-amount-pair | 币种金额对 | 金额币种对;金额对;price point(作指标名时) |
|
|
19
|
-
| descriptor partition | descriptor 分区 | 客群;BIN 国家分区 |
|
|
20
|
-
| BIN-country attribution component | BIN 国家归因组件 | 客户国家;成员分区 |
|
|
21
|
-
| geometric anchor family | 币种金额对 | 阶梯(业务报告中);价格带;SKU |
|
|
22
|
-
| stuffing | 掺量 | 注水(可括注一次);corridor |
|
|
23
|
-
| MCC miscoding | MCC 错配 | 改 MCC;纠正 MCC |
|
|
24
|
-
| descriptor | descriptor / 账单描述;业务结论可用账单名称 | 商户名(指 descriptor 时) |
|
|
25
|
-
| baseline | 基线 | 对照组(可括注);everything else |
|
|
26
|
-
| all authorization attempts | 全部授权尝试 | U(业务报告中);原始全量 |
|
|
27
|
-
| US-BIN | US BIN / 美国发卡 | 美国交易(指卡BIN时) |
|
|
28
|
-
| attempt | 授权尝试 | 交易(指授权行时) |
|
|
29
|
-
| approval | 授权成功 | 批准 |
|
|
30
|
-
| authorization decline | 授权拒绝 | 拒付(指授权响应时) |
|
|
31
|
-
| auth rate | 授权成功率 | 转化率 |
|
|
32
|
-
| suspected fraud | 疑似欺诈 | 已确认欺诈;正文里写 D102(表内代码可留) |
|
|
33
|
-
| BIN country / issuer country | 发卡行国家 / BIN 国家 | 客户国家;收货国;发卡国 |
|
|
34
|
-
| cluster composition by BIN country | BIN 国家占 Cluster | 客户国家占比 |
|
|
35
|
-
| descriptor-country slice coverage | Cluster 占 Descriptor 对应 BIN 国家 | BIN 国家风险率;国家命中率 |
|
|
36
|
-
| canonical exact single-country standout | canonical 原币 100% 单一 BIN 国家 standout | 高国家占比;接近 100% |
|
|
37
|
-
| BIN-country local hour | BIN 国家当地小时 | 客户所在地时间;统一美国东部时间 |
|
|
38
|
-
| this analysis window | 当前分析时段内 | 本窗口 |
|
|
39
|
-
| MCC vs descriptor | MCC 与 descriptor 合理性 | 纠正 MCC;改 MCC |
|
|
40
|
-
| verdict | 结论 | 长文综述(作结论部分时) |
|
|
41
|
-
| High / Medium / Low risk | 高风险 / 中风险 / 低风险 | Supported;Weak;Ladder only;已确认 TLD |
|
|
42
|
-
| risk exposure | 风险敞口 | 已确认 TLD 影响;定罪金额 |
|
|
43
|
-
| payment pattern (raw script field: stream) | 收款模式 | 上游流;业务流;已确认业务类型 |
|
|
44
|
-
| Direct top-up pattern | 直接充值模式 | 已确认充值;按发卡行国家猜充值币种 |
|
|
45
|
-
| FX-converted top-up pattern | 换汇充值模式 | 多币种等于换汇;已确认换汇充值 |
|
|
46
|
-
| E-commerce pattern / Retail pattern | 电商模式 | 已确认电商;已核实商品或履约 |
|
|
47
|
-
| Other pattern | 其他模式 | 低风险模式;无风险 |
|
|
48
|
-
| inferred top-up currency (script: wallet) | 推断充值币种 | 已确认钱包币种;发卡行国家法币等于充值币种 |
|
|
49
|
-
| charge currency | 扣款币种 | 推断充值币种(指授权文件币种时) |
|
|
50
|
-
| preset menu | 预设充值档位 | 阶梯(指菜单时);手续费 |
|
|
51
|
-
| fixed amounts (supplementary feature) | 定额特征 | 独立定额模式;固定金额等于固定汇率 |
|
|
52
|
-
| frozen source-to-top-up rate (tested) | 固定换汇特征(经检验) | 机器人;已确认套现;未检验即固定汇率 |
|
|
53
|
-
| retail constant | 标价系数 | 税率;手续费率;虚假税项 |
|
|
54
|
-
| generated traffic hypothesis | 疑似批量生成(需独立证据) | 固定金额即生成流量;已确认欺诈交易 |
|
|
55
|
-
|
|
56
|
-
Keep proper nouns: Visa, MasterCard, BIN, IIN, MCC, MID, Worldpay,
|
|
57
|
-
Pazien, Order ID, descriptor. Tables may show response codes; prose uses
|
|
58
|
-
疑似欺诈 / suspected fraud.
|
|
59
|
-
|
|
60
|
-
## Pattern naming
|
|
61
|
-
|
|
62
|
-
Use the four payment-pattern names in reader-facing headings and tables. They
|
|
63
|
-
are business hypotheses from authorization data, not verified businesses or
|
|
64
|
-
successful settlements. Show inferred top-up currency separately from actual
|
|
65
|
-
charge currency. Direct versus FX-converted depends on whether those currencies
|
|
66
|
-
match; number of currencies is a separate attribute. Fixed amounts are a
|
|
67
|
-
supplementary feature applicable to top-ups or e-commerce, not an exclusive class.
|
|
68
|
-
Keep `menu-10`, `menu-12`, `frozen`, `live`, `retail x<k>`, and `off-menu` only
|
|
69
|
-
as raw audit labels; explain their limits using [streams.md](streams.md).
|
|
70
|
-
|
|
71
|
-
## Axis and UI
|
|
72
|
-
|
|
73
|
-
- Canonical amount axes use and name the cluster's **original transaction
|
|
74
|
-
currency** (`授权尝试金额 USD`, `授权尝试金额 EUR`). FX amount axes use and
|
|
75
|
-
name the **target BIN-origin legal-tender currency**. Never mix currencies on
|
|
76
|
-
one axis in either view.
|
|
77
|
-
- Date charts use each series' share of attempts by UTC transaction date.
|
|
78
|
-
- Time charts use each BIN country's local hour, falling back to UTC when no
|
|
79
|
-
timezone is configured. Normalize Cluster and Baseline independently.
|
|
80
|
-
- HTML footer: data-source filenames only. No skill name.
|
|
81
|
-
|
|
82
|
-
## Banned strings (grep after writing)
|
|
83
|
-
|
|
84
|
-
Chinese: `走廊`, `杠杆`, `转化率`, `赋能`, `抓手`, `闭环`, `打法`,
|
|
85
|
-
`本窗口`, `已确认 TLD`, `已确认交易清洗`, `洗钱`, `发卡国`, `客群运营`,
|
|
86
|
-
`客户簇`, `金额币种对`
|
|
87
|
-
|
|
88
|
-
English: `deposit fee` or `surcharge` for a converted preset, `bot` as a finding, `confirmed laundering`, `confirmed TLD`, `money laundering`,
|
|
89
|
-
`SAR`, `file a SAR`, `top-level domain`, `customer country`,
|
|
90
|
-
`conversion rate` (when meaning auth rate), `corridor`, `price band`
|
|
91
|
-
(as the cluster name)
|
|
92
|
-
|
|
93
|
-
`洗钱` is banned as a finding. If a source document uses the legal term,
|
|
94
|
-
quote it in supporting evidence and keep the report on potential TLD
|
|
95
|
-
currency-amount pairs.
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Workflow detail
|
|
2
|
-
|
|
3
|
-
SKILL.md is the index. This file is the procedure those steps run.
|
|
4
|
-
|
|
5
|
-
## Input
|
|
6
|
-
|
|
7
|
-
Typical file: `Authorizations_*.csv`. Grain: **one authorization attempt**.
|
|
8
|
-
|
|
9
|
-
Amount, currency, and descriptor columns are required. BIN/issuer country,
|
|
10
|
-
issuing bank, MCC, and response are expected for characteristics; a missing
|
|
11
|
-
optional column is captioned. Missing descriptor values enter an explicit
|
|
12
|
-
partition bucket; missing BIN-country values enter a reporting bucket after
|
|
13
|
-
membership is frozen. Do not drop those rows.
|
|
14
|
-
|
|
15
|
-
Settlements and chargebacks are not the clustering universe. Do not join
|
|
16
|
-
them into `U`. If only settlements exist, stop and say the clustering
|
|
17
|
-
grain is auth attempts.
|
|
18
|
-
|
|
19
|
-
## Column aliases
|
|
20
|
-
|
|
21
|
-
Use the first present name. Record the alias actually used.
|
|
22
|
-
|
|
23
|
-
| Role | Common names |
|
|
24
|
-
|---|---|
|
|
25
|
-
| Time | `Timestamp`, `Auth timestamp`, `Transaction date` |
|
|
26
|
-
| Amount | `Amount`, `Transaction amount`, `Requested amount` |
|
|
27
|
-
| Currency | `Currency`, `Transaction currency`, `Auth currency` |
|
|
28
|
-
| BIN / issuer country | `BIN country`, `IIN country`, `Issuer country`, `Card country` |
|
|
29
|
-
| Issuing bank | `Issuing bank`, `Issuer`, `Issuer name`, `Bank name` |
|
|
30
|
-
| Descriptor | `Billing descriptor`, `Descriptor`, `Soft descriptor`, `Submerchant`, `DBA` |
|
|
31
|
-
| MCC | `MCC`, `Merchant category code` |
|
|
32
|
-
| Response | `Response code`, `Response message`, `Auth response` |
|
|
33
|
-
| Identity | `Order ID`, `Transaction ID`, `Auth ID` |
|
|
34
|
-
| Card | `IIN`, `BIN`, `Payment method`, `Card type`, masked `Account` |
|
|
35
|
-
|
|
36
|
-
Portfolio constants (MID, acquirer, entry method) are recorded once. They
|
|
37
|
-
are not partition or clustering keys.
|
|
38
|
-
|
|
39
|
-
## Window
|
|
40
|
-
|
|
41
|
-
Default: min→max of the time field on the **cleaned** universe. If the user
|
|
42
|
-
names a week or month, cut there and state it.
|
|
43
|
-
|
|
44
|
-
## Response classes
|
|
45
|
-
|
|
46
|
-
Recompute from the file. Pazien-style defaults when those codes exist:
|
|
47
|
-
|
|
48
|
-
| Class | Typical |
|
|
49
|
-
|---|---|
|
|
50
|
-
| Approval | A001 / message contains approval |
|
|
51
|
-
| Suspected fraud | D102 / message contains suspected fraud |
|
|
52
|
-
| Other decline | remaining non-approvals |
|
|
53
|
-
|
|
54
|
-
Suspected-fraud decline ≠ confirmed fraud loss. Do not treat D102 as a
|
|
55
|
-
positive label for `fraud-analysis`.
|
|
56
|
-
|
|
57
|
-
## What this skill is looking for
|
|
58
|
-
|
|
59
|
-
Transaction laundering in this book usually shows up as:
|
|
60
|
-
|
|
61
|
-
1. **MCC miscoding** — different kinds of goods mixed under one “normal” MCC
|
|
62
|
-
2. **Descriptor mixing** — several customer types share a billing name, or
|
|
63
|
-
one TLD customer is split across several descriptors
|
|
64
|
-
3. **Stuffing / 掺量** — a geometric amount ladder riding the same MCC as
|
|
65
|
-
legitimate traffic
|
|
66
|
-
|
|
67
|
-
Descriptor defines the initial partition, while BIN country and MCC do not.
|
|
68
|
-
Geometrically related currency-amount anchors inside each descriptor define
|
|
69
|
-
membership. BIN country and issuing bank are reported only after membership
|
|
70
|
-
is frozen.
|
|
71
|
-
|
|
72
|
-
## Order that must not move
|
|
73
|
-
|
|
74
|
-
These analytical steps apply to new detection runs. For presentation-only
|
|
75
|
-
revisions, verify the accepted saved artifacts and go directly to reporting;
|
|
76
|
-
do not repeat cleaning, inference, clustering, or risk assignment.
|
|
77
|
-
|
|
78
|
-
Clean → descriptor partition → payment-pattern inference (context only) → exact currency-amount pairs across each whole descriptor → same-descriptor baseline → decide → report.
|
|
79
|
-
|
|
80
|
-
Inferred patterns never change canonical members, eligibility thresholds, or
|
|
81
|
-
baseline. Their own descriptive breakdowns are separately labeled and do not
|
|
82
|
-
receive formal cluster tiers.
|
|
83
|
-
|
|
84
|
-
Comparison features must not create a cluster that amount detection did not
|
|
85
|
-
find. Decision adds no evidence: it translates established observations into
|
|
86
|
-
a business-readable conclusion with a ≤3-sentence summary and concise
|
|
87
|
-
supporting explanation, following [decision.md](decision.md). Publish the
|
|
88
|
-
three-section main report, complete linked evidence, and separate methodology
|
|
89
|
-
in [report-template.md](report-template.md). Presentation revisions reuse frozen
|
|
90
|
-
results and preserve earlier outputs; they do not rerun analysis.
|
|
91
|
-
|
|
92
|
-
Report writing ends with `editorial-review`, then, for Chinese output, `polish-cn`
|
|
93
|
-
with [chinese-polish.md](chinese-polish.md), followed only by fidelity checks, HTML
|
|
94
|
-
synchronization, and proofreading before delivery. Neither step can change
|
|
95
|
-
detection, membership, exposure, risk tiers, or conclusions.
|
|
File without changes
|
|
File without changes
|
/package/skills/core/{write-doc → write-report}/references/reports/external-assessment-template.md
RENAMED
|
File without changes
|
/package/skills/core/{write-doc → write-report}/references/reports/management-report-template.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/release-check.mjs
RENAMED
|
File without changes
|
/package/skills/engineering/{contributing → engineering}/scripts/persist-conventions-core.mjs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/terminology.md
RENAMED
|
File without changes
|