docs(api): localize CSV columns in Persian

This commit is contained in:
2026-08-20 18:17:19 +03:30
parent 8358cc4d14
commit d133019a14
2 changed files with 18 additions and 13 deletions

View File

@@ -128,7 +128,7 @@ Detail rows expose only fields available in the authorized view: opaque merchant
- `Content-Type: text/csv; charset=utf-8` - `Content-Type: text/csv; charset=utf-8`
- UTF-8 with one leading BOM for common Persian spreadsheet compatibility - UTF-8 with one leading BOM for common Persian spreadsheet compatibility
- RFC 4180-style comma separation, header row, CRLF records, and doubled quotes - RFC 4180-style comma separation, header row, CRLF records, and doubled quotes
- Stable ASCII `snake_case` column names; Persian values remain UTF-8 - Stable Persian column names separated by normal spaces, with Persian status labels
- UTC ISO timestamps with `Z`; Rial integer values; no locale-formatted numbers - UTC ISO timestamps with `Z`; Rial integer values; no locale-formatted numbers
- `Content-Disposition: attachment` with an ASCII `filename` fallback followed by an RFC 6266 `filename*=UTF-8''...` value - `Content-Disposition: attachment` with an ASCII `filename` fallback followed by an RFC 6266 `filename*=UTF-8''...` value
- `Cache-Control: private, no-store` and `X-Content-Type-Options: nosniff` - `Cache-Control: private, no-store` and `X-Content-Type-Options: nosniff`
@@ -273,14 +273,14 @@ Correlate `requestId`, authenticated user/merchant internal ids, run id, section
- Merchant-facing detail CSV export is synchronous in the MVP and honors the current authorized tenant scope and approved filters. - Merchant-facing detail CSV export is synchronous in the MVP and honors the current authorized tenant scope and approved filters.
- CSV export is capped at 100,000 rows, 50 MiB estimated uncompressed output, and a 60-second deadline. - CSV export is capped at 100,000 rows, 50 MiB estimated uncompressed output, and a 60-second deadline.
- CSV export is limited to 3 requests per 10 minutes with burst 1 in independent authenticated-user and merchant buckets. - CSV export is limited to 3 requests per 10 minutes with burst 1 in independent authenticated-user and merchant buckets.
- CSV uses UTF-8 with a BOM, Persian column names separated by normal spaces, and Persian status labels. Numeric cells remain plain calculation-safe numbers and timestamps remain UTC ISO values.
## Remaining product questions ## Remaining product questions
1. Approve UTF-8 BOM output for spreadsheet compatibility and stable ASCII column headers, or require localized Persian header names. 1. Define retention and operator access policy for analytics-access and CSV-export audit records; Identity's 30-day demo-auth retention does not automatically cover these events.
2. Define retention and operator access policy for analytics-access and CSV-export audit records; Identity's 30-day demo-auth retention does not automatically cover these events. 2. Confirm whether terminal identifiers may be shown/exported as their existing opaque source reference or require a separate merchant-facing display alias.
3. Confirm whether terminal identifiers may be shown/exported as their existing opaque source reference or require a separate merchant-facing display alias. 3. Choose the production base URI used for dereferenceable Problem Details `type` documentation; `https://api.zarinpal.example/problems/...` is a non-production placeholder in the draft contract.
4. Choose the production base URI used for dereferenceable Problem Details `type` documentation; `https://api.zarinpal.example/problems/...` is a non-production placeholder in the draft contract. 4. Approve or revise the proposed public-edge request limits: 16 KiB for JSON bodies and 8 KiB for the request target/query string.
5. Approve or revise the proposed public-edge request limits: 16 KiB for JSON bodies and 8 KiB for the request target/query string.
## Standards references ## Standards references

View File

@@ -453,14 +453,19 @@ paths:
description: | description: |
Uses the same tenant scope, approved period, filters, and allowlisted Uses the same tenant scope, approved period, filters, and allowlisted
projection as `listAnalyticsSessionDetails`. Cursor and page limit do not projection as `listAnalyticsSessionDetails`. Cursor and page limit do not
apply. Output is UTF-8 with a BOM, an ASCII snake_case header row, comma apply. Output is UTF-8 with a BOM, a Persian header row whose labels use
separators, CRLF records, and RFC 4180 quoting. normal spaces, comma separators, CRLF records, and RFC 4180 quoting.
Stable columns are: Stable columns are:
`session_id`, `terminal_id`, `session_status`, `amount_rial`, `شناسه نشست پرداخت`, `شناسه پایانه`, `وضعیت پرداخت`, `مبلغ ریال`,
`fee_amount_rial`, `created_at`, `expires_at`, `attempt_count`, `کارمزد ریال`, `زمان ایجاد`, `زمان انقضا`, `تعداد تلاش`,
`latest_attempt_status`, `latest_attempt_at`, `verified_at`, `settled_at`, `وضعیت آخرین تلاش`, `زمان آخرین تلاش`, `زمان تأیید`, `زمان تسویه`,
`failure_stage`. `مرحله مشاهده شده شکست`.
CSV status labels are Persian: `Paid` is `پرداخت شده و تأیید نشده`,
`Verified` is `تأیید شده`, `Failed` is `ناموفق`, `Reversed` is
`برگشت خورده`, and `InBank` is `در بانک`. Numeric cells remain plain
calculation-safe numbers and timestamps remain UTC ISO values.
Columns unavailable to the chosen authorized view are empty. Payer tokens, Columns unavailable to the chosen authorized view are empty. Payer tokens,
credentials, peer data, internal ids, and any field unavailable in the JSON credentials, peer data, internal ids, and any field unavailable in the JSON
@@ -497,7 +502,7 @@ paths:
schema: schema:
type: string type: string
contentMediaType: text/csv contentMediaType: text/csv
example: "\uFEFFsession_id,terminal_id,session_status,amount_rial,fee_amount_rial,created_at,expires_at,attempt_count,latest_attempt_status,latest_attempt_at,verified_at,settled_at,failure_stage\r\nses_01K2M8,term_0042,Paid,1500000,2000,2026-06-01T08:00:00Z,2026-06-01T08:15:00Z,1,Paid,2026-06-01T08:02:00Z,,,\r\n" example: "\uFEFF\"شناسه نشست پرداخت\",\"شناسه پایانه\",\"وضعیت پرداخت\",\"مبلغ ریال\",\"کارمزد ریال\",\"زمان ایجاد\",\"زمان انقضا\",\"تعداد تلاش\",\"وضعیت آخرین تلاش\",\"زمان آخرین تلاش\",\"زمان تأیید\",\"زمان تسویه\",\"مرحله مشاهده شده شکست\"\r\nses_01K2M8,term_0042,پرداخت شده و تأیید نشده,1500000,2000,2026-06-01T08:00:00Z,2026-06-01T08:15:00Z,1,پرداخت شده و تأیید نشده,2026-06-01T08:02:00Z,,,\r\n"
'400': '400':
$ref: '#/components/responses/BadRequest' $ref: '#/components/responses/BadRequest'
'401': '401':