Integration Handoff
The contributor portal is the front door for contributor identity and pre-recorder compliance. Downstream systems should consume only explicit portal outputs and should not infer readiness from loose UI state.
Playroll App Identity Bridge
The canonical bridge between the Playroll app user and the contributor portal contributor is explicit and activation-gated:
playroll_supa_new.playroll_users.user_id
<-> playroll_contributor_portal.contributors.id
Source of truth:
playroll_contributor_portal.public.contributor_app_links
App read model:
playroll_supa_new.public.contributor_status_projection
The Playroll app starts the flow by calling:
playroll_supa_new.functions.create-contributor-link-intent
The portal completes the flow by calling:
playroll_contributor_portal.functions.activate-contributor-app-link
Activation is allowed only after:
accepted_documents.incarico = true
accepted_documents.privacy = true
accepted_documents.compensation = true
accepted_documents.isee_notice = true
payout_receiving_methods.method_type = sepa_iban
payout_receiving_methods.status = confirmed
payout_receiving_methods.email_confirmation_status = confirmed
Integration rules:
- do not use email as the Playroll app/portal bridge
- do not let the app activate a contributor directly
- do not treat
manual_reviewas sufficient for automatic activation - do not copy legal/payment PII to
playroll_supa_new - do not compute rewards or payable money from this link alone
- app UI can treat an existing projection row as contributor verification
Recorder Access
Recorder access should key off the verified email and completion evidence, not a free-form name or contact handle.
Required source data:
public.onboarding_submissions.auth_user_id
public.onboarding_submissions.email
public.onboarding_submissions.accepted_documents
public.onboarding_submissions.document_acceptance_evidence
public.onboarding_submissions.metadata.recorder_access.status
Minimum recorder gate:
accepted_documents.incarico = true
accepted_documents.privacy = true
accepted_documents.compensation = true
accepted_documents.isee_notice = true
verified email present
The current metadata status after successful onboarding is:
documents_completed
Validation Pipeline
Session validation should write to:
public.session_validation_results
Only this semaphore should unlock validated time:
status = validated
Expected validation payload:
session_id
contributor_id
validation_version
gross_seconds
valid_seconds
invalid_seconds
valid_ratio
rewardable_seconds
result_sha256
Do not create payable money directly from validation output. payable_eur is deprecated.
PlayRoll Time
Validated sessions create internal PlayRoll time credit:
public.playroll_time_ledger
The ledger is the source of truth for time currency. It is not money.
Required link fields:
contributor_id
session_id
validation_result_id
entry_type = validated_time
seconds_delta
status
source
external_reference
earned_at
Milestones And Rewards
Milestones convert available time into reward unlocks:
public.reward_milestones
public.contributor_milestone_unlocks
Only a milestone unlock should create a value item:
public.compensation_items
Value items must track every value class, not only bank transfers:
cash
steam_key or software_key
voucher
prepaid_card
referral_bonus
manual_adjustment
Each compensation item should include:
contributor_id
item_type
eur_value
source_session_id
earned_at
paid_at
included_in_cap
receipt_id
validation_result_id
milestone_unlock_id
status
Payout Integration
The contributor portal currently exports confirmed or manual-review receiving methods through:
public.confirmed_payout_receiving_methods
Automatic money transfer should require:
method_type = sepa_iban
status = confirmed
email_confirmation_status = confirmed
Manual review cases require an operator-approved alternative outside this repo.
The payment system, not the browser portal, should own:
- payout request creation
- cap checks at request and approval time
- provider recipient creation or verification
- founder approval
- payment batch submission
- provider failure handling
- receipts and value sheets
- audit events
Reward Balance Display
The reward workspace is currently static zero-state UI. A future integration should read from:
public.contributor_playroll_time_balances
public.contributor_milestone_progress
public.contributor_reward_balances
Suggested display fields:
pending_seconds
available_seconds
available_hours
milestone credited_seconds
milestone remaining_seconds
in_validation_eur
available_eur
queued_eur
paid_eur
rolling_12mo_cap_used_eur
cap_remaining_eur
Admin Surface
An internal admin/review surface is not present in this repo. If built, keep it separate from the public contributor flow and gate it to EC team identities.
Expected admin queues:
- contributor compliance queue
- session validation queue
- payment queue
- failed payments queue
- cap monitor
- document/version dashboard
- manual review queue
- audit log
Use service-role credentials only in backend or Edge Function contexts. Never place admin operations in browser code.