From a314c428097e99d903fc501654fb6940fa1b9e40 Mon Sep 17 00:00:00 2001 From: yunrongy424-oss Date: Thu, 28 May 2026 20:34:14 +0800 Subject: [PATCH] feat(revenue): Add institutional eligibility guard Add a focused SCIBASE issue #20 module that holds institutional revenue activation when sanctions, export-control, or payment-rail eligibility checks require review. Include dependency-free tests, deterministic reports, requirement mapping, acceptance notes, and a generated demo video artifact. Refs #20 --- .../README.md | 23 ++ .../acceptance-notes.md | 16 + institutional-sanctions-export-guard/demo.js | 76 ++++ institutional-sanctions-export-guard/index.js | 336 ++++++++++++++++++ .../make-demo-video.py | 71 ++++ .../package.json | 12 + .../reports/demo.mp4 | Bin 0 -> 78365 bytes .../reports/eligibility-packet.json | 284 +++++++++++++++ .../reports/eligibility-report.md | 31 ++ .../reports/summary.svg | 12 + .../requirements-map.md | 25 ++ institutional-sanctions-export-guard/test.js | 100 ++++++ 12 files changed, 986 insertions(+) create mode 100644 institutional-sanctions-export-guard/README.md create mode 100644 institutional-sanctions-export-guard/acceptance-notes.md create mode 100644 institutional-sanctions-export-guard/demo.js create mode 100644 institutional-sanctions-export-guard/index.js create mode 100644 institutional-sanctions-export-guard/make-demo-video.py create mode 100644 institutional-sanctions-export-guard/package.json create mode 100644 institutional-sanctions-export-guard/reports/demo.mp4 create mode 100644 institutional-sanctions-export-guard/reports/eligibility-packet.json create mode 100644 institutional-sanctions-export-guard/reports/eligibility-report.md create mode 100644 institutional-sanctions-export-guard/reports/summary.svg create mode 100644 institutional-sanctions-export-guard/requirements-map.md create mode 100644 institutional-sanctions-export-guard/test.js diff --git a/institutional-sanctions-export-guard/README.md b/institutional-sanctions-export-guard/README.md new file mode 100644 index 00000000..6774b72d --- /dev/null +++ b/institutional-sanctions-export-guard/README.md @@ -0,0 +1,23 @@ +# Institutional Sanctions Export Guard + +This module adds a focused Revenue Infrastructure slice for SCIBASE issue #20. It checks whether institutional and government subscriptions, AI compute bundles, and analytics API exports can be invoiced or activated before compliance clearance. + +The guard holds invoices and entitlements for restricted-party matches, restricted jurisdictions, export-controlled compute or analytics packages without clearance, and unsupported payment rails. Eligible requests can proceed to invoice and revenue recognition. + +## Run + +```bash +npm test +npm run demo +npm run video +npm run check +``` + +## Outputs + +- `reports/eligibility-packet.json` +- `reports/eligibility-report.md` +- `reports/summary.svg` +- `reports/demo.mp4` + +All data is synthetic. The module does not use credentials, private buyers, live sanctions providers, payment rails, bank data, or external APIs. diff --git a/institutional-sanctions-export-guard/acceptance-notes.md b/institutional-sanctions-export-guard/acceptance-notes.md new file mode 100644 index 00000000..77e54577 --- /dev/null +++ b/institutional-sanctions-export-guard/acceptance-notes.md @@ -0,0 +1,16 @@ +# Acceptance Notes + +The implemented slice is intentionally distinct from existing #20 submissions: + +- It is not another subscription ledger, metering ledger, proration guard, renewal true-up, tax exemption module, SLA credit guard, FX settlement guard, dispute guard, receipt privacy guard, cost-share guard, account transfer guard, or analytics usage guard. +- It focuses on institutional/government customer eligibility before invoices, payment-rail handling, AI compute bundles, and analytics license exports are activated. +- It is synthetic-data-only and does not call live sanctions, payment, bank, identity, or customer systems. + +Validation targets: + +- restricted-party and restricted-jurisdiction requests hold invoices and entitlements +- export-controlled compute without clearance creates a high-priority task +- unsupported payment rails route to manual billing review +- eligible institutional customers can activate revenue +- buyer contacts and tax identifiers are redacted from outputs +- summary counts and audit digest are deterministic diff --git a/institutional-sanctions-export-guard/demo.js b/institutional-sanctions-export-guard/demo.js new file mode 100644 index 00000000..2afe19eb --- /dev/null +++ b/institutional-sanctions-export-guard/demo.js @@ -0,0 +1,76 @@ +const fs = require('fs'); +const path = require('path'); +const { + evaluateEligibility, + buildSampleInstitutionalBatch +} = require('./index'); + +const reportsDir = path.join(__dirname, 'reports'); +fs.mkdirSync(reportsDir, { recursive: true }); + +const result = evaluateEligibility(buildSampleInstitutionalBatch()); + +const packetPath = path.join(reportsDir, 'eligibility-packet.json'); +const reportPath = path.join(reportsDir, 'eligibility-report.md'); +const svgPath = path.join(reportsDir, 'summary.svg'); + +fs.writeFileSync(packetPath, `${JSON.stringify(result, null, 2)}\n`); + +const decisions = result.customerDecisions + .map((decision) => `- ${decision.id}: ${decision.decision}${decision.flags.length ? ` (${decision.flags.join(', ')})` : ''}`) + .join('\n'); + +const tasks = result.complianceTasks + .map((task) => `- ${task.id} (${task.priority}): ${task.requiredAction}`) + .join('\n'); + +const markdown = `# Institutional Sanctions Export Guard + +Batch: ${result.batchId} +Generated: ${result.generatedAt} + +## Summary + +- Total requests evaluated: ${result.summary.totalRequests} +- Compliance holds: ${result.summary.complianceHolds} +- Manual billing reviews: ${result.summary.manualReviews} +- Recognizable revenue: $${result.summary.recognizableRevenueUsd} +- Deferred revenue: $${result.summary.deferredRevenueUsd} +- Recommended action: ${result.summary.recommendedAction} +- Audit digest: ${result.auditPacket.auditDigest} + +## Eligibility Decisions + +${decisions} + +## Compliance Tasks + +${tasks} + +## Privacy Notes + +Buyer contacts, tax identifiers, private payment references, and live customer records are not emitted. The packet uses synthetic data only and makes no external sanctions, payment, bank, or identity-provider calls. +`; + +fs.writeFileSync(reportPath, markdown); + +const svg = ` + + + Institutional Sanctions Export Guard + Compliance holds: ${result.summary.complianceHolds} + Manual billing reviews: ${result.summary.manualReviews} + Recognizable revenue: $${result.summary.recognizableRevenueUsd} + Action: ${result.summary.recommendedAction} + Blocks invoices and entitlements until eligibility is cleared. + Synthetic-only audit packet; no live payment or sanctions calls. + ${result.auditPacket.auditDigest} + +`; + +fs.writeFileSync(svgPath, svg); + +console.log(`Wrote ${path.relative(__dirname, packetPath)}`); +console.log(`Wrote ${path.relative(__dirname, reportPath)}`); +console.log(`Wrote ${path.relative(__dirname, svgPath)}`); +console.log(`Recommended action: ${result.summary.recommendedAction}`); diff --git a/institutional-sanctions-export-guard/index.js b/institutional-sanctions-export-guard/index.js new file mode 100644 index 00000000..94d4ba11 --- /dev/null +++ b/institutional-sanctions-export-guard/index.js @@ -0,0 +1,336 @@ +const crypto = require('crypto'); + +const RESTRICTED_JURISDICTIONS = new Set([ + 'restricted-region', + 'embargoed-territory', + 'sanctioned-zone' +]); + +const REVENUE_ENTITLEMENTS = [ + 'institutional-license', + 'ai-compute-bundle', + 'analytics-api-export' +]; + +function stableStringify(value) { + if (Array.isArray(value)) { + return `[${value.map(stableStringify).join(',')}]`; + } + + if (value && typeof value === 'object') { + return `{${Object.keys(value) + .sort() + .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`) + .join(',')}}`; + } + + return JSON.stringify(value); +} + +function digest(value) { + return `sha256:${crypto.createHash('sha256').update(stableStringify(value)).digest('hex')}`; +} + +function normalize(value) { + return String(value || '').trim().toLowerCase(); +} + +function buyerRef(request) { + return request.publicBuyerRef || `buyer-ref:${request.id}`; +} + +function hasRestrictedJurisdiction(request) { + return RESTRICTED_JURISDICTIONS.has(normalize(request.jurisdiction)); +} + +function hasExportControlGap(request) { + return Boolean( + request.packages.some((item) => item.exportControlled) && + !request.exportClearanceId + ); +} + +function hasPaymentRailGap(request) { + return Boolean(!request.paymentRailAvailable); +} + +function flagsForRequest(request) { + const flags = []; + + if (request.restrictedPartyMatch) { + flags.push('restricted-party-match'); + } + + if (hasRestrictedJurisdiction(request)) { + flags.push('restricted-jurisdiction'); + } + + if (request.packages.some((item) => item.exportControlled)) { + flags.push('export-controlled-compute'); + } + + if (hasExportControlGap(request)) { + flags.push('missing-export-clearance'); + } + + if (hasPaymentRailGap(request)) { + flags.push('payment-rail-unavailable'); + } + + return [...new Set(flags)]; +} + +function decisionForFlags(flags) { + if ( + flags.includes('restricted-party-match') || + flags.includes('restricted-jurisdiction') || + flags.includes('missing-export-clearance') + ) { + return 'compliance-hold'; + } + + if (flags.includes('payment-rail-unavailable')) { + return 'manual-billing-review'; + } + + return 'activate-revenue'; +} + +function evaluateRequest(request) { + const flags = flagsForRequest(request); + const decision = decisionForFlags(flags); + + return { + id: request.id, + buyer: buyerRef(request), + jurisdiction: request.jurisdiction, + customerType: request.customerType, + amountUsd: request.amountUsd, + decision, + flags, + requestedEntitlements: request.packages.map((item) => item.entitlement), + evidenceDigest: digest({ + id: request.id, + buyer: buyerRef(request), + jurisdiction: request.jurisdiction, + customerType: request.customerType, + amountUsd: request.amountUsd, + packages: request.packages, + exportClearanceId: request.exportClearanceId || null, + restrictedPartyMatch: Boolean(request.restrictedPartyMatch), + paymentRailAvailable: Boolean(request.paymentRailAvailable) + }) + }; +} + +function revenueActionForRequest(request, decision) { + if (decision.decision === 'activate-revenue') { + return { + id: `activate-${request.id}`, + requestId: request.id, + buyer: decision.buyer, + invoiceAction: 'issue-invoice', + entitlementAction: 'activate-entitlements', + recognizableAmountUsd: request.amountUsd, + deferredAmountUsd: 0 + }; + } + + if (decision.decision === 'manual-billing-review') { + return { + id: `review-${request.id}`, + requestId: request.id, + buyer: decision.buyer, + invoiceAction: 'manual-review', + entitlementAction: 'defer-activation', + recognizableAmountUsd: 0, + deferredAmountUsd: request.amountUsd, + reviewReasons: decision.flags + }; + } + + return { + id: `hold-${request.id}`, + requestId: request.id, + buyer: decision.buyer, + invoiceAction: 'hold-invoice', + entitlementAction: 'block-entitlements', + recognizableAmountUsd: 0, + deferredAmountUsd: request.amountUsd, + blockedEntitlements: REVENUE_ENTITLEMENTS, + holdReasons: decision.flags + }; +} + +function complianceTaskForDecision(decision) { + if (decision.decision === 'activate-revenue') { + return null; + } + + const exportClearanceNeeded = decision.flags.includes('missing-export-clearance'); + const restrictedPartyNeeded = + decision.flags.includes('restricted-party-match') || + decision.flags.includes('restricted-jurisdiction'); + + return { + id: `task-${decision.id}`, + requestId: decision.id, + buyer: decision.buyer, + priority: decision.decision === 'compliance-hold' ? 'high' : 'normal', + requiredAction: exportClearanceNeeded + ? 'collect-export-clearance-before-revenue-activation' + : restrictedPartyNeeded + ? 'resolve-restricted-party-screening-before-invoicing' + : 'route-to-supported-institutional-payment-rail', + flags: decision.flags, + blockedUntilResolved: decision.decision === 'compliance-hold' + }; +} + +function buildAuditPacket(batch, customerDecisions, revenueActions, complianceTasks) { + const events = [ + ...customerDecisions.map((decision) => ({ + type: 'eligibility-decision', + requestId: decision.id, + buyer: decision.buyer, + decision: decision.decision, + flags: decision.flags + })), + ...revenueActions.map((action) => ({ + type: 'revenue-action', + requestId: action.requestId, + buyer: action.buyer, + invoiceAction: action.invoiceAction, + entitlementAction: action.entitlementAction, + recognizableAmountUsd: action.recognizableAmountUsd, + deferredAmountUsd: action.deferredAmountUsd + })), + ...complianceTasks.map((task) => ({ + type: 'compliance-task', + taskId: task.id, + requestId: task.requestId, + priority: task.priority, + requiredAction: task.requiredAction + })) + ]; + + return { + batchId: batch.batchId, + generatedAt: batch.asOf, + events, + auditDigest: digest({ + batchId: batch.batchId, + generatedAt: batch.asOf, + events + }) + }; +} + +function evaluateEligibility(batch) { + const customerDecisions = batch.requests.map(evaluateRequest); + const revenueActions = batch.requests.map((request, index) => + revenueActionForRequest(request, customerDecisions[index]) + ); + const complianceTasks = customerDecisions + .map(complianceTaskForDecision) + .filter(Boolean); + const auditPacket = buildAuditPacket(batch, customerDecisions, revenueActions, complianceTasks); + + return { + batchId: batch.batchId, + generatedAt: batch.asOf, + customerDecisions, + revenueActions, + complianceTasks, + auditPacket, + summary: { + totalRequests: customerDecisions.length, + complianceHolds: customerDecisions.filter((decision) => decision.decision === 'compliance-hold').length, + manualReviews: customerDecisions.filter((decision) => decision.decision === 'manual-billing-review').length, + recognizableRevenueUsd: revenueActions.reduce( + (total, action) => total + action.recognizableAmountUsd, + 0 + ), + deferredRevenueUsd: revenueActions.reduce( + (total, action) => total + action.deferredAmountUsd, + 0 + ), + recommendedAction: complianceTasks.length > 0 + ? 'pause-institutional-revenue-activation' + : 'activate-eligible-revenue' + } + }; +} + +function buildSampleInstitutionalBatch() { + return { + batchId: 'institutional-eligibility-2026-05-28', + asOf: '2026-05-28T12:55:00Z', + requests: [ + { + id: 'license-cryo-bio-east', + publicBuyerRef: 'buyer-ref:cryo-bio-east', + buyerContact: 'procurement@cryo.example', + taxIdentifier: 'tax-id-998877', + customerType: 'government-lab', + jurisdiction: 'restricted-region', + restrictedPartyMatch: true, + paymentRailAvailable: true, + amountUsd: 120000, + packages: [ + { entitlement: 'institutional-license', exportControlled: false }, + { entitlement: 'ai-compute-bundle', exportControlled: true }, + { entitlement: 'analytics-api-export', exportControlled: true } + ] + }, + { + id: 'license-quantum-lab', + publicBuyerRef: 'buyer-ref:quantum-lab', + customerType: 'institutional-license', + jurisdiction: 'permitted-region', + restrictedPartyMatch: false, + paymentRailAvailable: true, + amountUsd: 64000, + packages: [ + { entitlement: 'institutional-license', exportControlled: false }, + { entitlement: 'ai-compute-bundle', exportControlled: true } + ] + }, + { + id: 'license-field-consortium', + publicBuyerRef: 'buyer-ref:field-consortium', + customerType: 'academic-consortium', + jurisdiction: 'permitted-region', + restrictedPartyMatch: false, + paymentRailAvailable: false, + exportClearanceId: 'clearance-field-2026', + amountUsd: 18000, + packages: [ + { entitlement: 'institutional-license', exportControlled: false }, + { entitlement: 'analytics-api-export', exportControlled: false } + ] + }, + { + id: 'license-open-neuro', + publicBuyerRef: 'buyer-ref:open-neuro', + customerType: 'university', + jurisdiction: 'permitted-region', + restrictedPartyMatch: false, + paymentRailAvailable: true, + exportClearanceId: 'clearance-open-neuro-2026', + amountUsd: 24000, + packages: [ + { entitlement: 'institutional-license', exportControlled: false }, + { entitlement: 'ai-compute-bundle', exportControlled: false }, + { entitlement: 'analytics-api-export', exportControlled: false } + ] + } + ] + }; +} + +module.exports = { + evaluateEligibility, + buildSampleInstitutionalBatch, + digest +}; diff --git a/institutional-sanctions-export-guard/make-demo-video.py b/institutional-sanctions-export-guard/make-demo-video.py new file mode 100644 index 00000000..ee1a7463 --- /dev/null +++ b/institutional-sanctions-export-guard/make-demo-video.py @@ -0,0 +1,71 @@ +from pathlib import Path + +from PIL import Image, ImageDraw, ImageFont + + +ROOT = Path(__file__).resolve().parent +REPORTS = ROOT / "reports" +REPORTS.mkdir(exist_ok=True) +OUTPUT = REPORTS / "demo.mp4" + + +def load_font(size): + for candidate in [ + "C:/Windows/Fonts/arial.ttf", + "C:/Windows/Fonts/segoeui.ttf", + "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", + ]: + path = Path(candidate) + if path.exists(): + return ImageFont.truetype(str(path), size) + return ImageFont.load_default() + + +def frame(progress): + image = Image.new("RGB", (1280, 720), "#18202f") + draw = ImageDraw.Draw(image) + draw.rounded_rectangle((60, 70, 1220, 650), radius=18, fill="#243149", outline="#9ec5ff", width=4) + + title = load_font(44) + heading = load_font(30) + body = load_font(24) + small = load_font(18) + + draw.text((100, 125), "Institutional Sanctions Export Guard", fill="white", font=title) + lines = [ + "Screens institutional subscriptions before invoicing", + "Blocks restricted-party and jurisdiction matches", + "Requires export clearance for AI compute bundles", + "Defers entitlements when payment rails are unsupported", + "Emits finance-ready audit packets", + "Uses synthetic data only" + ] + + visible = min(len(lines), 1 + int(progress * len(lines))) + for index, line in enumerate(lines[:visible]): + y = 205 + index * 54 + draw.text((100, y), line, fill="#e8f1ff", font=heading if index < 3 else body) + + bar_width = int(980 * progress) + draw.rounded_rectangle((100, 590, 1080, 615), radius=10, fill="#33435f") + draw.rounded_rectangle((100, 590, 100 + bar_width, 615), radius=10, fill="#9ec5ff") + draw.text((100, 635), "SCIBASE issue #20 revenue infrastructure slice - synthetic demo", fill="#b9d2ff", font=small) + return image + + +def main(): + try: + import imageio.v3 as iio + except Exception as exc: # pragma: no cover - helper path for local artifact generation + raise SystemExit( + "imageio and imageio-ffmpeg are required to regenerate reports/demo.mp4. " + "The committed demo.mp4 is already generated for review." + ) from exc + + frames = [frame(index / 59) for index in range(60)] + iio.imwrite(OUTPUT, frames, fps=15, codec="libx264", quality=8, macro_block_size=16) + print(f"Wrote {OUTPUT.relative_to(ROOT)}") + + +if __name__ == "__main__": + main() diff --git a/institutional-sanctions-export-guard/package.json b/institutional-sanctions-export-guard/package.json new file mode 100644 index 00000000..9dbbc0d2 --- /dev/null +++ b/institutional-sanctions-export-guard/package.json @@ -0,0 +1,12 @@ +{ + "name": "institutional-sanctions-export-guard", + "version": "1.0.0", + "private": true, + "description": "Dependency-free institutional sanctions and export-control guard for SCIBASE issue #20.", + "scripts": { + "test": "node test.js", + "demo": "node demo.js", + "video": "python make-demo-video.py", + "check": "node --check index.js && node --check test.js && node --check demo.js" + } +} diff --git a/institutional-sanctions-export-guard/reports/demo.mp4 b/institutional-sanctions-export-guard/reports/demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..6420b570b377a7b28a94e764a76c27fcfbf68074 GIT binary patch literal 78365 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
  • #TUE|hh|y||NU`YP?D7X&~x808Dz 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ⅆb&D80u?N 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 I!Ull<14!fdr~m)} literal 0 HcmV?d00001 diff --git a/institutional-sanctions-export-guard/reports/eligibility-packet.json b/institutional-sanctions-export-guard/reports/eligibility-packet.json new file mode 100644 index 00000000..6bc7c833 --- /dev/null +++ b/institutional-sanctions-export-guard/reports/eligibility-packet.json @@ -0,0 +1,284 @@ +{ + "batchId": "institutional-eligibility-2026-05-28", + "generatedAt": "2026-05-28T12:55:00Z", + "customerDecisions": [ + { + "id": "license-cryo-bio-east", + "buyer": "buyer-ref:cryo-bio-east", + "jurisdiction": "restricted-region", + "customerType": "government-lab", + "amountUsd": 120000, + "decision": "compliance-hold", + "flags": [ + "restricted-party-match", + "restricted-jurisdiction", + "export-controlled-compute", + "missing-export-clearance" + ], + "requestedEntitlements": [ + "institutional-license", + "ai-compute-bundle", + "analytics-api-export" + ], + "evidenceDigest": "sha256:b5c34f1e1733a812dd7a1d543a1e1fe2c28816659d15a05fe851db2f235ee9a6" + }, + { + "id": "license-quantum-lab", + "buyer": "buyer-ref:quantum-lab", + "jurisdiction": "permitted-region", + "customerType": "institutional-license", + "amountUsd": 64000, + "decision": "compliance-hold", + "flags": [ + "export-controlled-compute", + "missing-export-clearance" + ], + "requestedEntitlements": [ + "institutional-license", + "ai-compute-bundle" + ], + "evidenceDigest": "sha256:783eb7d059f9bc8c867355c97858741fc25634ee88e0ff22771586fbc6d998fd" + }, + { + "id": "license-field-consortium", + "buyer": "buyer-ref:field-consortium", + "jurisdiction": "permitted-region", + "customerType": "academic-consortium", + "amountUsd": 18000, + "decision": "manual-billing-review", + "flags": [ + "payment-rail-unavailable" + ], + "requestedEntitlements": [ + "institutional-license", + "analytics-api-export" + ], + "evidenceDigest": "sha256:547a30030f792ccd1f1bd6091ec20cf627e2b107c70bab4c3c2f751bab275c71" + }, + { + "id": "license-open-neuro", + "buyer": "buyer-ref:open-neuro", + "jurisdiction": "permitted-region", + "customerType": "university", + "amountUsd": 24000, + "decision": "activate-revenue", + "flags": [], + "requestedEntitlements": [ + "institutional-license", + "ai-compute-bundle", + "analytics-api-export" + ], + "evidenceDigest": "sha256:56429705181faa284b45fb55a385546a886406905a3778384b536f9b872c51ac" + } + ], + "revenueActions": [ + { + "id": "hold-license-cryo-bio-east", + "requestId": "license-cryo-bio-east", + "buyer": "buyer-ref:cryo-bio-east", + "invoiceAction": "hold-invoice", + "entitlementAction": "block-entitlements", + "recognizableAmountUsd": 0, + "deferredAmountUsd": 120000, + "blockedEntitlements": [ + "institutional-license", + "ai-compute-bundle", + "analytics-api-export" + ], + "holdReasons": [ + "restricted-party-match", + "restricted-jurisdiction", + "export-controlled-compute", + "missing-export-clearance" + ] + }, + { + "id": "hold-license-quantum-lab", + "requestId": "license-quantum-lab", + "buyer": "buyer-ref:quantum-lab", + "invoiceAction": "hold-invoice", + "entitlementAction": "block-entitlements", + "recognizableAmountUsd": 0, + "deferredAmountUsd": 64000, + "blockedEntitlements": [ + "institutional-license", + "ai-compute-bundle", + "analytics-api-export" + ], + "holdReasons": [ + "export-controlled-compute", + "missing-export-clearance" + ] + }, + { + "id": "review-license-field-consortium", + "requestId": "license-field-consortium", + "buyer": "buyer-ref:field-consortium", + "invoiceAction": "manual-review", + "entitlementAction": "defer-activation", + "recognizableAmountUsd": 0, + "deferredAmountUsd": 18000, + "reviewReasons": [ + "payment-rail-unavailable" + ] + }, + { + "id": "activate-license-open-neuro", + "requestId": "license-open-neuro", + "buyer": "buyer-ref:open-neuro", + "invoiceAction": "issue-invoice", + "entitlementAction": "activate-entitlements", + "recognizableAmountUsd": 24000, + "deferredAmountUsd": 0 + } + ], + "complianceTasks": [ + { + "id": "task-license-cryo-bio-east", + "requestId": "license-cryo-bio-east", + "buyer": "buyer-ref:cryo-bio-east", + "priority": "high", + "requiredAction": "collect-export-clearance-before-revenue-activation", + "flags": [ + "restricted-party-match", + "restricted-jurisdiction", + "export-controlled-compute", + "missing-export-clearance" + ], + "blockedUntilResolved": true + }, + { + "id": "task-license-quantum-lab", + "requestId": "license-quantum-lab", + "buyer": "buyer-ref:quantum-lab", + "priority": "high", + "requiredAction": "collect-export-clearance-before-revenue-activation", + "flags": [ + "export-controlled-compute", + "missing-export-clearance" + ], + "blockedUntilResolved": true + }, + { + "id": "task-license-field-consortium", + "requestId": "license-field-consortium", + "buyer": "buyer-ref:field-consortium", + "priority": "normal", + "requiredAction": "route-to-supported-institutional-payment-rail", + "flags": [ + "payment-rail-unavailable" + ], + "blockedUntilResolved": false + } + ], + "auditPacket": { + "batchId": "institutional-eligibility-2026-05-28", + "generatedAt": "2026-05-28T12:55:00Z", + "events": [ + { + "type": "eligibility-decision", + "requestId": "license-cryo-bio-east", + "buyer": "buyer-ref:cryo-bio-east", + "decision": "compliance-hold", + "flags": [ + "restricted-party-match", + "restricted-jurisdiction", + "export-controlled-compute", + "missing-export-clearance" + ] + }, + { + "type": "eligibility-decision", + "requestId": "license-quantum-lab", + "buyer": "buyer-ref:quantum-lab", + "decision": "compliance-hold", + "flags": [ + "export-controlled-compute", + "missing-export-clearance" + ] + }, + { + "type": "eligibility-decision", + "requestId": "license-field-consortium", + "buyer": "buyer-ref:field-consortium", + "decision": "manual-billing-review", + "flags": [ + "payment-rail-unavailable" + ] + }, + { + "type": "eligibility-decision", + "requestId": "license-open-neuro", + "buyer": "buyer-ref:open-neuro", + "decision": "activate-revenue", + "flags": [] + }, + { + "type": "revenue-action", + "requestId": "license-cryo-bio-east", + "buyer": "buyer-ref:cryo-bio-east", + "invoiceAction": "hold-invoice", + "entitlementAction": "block-entitlements", + "recognizableAmountUsd": 0, + "deferredAmountUsd": 120000 + }, + { + "type": "revenue-action", + "requestId": "license-quantum-lab", + "buyer": "buyer-ref:quantum-lab", + "invoiceAction": "hold-invoice", + "entitlementAction": "block-entitlements", + "recognizableAmountUsd": 0, + "deferredAmountUsd": 64000 + }, + { + "type": "revenue-action", + "requestId": "license-field-consortium", + "buyer": "buyer-ref:field-consortium", + "invoiceAction": "manual-review", + "entitlementAction": "defer-activation", + "recognizableAmountUsd": 0, + "deferredAmountUsd": 18000 + }, + { + "type": "revenue-action", + "requestId": "license-open-neuro", + "buyer": "buyer-ref:open-neuro", + "invoiceAction": "issue-invoice", + "entitlementAction": "activate-entitlements", + "recognizableAmountUsd": 24000, + "deferredAmountUsd": 0 + }, + { + "type": "compliance-task", + "taskId": "task-license-cryo-bio-east", + "requestId": "license-cryo-bio-east", + "priority": "high", + "requiredAction": "collect-export-clearance-before-revenue-activation" + }, + { + "type": "compliance-task", + "taskId": "task-license-quantum-lab", + "requestId": "license-quantum-lab", + "priority": "high", + "requiredAction": "collect-export-clearance-before-revenue-activation" + }, + { + "type": "compliance-task", + "taskId": "task-license-field-consortium", + "requestId": "license-field-consortium", + "priority": "normal", + "requiredAction": "route-to-supported-institutional-payment-rail" + } + ], + "auditDigest": "sha256:32c9498352303c377a36cca197d413edce926ebac3c8d1d29d778e41192d3e44" + }, + "summary": { + "totalRequests": 4, + "complianceHolds": 2, + "manualReviews": 1, + "recognizableRevenueUsd": 24000, + "deferredRevenueUsd": 202000, + "recommendedAction": "pause-institutional-revenue-activation" + } +} diff --git a/institutional-sanctions-export-guard/reports/eligibility-report.md b/institutional-sanctions-export-guard/reports/eligibility-report.md new file mode 100644 index 00000000..23949f31 --- /dev/null +++ b/institutional-sanctions-export-guard/reports/eligibility-report.md @@ -0,0 +1,31 @@ +# Institutional Sanctions Export Guard + +Batch: institutional-eligibility-2026-05-28 +Generated: 2026-05-28T12:55:00Z + +## Summary + +- Total requests evaluated: 4 +- Compliance holds: 2 +- Manual billing reviews: 1 +- Recognizable revenue: $24000 +- Deferred revenue: $202000 +- Recommended action: pause-institutional-revenue-activation +- Audit digest: sha256:32c9498352303c377a36cca197d413edce926ebac3c8d1d29d778e41192d3e44 + +## Eligibility Decisions + +- license-cryo-bio-east: compliance-hold (restricted-party-match, restricted-jurisdiction, export-controlled-compute, missing-export-clearance) +- license-quantum-lab: compliance-hold (export-controlled-compute, missing-export-clearance) +- license-field-consortium: manual-billing-review (payment-rail-unavailable) +- license-open-neuro: activate-revenue + +## Compliance Tasks + +- task-license-cryo-bio-east (high): collect-export-clearance-before-revenue-activation +- task-license-quantum-lab (high): collect-export-clearance-before-revenue-activation +- task-license-field-consortium (normal): route-to-supported-institutional-payment-rail + +## Privacy Notes + +Buyer contacts, tax identifiers, private payment references, and live customer records are not emitted. The packet uses synthetic data only and makes no external sanctions, payment, bank, or identity-provider calls. diff --git a/institutional-sanctions-export-guard/reports/summary.svg b/institutional-sanctions-export-guard/reports/summary.svg new file mode 100644 index 00000000..9aa37f7e --- /dev/null +++ b/institutional-sanctions-export-guard/reports/summary.svg @@ -0,0 +1,12 @@ + + + + Institutional Sanctions Export Guard + Compliance holds: 2 + Manual billing reviews: 1 + Recognizable revenue: $24000 + Action: pause-institutional-revenue-activation + Blocks invoices and entitlements until eligibility is cleared. + Synthetic-only audit packet; no live payment or sanctions calls. + sha256:32c9498352303c377a36cca197d413edce926ebac3c8d1d29d778e41192d3e44 + diff --git a/institutional-sanctions-export-guard/requirements-map.md b/institutional-sanctions-export-guard/requirements-map.md new file mode 100644 index 00000000..25b66727 --- /dev/null +++ b/institutional-sanctions-export-guard/requirements-map.md @@ -0,0 +1,25 @@ +# Requirements Map + +## Tiered Subscription Billing + +- Institutional and government license requests are represented as billable revenue requests. +- Invoice issuance is blocked when compliance evidence is missing. +- Payment-rail gaps route requests to manual billing review before activation. + +## AI Compute Billing + +- Export-controlled compute bundles require clearance before entitlement activation. +- Revenue is deferred while compute access is held. +- Audit events preserve why compute access was blocked or activated. + +## Licensing APIs And Analytics + +- Analytics API exports are treated as monetized license packages. +- Restricted-party and restricted-jurisdiction findings block export activation. +- Reports avoid buyer contacts, tax identifiers, private payment references, and live customer data. + +## Revenue Recognition + +- Eligible requests produce recognizable revenue. +- Held or manually reviewed requests defer revenue. +- The audit digest is deterministic for finance and reviewer verification. diff --git a/institutional-sanctions-export-guard/test.js b/institutional-sanctions-export-guard/test.js new file mode 100644 index 00000000..5b7f1665 --- /dev/null +++ b/institutional-sanctions-export-guard/test.js @@ -0,0 +1,100 @@ +const assert = require('assert'); +const { + evaluateEligibility, + buildSampleInstitutionalBatch +} = require('./index'); + +function byId(items, id) { + return items.find((item) => item.id === id); +} + +function testRestrictedPartyBlocksActivationAndInvoice() { + const result = evaluateEligibility(buildSampleInstitutionalBatch()); + const decision = byId(result.customerDecisions, 'license-cryo-bio-east'); + + assert.equal(decision.decision, 'compliance-hold'); + assert.ok(decision.flags.includes('restricted-party-match')); + assert.ok(decision.flags.includes('restricted-jurisdiction')); + + const action = byId(result.revenueActions, 'hold-license-cryo-bio-east'); + assert.equal(action.invoiceAction, 'hold-invoice'); + assert.deepEqual(action.blockedEntitlements, [ + 'institutional-license', + 'ai-compute-bundle', + 'analytics-api-export' + ]); +} + +function testExportControlledPackageRequiresManualClearance() { + const result = evaluateEligibility(buildSampleInstitutionalBatch()); + const decision = byId(result.customerDecisions, 'license-quantum-lab'); + + assert.equal(decision.decision, 'compliance-hold'); + assert.ok(decision.flags.includes('export-controlled-compute')); + assert.ok(decision.flags.includes('missing-export-clearance')); + + const task = byId(result.complianceTasks, 'task-license-quantum-lab'); + assert.equal(task.priority, 'high'); + assert.equal(task.requiredAction, 'collect-export-clearance-before-revenue-activation'); +} + +function testPaymentRailGapRoutesInstitutionalInvoiceWithoutActivation() { + const result = evaluateEligibility(buildSampleInstitutionalBatch()); + const decision = byId(result.customerDecisions, 'license-field-consortium'); + + assert.equal(decision.decision, 'manual-billing-review'); + assert.ok(decision.flags.includes('payment-rail-unavailable')); + + const action = byId(result.revenueActions, 'review-license-field-consortium'); + assert.equal(action.invoiceAction, 'manual-review'); + assert.equal(action.entitlementAction, 'defer-activation'); +} + +function testEligibleCustomerCanActivateRevenue() { + const result = evaluateEligibility(buildSampleInstitutionalBatch()); + const decision = byId(result.customerDecisions, 'license-open-neuro'); + + assert.equal(decision.decision, 'activate-revenue'); + assert.deepEqual(decision.flags, []); + + const action = byId(result.revenueActions, 'activate-license-open-neuro'); + assert.equal(action.invoiceAction, 'issue-invoice'); + assert.equal(action.entitlementAction, 'activate-entitlements'); + assert.equal(action.recognizableAmountUsd, 24000); +} + +function testPrivateBuyerIdentifiersAreRedacted() { + const result = evaluateEligibility(buildSampleInstitutionalBatch()); + const serialized = JSON.stringify(result); + + assert.ok(serialized.includes('buyer-ref:cryo-bio-east')); + assert.ok(!serialized.includes('procurement@cryo.example')); + assert.ok(!serialized.includes('tax-id-998877')); +} + +function testAuditDigestAndSummaryAreDeterministic() { + const first = evaluateEligibility(buildSampleInstitutionalBatch()); + const second = evaluateEligibility(buildSampleInstitutionalBatch()); + + assert.equal(first.summary.totalRequests, 4); + assert.equal(first.summary.complianceHolds, 2); + assert.equal(first.summary.manualReviews, 1); + assert.equal(first.summary.recognizableRevenueUsd, 24000); + assert.equal(first.auditPacket.auditDigest, second.auditPacket.auditDigest); + assert.ok(first.auditPacket.auditDigest.startsWith('sha256:')); +} + +const tests = [ + testRestrictedPartyBlocksActivationAndInvoice, + testExportControlledPackageRequiresManualClearance, + testPaymentRailGapRoutesInstitutionalInvoiceWithoutActivation, + testEligibleCustomerCanActivateRevenue, + testPrivateBuyerIdentifiersAreRedacted, + testAuditDigestAndSummaryAreDeterministic +]; + +for (const test of tests) { + test(); +} + +console.log(`${tests.length} institutional sanctions export guard tests passed`);