{"id":"dc-hcv","version":"0.1.0","revision":"f80d70e04c50c98f0afb38ac315e06aa8483d41f6f9e2ca3772b6094d14c8a75","policyId":"https://example.org/dc-hcv/acceptance-policy.json","policyVersion":"0.1.0","title":"Your employment evidence","variant":{"name":"human-signoff","parameters":{"issuerOrigin":"https://aiforms-login.kevinhayeswilson.com","redirectOrigin":"https://aiforms.kevinhayeswilson.com","issuerPath":"/realms/govforms-demo","clientId":"govforms-browser-demo"}},"description":"Report each person’s employment income and provide the evidence for each job. This demo collects employment evidence; it does not determine housing eligibility.","demoScenarios":{"complete-evidence":{"title":"Complete signed evidence","description":"Signed payroll records with every original document. The real evaluator determines whether all checks pass.","documents":"all","replacements":[]},"missing-documents":{"title":"Original documents needed","description":"The signed payroll records are present, but their original documents have not been supplied.","documents":"none","replacements":[]},"altered-claim":{"title":"Altered payroll claim","description":"A payroll amount was changed after signing, while the original documents and signature were retained. This intentionally invalid example must not be automatically accepted.","documents":"all","replacements":[{"path":"/evidence/0/payload/grossPay","value":"1499.00"}]}},"schema":{"$defs":{"Document":{"additionalProperties":false,"properties":{"objectId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Uploaded document reference","type":"string","description":"Filled in when you upload the original document to this draft."},"sha256":{"pattern":"^[a-f0-9]{64}$","title":"Document fingerprint","type":"string","description":"Must match the original bytes. A hash by itself does not prove who issued a document."},"mediaType":{"enum":["application/pdf","image/png","image/jpeg"],"title":"Document format","type":"string","description":"The upload service accepts PDF, PNG, and JPEG."}},"required":["objectId","sha256","mediaType"],"title":"Document metadata","type":"object","description":"Upload the original employer file. Its stored reference and fingerprint are available in the details.","x-presentation":{"disclosure":"collapsed"}},"EmploymentStream":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Job reference","type":"string","description":"Give each reported job a different reference."},"memberId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference for this job","type":"string","description":"Must match a person reference in your household."},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employer reference","type":"string","description":"Use the employer reference on the issuer’s payroll evidence."},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"How often this job pays","type":"string","description":"The required number of pay stubs depends on this frequency."},"evidenceIds":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","type":"string"},"maxItems":100,"minItems":1,"title":"Evidence references for this job","type":"array","description":"List the evidence references that support this person’s job."}},"required":["id","memberId","employerId","payFrequency","evidenceIds"],"title":"EmploymentStream","type":"object","x-informationRequirement":"https://example.org/dc-hcv/requirements/employment-income"},"ManualEvidence":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"enum":["unsigned_pay_stub","employer_letter","self_declaration","other"],"title":"Kind","type":"string"},"document":{"$ref":"#/$defs/Document","title":"Original supporting document","description":"Upload the original PDF or image. Staff will review this evidence route."},"description":{"minLength":1,"title":"What this document shows","type":"string","description":"Explain which person and job this document supports."}},"required":["id","kind","document","description"],"title":"ManualEvidence","type":"object","x-acceptanceRoute":"manual-review"},"Member":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference","type":"string","description":"Use this reference when linking a job to this person."},"fullName":{"minLength":1,"title":"Full name","type":"string","description":"Enter the name associated with this person’s evidence."}},"required":["id","fullName"],"title":"Member","type":"object"},"PayStubPayload":{"additionalProperties":false,"properties":{"profile":{"const":"https://example.org/dc-hcv/signed-pay-stub/v1","title":"Profile","type":"string"},"evidenceId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Evidenceid","type":"string"},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employerid","type":"string"},"employeeReference":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employeereference","type":"string"},"issuedOn":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Issuedon","type":"string"},"paymentDate":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Paymentdate","type":"string"},"payPeriodStart":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodstart","type":"string"},"payPeriodEnd":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodend","type":"string"},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"Payfrequency","type":"string"},"payrollSequence":{"maximum":9007199254740991,"minimum":1,"title":"Payrollsequence","type":"integer"},"grossPay":{"pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","title":"Grosspay","type":"string"},"currency":{"const":"USD","title":"Currency","type":"string"},"sourceDocument":{"$ref":"#/$defs/Document"}},"required":["profile","evidenceId","employerId","employeeReference","issuedOn","paymentDate","payPeriodStart","payPeriodEnd","payFrequency","payrollSequence","grossPay","currency","sourceDocument"],"title":"PayStubPayload","type":"object"},"Signature":{"additionalProperties":false,"properties":{"format":{"const":"cms-detached-rfc8785","title":"Format","type":"string"},"cmsDerBase64":{"maxLength":262144,"minLength":1,"title":"Cmsderbase64","type":"string"}},"required":["format","cmsDerBase64"],"title":"Digital signature details","type":"object","description":"This signature is supplied by the issuer. Import the signed record rather than entering signature bytes manually.","x-presentation":{"disclosure":"collapsed"}},"SignedPayStub":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"const":"signed_pay_stub","title":"Kind","type":"string"},"payload":{"$ref":"#/$defs/PayStubPayload","title":"Issuer-signed payroll claims","description":"Import these claims from the employer. Editing them invalidates the signature."},"signature":{"$ref":"#/$defs/Signature","title":"Employer’s digital signature","description":"Use the detached signature supplied by the payroll issuer."}},"required":["id","kind","payload","signature"],"title":"SignedPayStub","type":"object","x-cccev":{"class":"http://data.europa.eu/m8g/Evidence","evidenceType":"https://example.org/dc-hcv/evidence-types/pay-stub","supportsRequirement":"https://example.org/dc-hcv/requirements/employment-income"}}},"additionalProperties":false,"properties":{"profileVersion":{"const":"0.1.0","title":"Profileversion","type":"string"},"applicationId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Application reference","type":"string","description":"Choose a unique reference for this application, beginning with a letter."},"household":{"items":{"$ref":"#/$defs/Member"},"maxItems":50,"minItems":1,"title":"People in your household","type":"array","description":"Add the people whose employment income you are reporting."},"employmentIncome":{"items":{"$ref":"#/$defs/EmploymentStream"},"maxItems":100,"title":"Jobs and employment income","type":"array","description":"Add each person’s job separately, linking it to that person and its supporting evidence."},"evidence":{"items":{"discriminator":{"mapping":{"employer_letter":"#/$defs/ManualEvidence","other":"#/$defs/ManualEvidence","self_declaration":"#/$defs/ManualEvidence","signed_pay_stub":"#/$defs/SignedPayStub","unsigned_pay_stub":"#/$defs/ManualEvidence"},"propertyName":"kind"},"oneOf":[{"$ref":"#/$defs/SignedPayStub"},{"$ref":"#/$defs/ManualEvidence"}]},"maxItems":200,"title":"Supporting evidence","type":"array","description":"Add issuer-signed payroll records or original documents for staff review."}},"required":["profileVersion","applicationId","household","employmentIncome","evidence"],"title":"Your employment evidence","type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://example.org/dc-hcv/schemas/application.schema.json","description":"Report each person’s employment income and provide the evidence for each job. This demo collects employment evidence; it does not determine housing eligibility.","x-process":{"href":"/api/forms/dc-hcv/process","policy":"/api/forms/dc-hcv/policy"}},"requirements":[{"id":"https://example.org/dc-hcv/requirements/employment-income","title":"Verify each reported employment income stream","text":"Provide evidence for each person’s job separately. Another household member’s pay stubs cannot establish this job’s income."},{"id":"https://example.org/dc-hcv/concepts/gross-pay","title":"Gross wages for one pay period","text":"Show the total amount earned in each pay period before taxes and other deductions."},{"id":"https://example.org/dc-hcv/concepts/pay-period","title":"Period and frequency of payroll","text":"Show when each pay period started and ended, and how often the job pays."},{"id":"https://example.org/dc-hcv/constraints/stub-count","title":"Current consecutive pay-stub coverage","text":"Provide 4 recent consecutive pay stubs if paid weekly; 2 if paid every two weeks; 2 if paid twice a month; or 2 if paid monthly. The stubs must cover the most recent completed pay periods."},{"id":"https://example.org/dc-hcv/constraints/document-age","title":"Document currency relative to the agency request","text":"Use documents issued no more than 60 days before the agency request. Documents issued after the request need staff review."}],"validationRules":[{"id":"https://example.org/dc-hcv/shapes/DocumentAgeShape","source":"/api/forms/dc-hcv/shapes/document-age","requirements":["Provide one document issue date.","Document issue date must be a date.","Document issue date must be on or before the agency request date.","Provide one agency request date.","Agency request date must be a date.","Provide one earliest allowed issue date.","Earliest allowed issue date must be a date.","Earliest allowed issue date must be on or before the document issue date."]}],"guidance":[{"title":"One evidence set per job","text":"Match each job to its household member and employer. Reusing another person’s pay stubs cannot establish this job’s income.","when":{"path":"/employmentIncome","operator":"nonempty","value":""}},{"title":"Keep the original employer document","text":"Do you have the original PDF from your employer? Upload it with the signed payroll record so its bytes can be checked against the signed fingerprint.","when":{"path":"/evidence","operator":"contains-kind","value":"signed_pay_stub"}},{"title":"Alternative evidence needs staff review","text":"If you cannot provide issuer-signed payroll evidence, describe the original document and ask staff which alternative is suitable. Uploading a document does not automatically satisfy the requirement.","when":{"path":"/evidence","operator":"nonempty","value":""}}],"messages":{"document_missing":{"summary":"The original employer document has not been uploaded to this draft.","nextStep":"Do you have the original PDF from your employer? Upload that file, then check the evidence again.","suppressedBy":[]},"document_digest_mismatch":{"summary":"The uploaded document differs from the document covered by the signature.","nextStep":"Upload the exact original file supplied by the employer. Avoid printing, scanning, or resaving it.","suppressedBy":[]},"invalid_cms_signature":{"summary":"The payroll signature could not be verified.","nextStep":"Import the original signed payroll record from the employer. Ask the issuer for a fresh record if it still fails.","suppressedBy":["payload_digest_mismatch"]},"payload_digest_mismatch":{"summary":"The payroll claims differ from the signed record.","nextStep":"Restore the issuer’s original signed payroll claims and signature.","suppressedBy":[]},"signer_not_authorized":{"summary":"The payroll signer is not approved for this employer.","nextStep":"Ask staff to check the issuer’s authorization; an applicant cannot approve a signing certificate.","suppressedBy":[]},"certificate_not_current":{"summary":"The signing certificate is not current at evaluation time.","nextStep":"Ask the payroll issuer or staff for help verifying a record with a current certificate.","suppressedBy":[]},"certificate_revoked":{"summary":"The signing certificate has been revoked.","nextStep":"Ask the employer for replacement evidence and have staff review the affected record.","suppressedBy":[]},"revocation_unknown":{"summary":"The service cannot establish whether the signing certificate is revoked.","nextStep":"Staff must check issuer status before this evidence can be accepted.","suppressedBy":[]},"evidence_id_mismatch":{"summary":"The evidence reference does not match the issuer-signed reference.","nextStep":"Restore the original issuer record and use its evidence reference consistently.","suppressedBy":[]},"manual_evidence_route":{"summary":"This document follows a staff review route.","nextStep":"Describe which person and job it supports. Staff will determine whether additional evidence is needed.","suppressedBy":[]},"identity_binding_not_configured":{"summary":"The demo cannot confirm the person-to-employment identity link.","nextStep":"Staff must confirm the household member and employer records before acceptance.","suppressedBy":["authority_employment_binding_unavailable","authority_employee_binding_unavailable"]},"full_policy_evaluation_not_implemented":{"summary":"The demo has not run every required policy check.","nextStep":"Wait for staff review. A successful signature check alone does not establish acceptance.","suppressedBy":["authority_employment_binding_unavailable","authority_employee_binding_unavailable","authority_payroll_calendar_unavailable","agency_clearance_unavailable","unsupported_required_check"]},"authority_employment_binding_unavailable":{"summary":"The service cannot yet verify the person and employer for this job.","nextStep":"Staff must confirm the job against trusted agency records. The service has not run every required policy check successfully.","suppressedBy":[]},"authority_employee_binding_unavailable":{"summary":"The payroll employee reference has not been linked to this household member.","nextStep":"Ask staff to verify the employer’s employee reference against the household member.","suppressedBy":[]},"authority_payroll_calendar_unavailable":{"summary":"The service cannot confirm the most recent completed payroll periods.","nextStep":"Staff must supply a verified employer pay calendar before payroll coverage can be accepted.","suppressedBy":[]},"agency_clearance_unavailable":{"summary":"Staff conflict and hold checks are not available.","nextStep":"Wait for staff to check whether this job has an outstanding conflict or review hold.","suppressedBy":[]},"unsupported_required_check":{"summary":"A required check is not supported by this service.","nextStep":"Ask staff to review the specification. This evidence cannot be accepted automatically.","suppressedBy":[]},"source_document_missing":{"summary":"An original employer document is missing.","nextStep":"Do you have the original PDF from your employer? Upload the exact file and check the evidence again.","suppressedBy":["document_missing"]},"insufficient_payroll_coverage":{"summary":"There are not enough current consecutive pay stubs.","nextStep":"Provide the missing stubs for the latest completed pay periods, using the count required for this job’s pay frequency.","suppressedBy":[]},"payroll_coverage_not_current_and_consecutive":{"summary":"The selected pay stubs do not cover the latest consecutive payroll sequence.","nextStep":"Check for a missing pay period or an older stub and provide the latest consecutive set.","suppressedBy":[]},"payroll_records_not_distinct":{"summary":"The selected payroll records repeat a pay period or original document.","nextStep":"Provide a distinct original document for each required pay period.","suppressedBy":[]},"document_age_requirement_failed":{"summary":"A document does not meet the agency’s date requirements.","nextStep":"Provide a document within the displayed agency request-date window, or ask staff to review it.","suppressedBy":[]},"certificate_revocation_unavailable":{"summary":"The signing certificate’s revocation status cannot be confirmed.","nextStep":"Staff must obtain current trusted issuer status before this evidence can be accepted.","suppressedBy":["revocation_unknown"]},"agency_conflict_or_staff_hold":{"summary":"This job has a recorded conflict or staff hold.","nextStep":"Ask staff to review the issue before proceeding.","suppressedBy":[]},"no_employment_streams_to_evaluate":{"summary":"There are no reported jobs to evaluate.","nextStep":"Add the jobs you are reporting, or ask staff which evidence route applies to your situation.","suppressedBy":[]},"accept-employment-evidence":{"summary":"Your employment evidence meets the required checks.","nextStep":"Keep your receipt. Acceptance of employment evidence does not determine housing eligibility.","suppressedBy":[]},"manual-review":{"summary":"Staff review is needed before this evidence can be accepted.","nextStep":"Review the guidance below and keep the original documents available for staff.","suppressedBy":[]},"request-additional-evidence":{"summary":"More evidence is needed for the reported employment.","nextStep":"Provide the missing original documents or pay periods described below, then check the evidence again.","suppressedBy":[]}},"requiredChecks":["submission_schema_valid","unique_ids_and_references_resolve","stream_member_and_employer_match_authority_records","every_selected_evidence_is_a_signed_pay_stub","cms_signature_valid_for_rfc8785_payload_bytes","actual_signer_certificate_matches_one_authorized_pin","certificate_valid_and_not_revoked","signer_authorized_for_payload_employer_and_evidence_type","employee_reference_matches_stream_member_via_authority_binding","signed_payload_evidence_id_matches_outer_id","source_document_bytes_match_signed_sha256","pay_frequency_and_employer_match_stream","dates_are_ordered_and_not_in_the_future","document_within_request_date_window","enough_distinct_current_consecutive_pay_stubs","no_known_conflict_or_staff_hold"],"outcomes":{"allChecksRequired":["submission_schema_valid","unique_ids_and_references_resolve","stream_member_and_employer_match_authority_records","every_selected_evidence_is_a_signed_pay_stub","cms_signature_valid_for_rfc8785_payload_bytes","actual_signer_certificate_matches_one_authorized_pin","certificate_valid_and_not_revoked","signer_authorized_for_payload_employer_and_evidence_type","employee_reference_matches_stream_member_via_authority_binding","signed_payload_evidence_id_matches_outer_id","source_document_bytes_match_signed_sha256","pay_frequency_and_employer_match_stream","dates_are_ordered_and_not_in_the_future","document_within_request_date_window","enough_distinct_current_consecutive_pay_stubs","no_known_conflict_or_staff_hold"],"onAllPass":"accept-employment-evidence","otherwise":"manual-review","onMissingEvidence":"request-additional-evidence","onVerificationUnavailable":"manual-review","eligibilityEffect":"none"},"evaluation":{"binding":{"binding":"employment-evidence/v1","documentAgeShapes":"document-age","documentPointers":[]},"policy":{"id":"https://example.org/dc-hcv/acceptance-policy.json","version":"0.1.0","status":"proposed-not-DCHA-policy","language":"dc-hcv-evidence-policy/v0.1-declarative-only","scope":"accept employment evidence for one employment stream; never determine eligibility","ownership":"agency-controlled; never accept a trust policy supplied by an applicant","sourceRequirements":{"consecutiveStubCount":{"weekly":4,"biweekly":2,"semimonthly":2,"monthly":2},"documentWindow":{"reference":"agencyContext.requestDate","maximumPriorDays":60,"futureDocuments":"manual-review"},"source":{"url":"https://www.dchousing.org/wp-content/uploads/2026/09/Final-Housing-Authority-Administrative-Plan-7-10-2026.pdf","sections":["5500.34","5500.36","5502.3"]},"additionalChecks":"Staff may request more evidence; required EIV review remains separate."},"trust":{"mode":"exact-leaf-certificate-sha256-pins","certificates":[{"id":"synthetic-payroll-signer","sha256Der":"756600abc8c809e409008a10405c0ea35bf5fec3dd9a81da1b7f82c7581208ea","authorizedEmployerIds":["example-employer"],"authorizedEvidenceTypes":["signed_pay_stub"]}],"fixtureOnly":true,"certificateValidation":{"validateAt":"agencyContext.evaluationTime","requireValidityPeriod":true,"requireDigitalSignatureKeyUsage":true,"requireRevocationStatus":"good","unknownRevocationStatus":"manual-review","allowedSignatureAlgorithms":["rsa-pss-sha256","ecdsa-p256-sha256"],"algorithmParameters":"RFC 4055 SHA-256/MGF1-SHA-256/saltLength 32 for RSA-PSS; P-256/SHA-256 for ECDSA","minimumRsaBits":2048,"timestampPolicy":"Do not use an untrusted signingTime attribute to bypass expiry or revocation."}},"automaticAcceptance":{"allChecksRequired":["submission_schema_valid","unique_ids_and_references_resolve","stream_member_and_employer_match_authority_records","every_selected_evidence_is_a_signed_pay_stub","cms_signature_valid_for_rfc8785_payload_bytes","actual_signer_certificate_matches_one_authorized_pin","certificate_valid_and_not_revoked","signer_authorized_for_payload_employer_and_evidence_type","employee_reference_matches_stream_member_via_authority_binding","signed_payload_evidence_id_matches_outer_id","source_document_bytes_match_signed_sha256","pay_frequency_and_employer_match_stream","dates_are_ordered_and_not_in_the_future","document_within_request_date_window","enough_distinct_current_consecutive_pay_stubs","no_known_conflict_or_staff_hold"],"onAllPass":"accept-employment-evidence","otherwise":"manual-review","onMissingEvidence":"request-additional-evidence","onVerificationUnavailable":"manual-review","eligibilityEffect":"none"},"consecutiveDefinition":{"groupBy":["memberId","employerId","payFrequency"],"distinctBy":["payload.payrollSequence","payload.sourceDocument.sha256"],"require":"Select at least the required count with adjacent signed payrollSequence values and nonoverlapping pay periods consistent with the frequency.","current":"The selected sequence must end at the most recently completed payroll period according to an authority-verified employer pay calendar as of requestDate.","calendarUnavailable":"manual-review","note":"Payroll sequence and calendar checks are proposed interoperability rules, not quoted DCHA requirements."},"trustedRuntimeInputs":["agency-generated requestDate and evaluationTime","authenticated applicant-to-member binding","authority-maintained employer employeeReference-to-member mapping","authority-verified employer payroll calendar","agency-controlled pins, revocation information, conflict flags and staff holds"],"decisionRecordRequired":["policyId","policyVersion","applicationId","employmentStreamId","evidenceIds","verifiedPayloadSha256","actualSignerCertificateSha256","evaluatedAt","checkResults","outcome","reasonCodes"],"implementationStatus":"The versioned employment-evidence evaluator runs the declared checks with CMS/JCS verification and SHACL document-age validation. Automatic acceptance requires every required check to pass using configured runtime and policy pins plus trusted agency dates, identity/employment bindings, payroll calendars, and clearance. Default demo startup has no authority-context provider and routes to review. Identity-provider login, OAuth delegation issuance, wallet verification, and human approval ceremonies remain separate integrations."},"shapeSources":{"process":"@prefix sh: <http://www.w3.org/ns/shacl#> .\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n@prefix cv: <http://data.europa.eu/m8g/> .\n@prefix dct: <http://purl.org/dc/terms/> .\n@prefix shape: <https://example.org/dc-hcv/shapes/> .\n\n# Local profile constraints, not the official CCCEV conformance shapes.\nshape:NodeShape a sh:NodeShape ;\n    sh:targetClass cv:Criterion, cv:InformationRequirement, cv:InformationConcept,\n        cv:Constraint, cv:EvidenceTypeList, cv:EvidenceType, cv:ReferenceFramework,\n        cv:Evidence, cv:SupportedValue ;\n    sh:nodeKind sh:IRI ;\n    sh:property [\n        sh:path dct:title ; sh:minCount 1 ; sh:maxCount 1 ;\n        sh:datatype xsd:string ; sh:minLength 1 ;\n        sh:message \"Profile nodes require exactly one nonempty title.\" ;\n    ] ;\n    sh:property [ sh:path cv:hasConcept ; sh:nodeKind sh:IRI ; sh:class cv:InformationConcept ] ;\n    sh:property [ sh:path cv:hasEvidenceTypeList ; sh:nodeKind sh:IRI ; sh:class cv:EvidenceTypeList ] ;\n    sh:property [ sh:path cv:specifiesEvidenceType ; sh:nodeKind sh:IRI ; sh:class cv:EvidenceType ] ;\n    sh:property [ sh:path cv:constrains ; sh:nodeKind sh:IRI ; sh:class cv:InformationConcept ] ;\n    sh:property [ sh:path cv:isDerivedFrom ; sh:nodeKind sh:IRI ; sh:class cv:ReferenceFramework ] ;\n    sh:property [ sh:path cv:supportsConcept ; sh:nodeKind sh:IRI ; sh:class cv:InformationConcept ] ;\n    sh:property [ sh:path cv:supportsValue ; sh:nodeKind sh:IRI ; sh:class cv:SupportedValue ] ;\n    sh:property [\n        sh:path cv:hasRequirement ; sh:nodeKind sh:IRI ;\n        sh:or ( [ sh:class cv:Criterion ] [ sh:class cv:InformationRequirement ] [ sh:class cv:Constraint ] ) ;\n    ] ;\n    sh:property [\n        sh:path cv:supportsRequirement ; sh:nodeKind sh:IRI ;\n        sh:or ( [ sh:class cv:Criterion ] [ sh:class cv:InformationRequirement ] [ sh:class cv:Constraint ] ) ;\n    ] .\n\nshape:EvidenceRouteShape a sh:NodeShape ;\n    sh:targetClass cv:EvidenceTypeList ;\n    sh:property [\n        sh:path cv:specifiesEvidenceType ; sh:minCount 1 ;\n        sh:message \"An evidence route must specify at least one evidence type.\" ;\n    ] .\n","document-age":"@prefix sh: <http://www.w3.org/ns/shacl#> .\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n@prefix ex: <https://example.org/dc-hcv/vocabulary/> .\n@prefix shape: <https://example.org/dc-hcv/shapes/> .\n\n# A local application-profile rule expressed entirely in standard SHACL Core.\n# The adapter supplies earliestIssueDate = agency request date - policy maximum age.\nshape:DocumentAgeShape a sh:NodeShape ;\n    sh:targetClass ex:DocumentAgeCheck ;\n    sh:property [\n        sh:path ex:issuedOn ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:date ;\n        sh:lessThanOrEquals ex:requestDate ;\n        sh:message \"The document issue date must be on or before the agency request date.\" ;\n    ] ;\n    sh:property [\n        sh:path ex:requestDate ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:date ;\n    ] ;\n    sh:property [\n        sh:path ex:earliestIssueDate ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:date ;\n        sh:lessThanOrEquals ex:issuedOn ;\n        sh:message \"The document must fall within the policy's age window before the agency request.\" ;\n    ] .\n"}},"service":{"id":"dc-hcv","basePath":"/api/forms/dc-hcv","identityPolicies":{"anonymous-demo":{"actors":["anonymous"],"minimumAuthentication":"none","maximumAuthenticationAgeSeconds":null,"proofing":"none","acceptedProofingRoutes":[],"delegation":"disallowed","applicationScope":"none","humanApproval":"not-required","requiredEntitlements":[]},"reviewer":{"actors":["human"],"minimumAuthentication":"authenticated","maximumAuthenticationAgeSeconds":null,"proofing":"none","acceptedProofingRoutes":[],"delegation":"disallowed","applicationScope":"none","humanApproval":"not-required","requiredEntitlements":["employment-evidence-reviewer"]},"browser-account":{"actors":["human"],"minimumAuthentication":"authenticated","maximumAuthenticationAgeSeconds":null,"proofing":"none","acceptedProofingRoutes":[],"delegation":"disallowed","applicationScope":"none","humanApproval":"not-required","requiredEntitlements":[]},"browser-handshake":{"actors":["anonymous"],"minimumAuthentication":"none","maximumAuthenticationAgeSeconds":null,"proofing":"none","acceptedProofingRoutes":[],"delegation":"disallowed","applicationScope":"none","humanApproval":"not-required","requiredEntitlements":[]},"approved-applicant":{"actors":["human"],"minimumAuthentication":"authenticated","maximumAuthenticationAgeSeconds":null,"proofing":"none","acceptedProofingRoutes":[],"delegation":"disallowed","applicationScope":"none","humanApproval":"required","requiredEntitlements":[]},"approval-authentication":{"actors":["human"],"minimumAuthentication":"authenticated","maximumAuthenticationAgeSeconds":120,"proofing":"none","acceptedProofingRoutes":[],"delegation":"disallowed","applicationScope":"application","humanApproval":"not-required","requiredEntitlements":[]}},"oidcProviders":{"browser-provider":{"configuration":{"issuer":"https://aiforms-login.kevinhayeswilson.com/realms/govforms-demo","clientId":"govforms-browser-demo","redirectUri":"https://aiforms.kevinhayeswilson.com/api/account/callback","tokenEndpointAuthMethod":"none","allowedSigningAlgorithms":["RS256"],"trustedStrongAcrs":[],"requestedAcrValues":[],"maximumAuthenticationAgeSeconds":300,"sessionLifetimeSeconds":1800,"transactionLifetimeSeconds":300,"maximumPendingTransactions":256,"clockSkewSeconds":5,"accountEntitlements":[{"subject":"55eefd89-3d1a-4ce5-92dd-f8ae51db1c11","entitlements":[]},{"subject":"55eefd89-3d1a-4ce5-92dd-f8ae51db1c12","entitlements":["employment-evidence-reviewer"]}]},"developmentAccounts":{"55eefd89-3d1a-4ce5-92dd-f8ae51db1c11":{"kind":"synthetic","usernameRef":"DEMO_USERNAME","passwordRef":"DEMO_PASSWORD"},"55eefd89-3d1a-4ce5-92dd-f8ae51db1c12":{"kind":"synthetic","usernameRef":"DEMO_REVIEWER_USERNAME","passwordRef":"DEMO_REVIEWER_PASSWORD"}},"clientSecretRef":null}},"browserSessions":{"cookieName":"__Host-govforms-session","browserCookieName":"__Host-govforms-browser","csrfHeader":"X-CSRF-Token","lifetimeSeconds":1800,"maximumSessions":256,"postLoginPath":"/"},"evidenceEvaluation":{"binding":"employment-evidence/v1","documentAgeShapes":"document-age","documentPointers":[]},"reviewQueue":{"title":"Employment evidence review","description":"Review submitted employment evidence. Staff decisions preserve the original verification findings and do not determine housing eligibility.","states":{"automatically-accepted":{"title":"Automatically accepted","description":"All declared employment evidence checks passed."},"awaiting-review":{"title":"Awaiting staff review","description":"A reviewer must inspect the evidence and verification findings."},"additional-evidence":{"title":"Additional evidence needed","description":"The submission is missing required evidence."},"staff-approved":{"title":"Approved by staff","description":"A reviewer accepted the employment evidence and recorded a reason."}},"outcomeStates":{"accept-employment-evidence":"automatically-accepted","manual-review":"awaiting-review","request-additional-evidence":"additional-evidence"},"actions":{"approve-employment-evidence":{"title":"Approve employment evidence","description":"Record a staff judgment about employment evidence, without changing the automated findings or making a housing eligibility decision.","fromStates":["awaiting-review","additional-evidence"],"toState":"staff-approved","authorizationPolicy":"reviewer"}},"reassessmentPolicy":"reviewer"},"humanApproval":{"binding":"oidc-explicit-approval/v1","provider":"browser-provider","authenticationPolicy":"approval-authentication","submissionOperation":"submit","audience":"https://aiforms.kevinhayeswilson.com","lifetimeSeconds":600,"maximumRequests":100,"title":"Review and approve your application","description":"Review the frozen application and original evidence, sign in again with the trusted provider, then explicitly approve this snapshot. Any changes require a new review. This demo authenticates an account; it does not verify your real-world identity.","acknowledgment":"I have been shown this application and its evidence. I approve submitting this exact snapshot."},"workloadDemo":{"title":"Easier to apply. Longer to review.","description":"Introduce AI assistance to see both more applications and a less reliable evidence mix put pressure on the human review queue.","disclaimer":"Illustrative simulation with synthetic counts. These are assumptions for a demo, not measured demand or predictions. Every simulated application requires human review.","baselineLabel":"Before AI assistance","assistedLabel":"With AI assistance","baselineApplicationsPerDay":24.0,"assistedApplicationsPerDay":180.0,"baselinePreparationMinutes":45.0,"assistedPreparationMinutes":5.0,"reviewMinutes":null,"evidenceMix":{"supported":{"title":"Well-supported evidence","description":"The application is internally consistent and includes original payroll documents with verifiable provenance.","example":"Claimed gross pay: $1,499. Attached original payroll statement: $1,499, with matching employer and pay-period details.","reliability":"well-supported","baselineShare":0.8,"assistedShare":0.45,"reviewMinutes":12.0,"reviewTask":"Check the original records, issuer and payroll consistency."},"incomplete":{"title":"Incomplete or inconsistent information","description":"An original document is missing, or a stated income amount does not match the supporting records.","example":"Claimed gross pay: $1,499. The form says payroll records are available, but no original statement is attached.","reliability":"incomplete","baselineShare":0.15,"assistedShare":0.3,"reviewMinutes":25.0,"reviewTask":"Request the missing original and reconcile the conflicting details."},"unreliable":{"title":"Unsubstantiated or altered claims","description":"The application contains an unsupported assertion, a changed payroll amount or evidence whose provenance cannot be established.","example":"Claimed gross pay: $1,499. The original statement shows $1,200; the submitted amount was changed without a matching source record.","reliability":"unreliable","baselineShare":0.05,"assistedShare":0.25,"reviewMinutes":45.0,"reviewTask":"Corroborate with the original source; resolve integrity or provenance failures before accepting the evidence."}},"qualityDescription":"This illustrative scenario assumes AI-assisted demand includes a larger share of incomplete or unreliable information. These are authored demo assumptions, not measured AI error rates. The queue below contains simulated examples, not actual submissions or verifier results.","automaticIntroduction":false,"reviewers":3,"workHoursPerDay":8.0,"initialBacklog":40.0,"introduceAtDay":2.0,"adoptionDays":2.0,"durationDays":12.0,"secondsPerDay":2.0},"operations":[{"id":"createDraft","name":"create_employment_draft","description":"Create an expiring anonymous employment evidence draft capability.","title":"Start an employment draft","binding":"draft.create","method":"POST","path":"/api/drafts","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"outputSchema":{"properties":{"draftId":{"title":"Draftid","type":"string"},"token":{"title":"Token","type":"string"},"expiresInSeconds":{"title":"Expiresinseconds","type":"integer"},"identityVerified":{"const":false,"default":false,"title":"Identityverified","type":"boolean"}},"required":["draftId","token","expiresInSeconds"],"title":"DraftCapability","type":"object"},"parameters":{},"body":null,"mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":[],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"create-draft","statusCode":201,"webAction":"createDraft"},{"id":"uploadDocument","name":"upload_employment_document","description":"Store an original PDF, PNG, or JPEG in the authorized draft. Supply base64 encoded bytes through MCP. Upload does not establish authenticity.","title":"Upload original document","binding":"document.upload","method":"POST","path":"/api/drafts/{draft_id}/documents","inputSchema":{"type":"object","properties":{"draftId":{"type":"string","minLength":1},"token":{"type":"string","minLength":1},"contentBase64":{"type":"string","minLength":1},"mediaType":{"enum":["application/pdf","image/png","image/jpeg"]}},"required":["draftId","token","contentBase64","mediaType"],"additionalProperties":false},"outputSchema":{"additionalProperties":false,"properties":{"objectId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Objectid","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","title":"Sha256","type":"string"},"mediaType":{"enum":["application/pdf","image/png","image/jpeg"],"title":"Mediatype","type":"string"}},"required":["objectId","sha256","mediaType"],"title":"Document","type":"object"},"parameters":{"path:draft_id":"draftId","header:X-Draft-Token":"token","header:Content-Type":"mediaType"},"body":"contentBase64","mediaTypes":["application/pdf","image/png","image/jpeg"],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":["draft-token"],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"store-document","statusCode":201,"webAction":"uploadDocument"},{"id":"validate","name":"check_employment_evidence","description":"Validate the application and run declared evidence checks against signed records, original documents, and configured trusted agency facts. Missing or unavailable checks prevent acceptance.","title":"Check evidence","binding":"application.validate","method":"POST","path":"/api/drafts/{draft_id}/validate","inputSchema":{"type":"object","properties":{"draftId":{"type":"string","minLength":1},"token":{"type":"string","minLength":1},"revision":{"type":"string","minLength":1},"application":{"additionalProperties":false,"properties":{"profileVersion":{"const":"0.1.0","title":"Profileversion","type":"string"},"applicationId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Application reference","type":"string","description":"Choose a unique reference for this application, beginning with a letter."},"household":{"items":{"$ref":"#/$defs/Member"},"maxItems":50,"minItems":1,"title":"People in your household","type":"array","description":"Add the people whose employment income you are reporting."},"employmentIncome":{"items":{"$ref":"#/$defs/EmploymentStream"},"maxItems":100,"title":"Jobs and employment income","type":"array","description":"Add each person’s job separately, linking it to that person and its supporting evidence."},"evidence":{"items":{"discriminator":{"mapping":{"employer_letter":"#/$defs/ManualEvidence","other":"#/$defs/ManualEvidence","self_declaration":"#/$defs/ManualEvidence","signed_pay_stub":"#/$defs/SignedPayStub","unsigned_pay_stub":"#/$defs/ManualEvidence"},"propertyName":"kind"},"oneOf":[{"$ref":"#/$defs/SignedPayStub"},{"$ref":"#/$defs/ManualEvidence"}]},"maxItems":200,"title":"Supporting evidence","type":"array","description":"Add issuer-signed payroll records or original documents for staff review."}},"required":["profileVersion","applicationId","household","employmentIncome","evidence"],"title":"Your employment evidence","type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","description":"Report each person’s employment income and provide the evidence for each job. This demo collects employment evidence; it does not determine housing eligibility.","x-process":{"href":"/api/forms/dc-hcv/process","policy":"/api/forms/dc-hcv/policy"}}},"required":["draftId","token","application"],"additionalProperties":false,"$defs":{"Document":{"additionalProperties":false,"properties":{"objectId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Uploaded document reference","type":"string","description":"Filled in when you upload the original document to this draft."},"sha256":{"pattern":"^[a-f0-9]{64}$","title":"Document fingerprint","type":"string","description":"Must match the original bytes. A hash by itself does not prove who issued a document."},"mediaType":{"enum":["application/pdf","image/png","image/jpeg"],"title":"Document format","type":"string","description":"The upload service accepts PDF, PNG, and JPEG."}},"required":["objectId","sha256","mediaType"],"title":"Document metadata","type":"object","description":"Upload the original employer file. Its stored reference and fingerprint are available in the details.","x-presentation":{"disclosure":"collapsed"}},"EmploymentStream":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Job reference","type":"string","description":"Give each reported job a different reference."},"memberId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference for this job","type":"string","description":"Must match a person reference in your household."},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employer reference","type":"string","description":"Use the employer reference on the issuer’s payroll evidence."},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"How often this job pays","type":"string","description":"The required number of pay stubs depends on this frequency."},"evidenceIds":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","type":"string"},"maxItems":100,"minItems":1,"title":"Evidence references for this job","type":"array","description":"List the evidence references that support this person’s job."}},"required":["id","memberId","employerId","payFrequency","evidenceIds"],"title":"EmploymentStream","type":"object","x-informationRequirement":"https://example.org/dc-hcv/requirements/employment-income"},"ManualEvidence":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"enum":["unsigned_pay_stub","employer_letter","self_declaration","other"],"title":"Kind","type":"string"},"document":{"$ref":"#/$defs/Document","title":"Original supporting document","description":"Upload the original PDF or image. Staff will review this evidence route."},"description":{"minLength":1,"title":"What this document shows","type":"string","description":"Explain which person and job this document supports."}},"required":["id","kind","document","description"],"title":"ManualEvidence","type":"object","x-acceptanceRoute":"manual-review"},"Member":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference","type":"string","description":"Use this reference when linking a job to this person."},"fullName":{"minLength":1,"title":"Full name","type":"string","description":"Enter the name associated with this person’s evidence."}},"required":["id","fullName"],"title":"Member","type":"object"},"PayStubPayload":{"additionalProperties":false,"properties":{"profile":{"const":"https://example.org/dc-hcv/signed-pay-stub/v1","title":"Profile","type":"string"},"evidenceId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Evidenceid","type":"string"},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employerid","type":"string"},"employeeReference":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employeereference","type":"string"},"issuedOn":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Issuedon","type":"string"},"paymentDate":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Paymentdate","type":"string"},"payPeriodStart":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodstart","type":"string"},"payPeriodEnd":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodend","type":"string"},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"Payfrequency","type":"string"},"payrollSequence":{"maximum":9007199254740991,"minimum":1,"title":"Payrollsequence","type":"integer"},"grossPay":{"pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","title":"Grosspay","type":"string"},"currency":{"const":"USD","title":"Currency","type":"string"},"sourceDocument":{"$ref":"#/$defs/Document"}},"required":["profile","evidenceId","employerId","employeeReference","issuedOn","paymentDate","payPeriodStart","payPeriodEnd","payFrequency","payrollSequence","grossPay","currency","sourceDocument"],"title":"PayStubPayload","type":"object"},"Signature":{"additionalProperties":false,"properties":{"format":{"const":"cms-detached-rfc8785","title":"Format","type":"string"},"cmsDerBase64":{"maxLength":262144,"minLength":1,"title":"Cmsderbase64","type":"string"}},"required":["format","cmsDerBase64"],"title":"Digital signature details","type":"object","description":"This signature is supplied by the issuer. Import the signed record rather than entering signature bytes manually.","x-presentation":{"disclosure":"collapsed"}},"SignedPayStub":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"const":"signed_pay_stub","title":"Kind","type":"string"},"payload":{"$ref":"#/$defs/PayStubPayload","title":"Issuer-signed payroll claims","description":"Import these claims from the employer. Editing them invalidates the signature."},"signature":{"$ref":"#/$defs/Signature","title":"Employer’s digital signature","description":"Use the detached signature supplied by the payroll issuer."}},"required":["id","kind","payload","signature"],"title":"SignedPayStub","type":"object","x-cccev":{"class":"http://data.europa.eu/m8g/Evidence","evidenceType":"https://example.org/dc-hcv/evidence-types/pay-stub","supportsRequirement":"https://example.org/dc-hcv/requirements/employment-income"}}}},"outputSchema":{"properties":{"schemaValid":{"title":"Schemavalid","type":"boolean"},"evidence":{"items":{"$ref":"#/$defs/EvidenceReport"},"title":"Evidence","type":"array"},"outcome":{"type":"string","enum":["accept-employment-evidence","manual-review","request-additional-evidence"]},"reasonCodes":{"items":{"type":"string"},"title":"Reasoncodes","type":"array"},"guidance":{"items":{"additionalProperties":true,"type":"object"},"title":"Guidance","type":"array"},"profileRevision":{"title":"Profilerevision","type":"string"},"policyVersion":{"title":"Policyversion","type":"string"},"eligibilityDecision":{"default":null,"title":"Eligibilitydecision","type":"null"},"streams":{"type":"array","items":{"type":"object"}},"allRequiredChecksPassed":{"type":"boolean"},"applicationSha256":{"type":"string"},"authorityContextAvailable":{"type":"boolean"}},"required":["schemaValid","evidence","outcome","reasonCodes","guidance","profileRevision","policyVersion","streams","allRequiredChecksPassed","applicationSha256","authorityContextAvailable"],"title":"ValidationReport","type":"object","$defs":{"EvidenceReport":{"properties":{"evidenceId":{"title":"Evidenceid","type":"string"},"signature_valid":{"title":"Signature Valid","type":"boolean"},"evidence_authentic":{"title":"Evidence Authentic","type":"boolean"},"reason_codes":{"items":{"type":"string"},"title":"Reason Codes","type":"array"},"payload_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Payload Sha256"},"signer_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Signer Sha256"}},"required":["evidenceId","signature_valid","evidence_authentic","reason_codes"],"title":"EvidenceReport","type":"object"}}},"parameters":{"path:draft_id":"draftId","header:X-Draft-Token":"token","header:X-Profile-Revision":"revision"},"body":"application","mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":["draft-token"],"revisionGuard":true,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"validate"},{"id":"submit","name":"submit_employment_evidence","description":"Submit an explicit application snapshot for review and return an auditable receipt. Repeated calls create separate submissions.","title":"Submit for review","binding":"application.submit","method":"POST","path":"/api/drafts/{draft_id}/submit","inputSchema":{"type":"object","properties":{"draftId":{"type":"string","minLength":1},"token":{"type":"string","minLength":1},"revision":{"type":"string","minLength":1},"application":{"additionalProperties":false,"properties":{"profileVersion":{"const":"0.1.0","title":"Profileversion","type":"string"},"applicationId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Application reference","type":"string","description":"Choose a unique reference for this application, beginning with a letter."},"household":{"items":{"$ref":"#/$defs/Member"},"maxItems":50,"minItems":1,"title":"People in your household","type":"array","description":"Add the people whose employment income you are reporting."},"employmentIncome":{"items":{"$ref":"#/$defs/EmploymentStream"},"maxItems":100,"title":"Jobs and employment income","type":"array","description":"Add each person’s job separately, linking it to that person and its supporting evidence."},"evidence":{"items":{"discriminator":{"mapping":{"employer_letter":"#/$defs/ManualEvidence","other":"#/$defs/ManualEvidence","self_declaration":"#/$defs/ManualEvidence","signed_pay_stub":"#/$defs/SignedPayStub","unsigned_pay_stub":"#/$defs/ManualEvidence"},"propertyName":"kind"},"oneOf":[{"$ref":"#/$defs/SignedPayStub"},{"$ref":"#/$defs/ManualEvidence"}]},"maxItems":200,"title":"Supporting evidence","type":"array","description":"Add issuer-signed payroll records or original documents for staff review."}},"required":["profileVersion","applicationId","household","employmentIncome","evidence"],"title":"Your employment evidence","type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","description":"Report each person’s employment income and provide the evidence for each job. This demo collects employment evidence; it does not determine housing eligibility.","x-process":{"href":"/api/forms/dc-hcv/process","policy":"/api/forms/dc-hcv/policy"}},"approvalId":{"type":"string","minLength":1}},"required":["draftId","token","application","approvalId"],"additionalProperties":false,"$defs":{"Document":{"additionalProperties":false,"properties":{"objectId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Uploaded document reference","type":"string","description":"Filled in when you upload the original document to this draft."},"sha256":{"pattern":"^[a-f0-9]{64}$","title":"Document fingerprint","type":"string","description":"Must match the original bytes. A hash by itself does not prove who issued a document."},"mediaType":{"enum":["application/pdf","image/png","image/jpeg"],"title":"Document format","type":"string","description":"The upload service accepts PDF, PNG, and JPEG."}},"required":["objectId","sha256","mediaType"],"title":"Document metadata","type":"object","description":"Upload the original employer file. Its stored reference and fingerprint are available in the details.","x-presentation":{"disclosure":"collapsed"}},"EmploymentStream":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Job reference","type":"string","description":"Give each reported job a different reference."},"memberId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference for this job","type":"string","description":"Must match a person reference in your household."},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employer reference","type":"string","description":"Use the employer reference on the issuer’s payroll evidence."},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"How often this job pays","type":"string","description":"The required number of pay stubs depends on this frequency."},"evidenceIds":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","type":"string"},"maxItems":100,"minItems":1,"title":"Evidence references for this job","type":"array","description":"List the evidence references that support this person’s job."}},"required":["id","memberId","employerId","payFrequency","evidenceIds"],"title":"EmploymentStream","type":"object","x-informationRequirement":"https://example.org/dc-hcv/requirements/employment-income"},"ManualEvidence":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"enum":["unsigned_pay_stub","employer_letter","self_declaration","other"],"title":"Kind","type":"string"},"document":{"$ref":"#/$defs/Document","title":"Original supporting document","description":"Upload the original PDF or image. Staff will review this evidence route."},"description":{"minLength":1,"title":"What this document shows","type":"string","description":"Explain which person and job this document supports."}},"required":["id","kind","document","description"],"title":"ManualEvidence","type":"object","x-acceptanceRoute":"manual-review"},"Member":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference","type":"string","description":"Use this reference when linking a job to this person."},"fullName":{"minLength":1,"title":"Full name","type":"string","description":"Enter the name associated with this person’s evidence."}},"required":["id","fullName"],"title":"Member","type":"object"},"PayStubPayload":{"additionalProperties":false,"properties":{"profile":{"const":"https://example.org/dc-hcv/signed-pay-stub/v1","title":"Profile","type":"string"},"evidenceId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Evidenceid","type":"string"},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employerid","type":"string"},"employeeReference":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employeereference","type":"string"},"issuedOn":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Issuedon","type":"string"},"paymentDate":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Paymentdate","type":"string"},"payPeriodStart":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodstart","type":"string"},"payPeriodEnd":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodend","type":"string"},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"Payfrequency","type":"string"},"payrollSequence":{"maximum":9007199254740991,"minimum":1,"title":"Payrollsequence","type":"integer"},"grossPay":{"pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","title":"Grosspay","type":"string"},"currency":{"const":"USD","title":"Currency","type":"string"},"sourceDocument":{"$ref":"#/$defs/Document"}},"required":["profile","evidenceId","employerId","employeeReference","issuedOn","paymentDate","payPeriodStart","payPeriodEnd","payFrequency","payrollSequence","grossPay","currency","sourceDocument"],"title":"PayStubPayload","type":"object"},"Signature":{"additionalProperties":false,"properties":{"format":{"const":"cms-detached-rfc8785","title":"Format","type":"string"},"cmsDerBase64":{"maxLength":262144,"minLength":1,"title":"Cmsderbase64","type":"string"}},"required":["format","cmsDerBase64"],"title":"Digital signature details","type":"object","description":"This signature is supplied by the issuer. Import the signed record rather than entering signature bytes manually.","x-presentation":{"disclosure":"collapsed"}},"SignedPayStub":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"const":"signed_pay_stub","title":"Kind","type":"string"},"payload":{"$ref":"#/$defs/PayStubPayload","title":"Issuer-signed payroll claims","description":"Import these claims from the employer. Editing them invalidates the signature."},"signature":{"$ref":"#/$defs/Signature","title":"Employer’s digital signature","description":"Use the detached signature supplied by the payroll issuer."}},"required":["id","kind","payload","signature"],"title":"SignedPayStub","type":"object","x-cccev":{"class":"http://data.europa.eu/m8g/Evidence","evidenceType":"https://example.org/dc-hcv/evidence-types/pay-stub","supportsRequirement":"https://example.org/dc-hcv/requirements/employment-income"}}}},"outputSchema":{"properties":{"receiptId":{"title":"Receiptid","type":"string"},"draftId":{"title":"Draftid","type":"string"},"receivedAt":{"title":"Receivedat","type":"string"},"applicationSha256":{"title":"Applicationsha256","type":"string"},"outcome":{"type":"string","enum":["accept-employment-evidence","manual-review","request-additional-evidence"]},"profileRevision":{"title":"Profilerevision","type":"string"},"policyVersion":{"title":"Policyversion","type":"string"},"eligibilityDecision":{"default":null,"title":"Eligibilitydecision","type":"null"}},"required":["receiptId","draftId","receivedAt","applicationSha256","outcome","profileRevision","policyVersion"],"title":"Receipt","type":"object"},"parameters":{"path:draft_id":"draftId","header:X-Draft-Token":"token","header:X-Profile-Revision":"revision","header:X-Approval-Id":"approvalId"},"body":"application","mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"approved-applicant","permissions":["draft-token"],"revisionGuard":true,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"submit-snapshot","statusCode":201,"webAction":"submit"},{"id":"receipt","name":"get_employment_receipt","description":"Retrieve the submitted snapshot, original verification report, and current review state using the authorized draft capability. Staff identities and internal review notes are excluded.","title":"View submission status","binding":"receipt.read","method":"GET","path":"/api/drafts/{draft_id}/receipts/{receipt_id}","inputSchema":{"type":"object","properties":{"draftId":{"type":"string","minLength":1},"token":{"type":"string","minLength":1},"receiptId":{"type":"string","minLength":1}},"required":["draftId","token","receiptId"],"additionalProperties":false},"outputSchema":{"type":"object"},"parameters":{"path:draft_id":"draftId","header:X-Draft-Token":"token","path:receipt_id":"receiptId"},"body":null,"mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":["draft-token"],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"receipt"},{"id":"listReviewCases","name":"listReviewCases","description":"List submitted employment evidence and its review state. Reviewer authorization is required.","title":"View review queue","binding":"review.list","method":"GET","path":"/api/review/cases","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"outputSchema":{"type":"object"},"parameters":{},"body":null,"mediaTypes":[],"roles":["reviewer"],"authorizationPolicy":"reviewer","permissions":[],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"listReviewCases"},{"id":"readReviewCase","name":"readReviewCase","description":"Read the frozen application, verification findings, declared review workflow, and audit history.","title":"Inspect submitted evidence","binding":"review.read","method":"GET","path":"/api/review/cases/{case_id}","inputSchema":{"type":"object","properties":{"caseId":{"type":"string","minLength":1}},"required":["caseId"],"additionalProperties":false},"outputSchema":{"type":"object"},"parameters":{"path:case_id":"caseId"},"body":null,"mediaTypes":[],"roles":["reviewer"],"authorizationPolicy":"reviewer","permissions":[],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"readReviewCase"},{"id":"readReviewDocument","name":"readReviewDocument","description":"Retrieve original submitted document bytes as base64 for an authorized reviewer.","title":"Read original evidence document","binding":"review.document","method":"GET","path":"/api/review/cases/{case_id}/documents/{object_id}","inputSchema":{"type":"object","properties":{"caseId":{"type":"string","minLength":1},"objectId":{"type":"string","minLength":1}},"required":["caseId","objectId"],"additionalProperties":false},"outputSchema":{"type":"object"},"parameters":{"path:case_id":"caseId","path:object_id":"objectId"},"body":null,"mediaTypes":[],"roles":["reviewer"],"authorizationPolicy":"reviewer","permissions":[],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"readReviewDocument"},{"id":"decideReviewCase","name":"decideReviewCase","description":"Record an explicit staff decision and reason against the displayed case version and specification. This does not approve on behalf of the applicant.","title":"Record review decision","binding":"review.transition","method":"POST","path":"/api/review/cases/{case_id}/decisions","inputSchema":{"type":"object","properties":{"caseId":{"type":"string","minLength":1},"revision":{"type":"string","minLength":1},"decision":{"type":"object","properties":{"expectedVersion":{"type":"integer","minimum":1},"action":{"type":"string","enum":["approve-employment-evidence"]},"reason":{"type":"string","minLength":1,"maxLength":4000}},"required":["expectedVersion","action","reason"],"additionalProperties":false}},"required":["caseId","revision","decision"],"additionalProperties":false},"outputSchema":{"type":"object"},"parameters":{"path:case_id":"caseId","header:X-Profile-Revision":"revision"},"body":"decision","mediaTypes":[],"roles":["reviewer"],"authorizationPolicy":"reviewer","permissions":[],"revisionGuard":true,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"review-decision","statusCode":200,"webAction":"decideReviewCase"},{"id":"reevaluateReviewCase","name":"reevaluate_employment_case","description":"Run the current specification and verifier against the retained application and original documents. Preserve the original receipt and every previous finding; reset staff disposition according to the new evidence outcome. A reason, displayed case version, current revision, and reviewer authorization are required.","title":"Re-evaluate retained evidence","binding":"review.reevaluate","method":"POST","path":"/api/review/cases/{case_id}/reevaluations","inputSchema":{"type":"object","properties":{"caseId":{"type":"string","minLength":1},"revision":{"type":"string","minLength":1},"request":{"type":"object","properties":{"expectedVersion":{"type":"integer","minimum":1},"reason":{"type":"string","minLength":1,"maxLength":4000}},"required":["expectedVersion","reason"],"additionalProperties":false}},"required":["caseId","revision","request"],"additionalProperties":false},"outputSchema":{"type":"object"},"parameters":{"path:case_id":"caseId","header:X-Profile-Revision":"revision"},"body":"request","mediaTypes":[],"roles":["reviewer"],"authorizationPolicy":"reviewer","permissions":[],"revisionGuard":true,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"reevaluate-evidence","statusCode":200,"webAction":"reevaluateReviewCase"},{"id":"browserLogin","name":"begin_browser_login","description":"Sign in with the configured identity provider before preparing employment evidence. Your account may use a password and does not require an mDL or completed identity proofing.","title":"Sign in","binding":"oidc.login.begin","method":"POST","path":"/api/account/login","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"authorizationUrl":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["authorizationUrl","expiresAt"],"additionalProperties":false},"parameters":{},"body":null,"mediaTypes":[],"roles":["anonymous-applicant"],"authorizationPolicy":"browser-handshake","permissions":[],"revisionGuard":false,"transports":["http"],"accessContext":"browser-transaction","oidcProvider":"browser-provider","responseMode":"json","redirectField":null,"sideEffect":"begin-login","statusCode":200,"webAction":"login"},{"id":"browserCallback","name":"complete_browser_login","description":"Verify the provider's authorization-code response, one-use browser transaction, nonce, PKCE exchange, signed ID token and authentication freshness; then establish a new opaque browser session.","title":"Complete browser sign-in","binding":"oidc.login.callback","method":"GET","path":"/api/account/callback","inputSchema":{"type":"object","properties":{"state":{"type":"string"},"code":{"type":"string"},"iss":{"type":"string"},"error":{"type":"string"},"error_description":{"type":"string"},"error_uri":{"type":"string"}},"required":["state"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"authenticated":{"const":true},"redirectPath":{"type":"string"}},"required":["authenticated","redirectPath"],"additionalProperties":false},"parameters":{"query:state":"state","query:code":"code","query:iss":"iss","query:error":"error","query:error_description":"error_description","query:error_uri":"error_uri"},"body":null,"mediaTypes":[],"roles":["anonymous-applicant"],"authorizationPolicy":"browser-handshake","permissions":[],"revisionGuard":false,"transports":["http"],"accessContext":"browser-transaction","oidcProvider":"browser-provider","responseMode":"redirect","redirectField":"redirectPath","sideEffect":"establish-session","statusCode":303,"webAction":null},{"id":"browserSession","name":"read_browser_session","description":"Read whether this browser has a current verified account session and obtain the CSRF token for same-origin writes. This response makes no person-proofing or eligibility claim.","title":"Current browser session","binding":"browser.session.read","method":"GET","path":"/api/account/session","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"authenticated":{"type":"boolean"},"csrfToken":{"type":["string","null"]}},"required":["authenticated","csrfToken"],"additionalProperties":false},"parameters":{},"body":null,"mediaTypes":[],"roles":["anonymous-applicant"],"authorizationPolicy":"browser-handshake","permissions":[],"revisionGuard":false,"transports":["http"],"accessContext":"browser-transaction","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"session"},{"id":"browserLogout","name":"end_browser_session","description":"End this local browser session and revoke its pending sign-in transactions. Signing out here does not end the identity provider's separate session.","title":"Sign out","binding":"browser.session.logout","method":"POST","path":"/api/account/logout","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"authenticated":{"const":false}},"required":["authenticated"],"additionalProperties":false},"parameters":{},"body":null,"mediaTypes":[],"roles":["anonymous-applicant"],"authorizationPolicy":"browser-handshake","permissions":[],"revisionGuard":false,"transports":["http"],"accessContext":"browser-transaction","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"end-session","statusCode":200,"webAction":"logout"},{"id":"prepareApproval","name":"prepareApproval","description":"Freeze this application, its evidence references and current requirements for human sign-off.","title":"Review before submitting","binding":"approval.create","method":"POST","path":"/api/drafts/{draftId}/approval","inputSchema":{"type":"object","properties":{"draftId":{"type":"string","minLength":1},"token":{"type":"string","minLength":1},"application":{"additionalProperties":false,"properties":{"profileVersion":{"const":"0.1.0","title":"Profileversion","type":"string"},"applicationId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Application reference","type":"string","description":"Choose a unique reference for this application, beginning with a letter."},"household":{"items":{"$ref":"#/$defs/Member"},"maxItems":50,"minItems":1,"title":"People in your household","type":"array","description":"Add the people whose employment income you are reporting."},"employmentIncome":{"items":{"$ref":"#/$defs/EmploymentStream"},"maxItems":100,"title":"Jobs and employment income","type":"array","description":"Add each person’s job separately, linking it to that person and its supporting evidence."},"evidence":{"items":{"discriminator":{"mapping":{"employer_letter":"#/$defs/ManualEvidence","other":"#/$defs/ManualEvidence","self_declaration":"#/$defs/ManualEvidence","signed_pay_stub":"#/$defs/SignedPayStub","unsigned_pay_stub":"#/$defs/ManualEvidence"},"propertyName":"kind"},"oneOf":[{"$ref":"#/$defs/SignedPayStub"},{"$ref":"#/$defs/ManualEvidence"}]},"maxItems":200,"title":"Supporting evidence","type":"array","description":"Add issuer-signed payroll records or original documents for staff review."}},"required":["profileVersion","applicationId","household","employmentIncome","evidence"],"title":"Your employment evidence","type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","description":"Report each person’s employment income and provide the evidence for each job. This demo collects employment evidence; it does not determine housing eligibility.","x-process":{"href":"/api/forms/dc-hcv/process","policy":"/api/forms/dc-hcv/policy"}},"revision":{"type":"string"}},"required":["draftId","token","application","revision"],"additionalProperties":false,"$defs":{"Document":{"additionalProperties":false,"properties":{"objectId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Uploaded document reference","type":"string","description":"Filled in when you upload the original document to this draft."},"sha256":{"pattern":"^[a-f0-9]{64}$","title":"Document fingerprint","type":"string","description":"Must match the original bytes. A hash by itself does not prove who issued a document."},"mediaType":{"enum":["application/pdf","image/png","image/jpeg"],"title":"Document format","type":"string","description":"The upload service accepts PDF, PNG, and JPEG."}},"required":["objectId","sha256","mediaType"],"title":"Document metadata","type":"object","description":"Upload the original employer file. Its stored reference and fingerprint are available in the details.","x-presentation":{"disclosure":"collapsed"}},"EmploymentStream":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Job reference","type":"string","description":"Give each reported job a different reference."},"memberId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference for this job","type":"string","description":"Must match a person reference in your household."},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employer reference","type":"string","description":"Use the employer reference on the issuer’s payroll evidence."},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"How often this job pays","type":"string","description":"The required number of pay stubs depends on this frequency."},"evidenceIds":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","type":"string"},"maxItems":100,"minItems":1,"title":"Evidence references for this job","type":"array","description":"List the evidence references that support this person’s job."}},"required":["id","memberId","employerId","payFrequency","evidenceIds"],"title":"EmploymentStream","type":"object","x-informationRequirement":"https://example.org/dc-hcv/requirements/employment-income"},"ManualEvidence":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"enum":["unsigned_pay_stub","employer_letter","self_declaration","other"],"title":"Kind","type":"string"},"document":{"$ref":"#/$defs/Document","title":"Original supporting document","description":"Upload the original PDF or image. Staff will review this evidence route."},"description":{"minLength":1,"title":"What this document shows","type":"string","description":"Explain which person and job this document supports."}},"required":["id","kind","document","description"],"title":"ManualEvidence","type":"object","x-acceptanceRoute":"manual-review"},"Member":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference","type":"string","description":"Use this reference when linking a job to this person."},"fullName":{"minLength":1,"title":"Full name","type":"string","description":"Enter the name associated with this person’s evidence."}},"required":["id","fullName"],"title":"Member","type":"object"},"PayStubPayload":{"additionalProperties":false,"properties":{"profile":{"const":"https://example.org/dc-hcv/signed-pay-stub/v1","title":"Profile","type":"string"},"evidenceId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Evidenceid","type":"string"},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employerid","type":"string"},"employeeReference":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employeereference","type":"string"},"issuedOn":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Issuedon","type":"string"},"paymentDate":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Paymentdate","type":"string"},"payPeriodStart":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodstart","type":"string"},"payPeriodEnd":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodend","type":"string"},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"Payfrequency","type":"string"},"payrollSequence":{"maximum":9007199254740991,"minimum":1,"title":"Payrollsequence","type":"integer"},"grossPay":{"pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","title":"Grosspay","type":"string"},"currency":{"const":"USD","title":"Currency","type":"string"},"sourceDocument":{"$ref":"#/$defs/Document"}},"required":["profile","evidenceId","employerId","employeeReference","issuedOn","paymentDate","payPeriodStart","payPeriodEnd","payFrequency","payrollSequence","grossPay","currency","sourceDocument"],"title":"PayStubPayload","type":"object"},"Signature":{"additionalProperties":false,"properties":{"format":{"const":"cms-detached-rfc8785","title":"Format","type":"string"},"cmsDerBase64":{"maxLength":262144,"minLength":1,"title":"Cmsderbase64","type":"string"}},"required":["format","cmsDerBase64"],"title":"Digital signature details","type":"object","description":"This signature is supplied by the issuer. Import the signed record rather than entering signature bytes manually.","x-presentation":{"disclosure":"collapsed"}},"SignedPayStub":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"const":"signed_pay_stub","title":"Kind","type":"string"},"payload":{"$ref":"#/$defs/PayStubPayload","title":"Issuer-signed payroll claims","description":"Import these claims from the employer. Editing them invalidates the signature."},"signature":{"$ref":"#/$defs/Signature","title":"Employer’s digital signature","description":"Use the detached signature supplied by the payroll issuer."}},"required":["id","kind","payload","signature"],"title":"SignedPayStub","type":"object","x-cccev":{"class":"http://data.europa.eu/m8g/Evidence","evidenceType":"https://example.org/dc-hcv/evidence-types/pay-stub","supportsRequirement":"https://example.org/dc-hcv/requirements/employment-income"}}}},"outputSchema":{"type":"object","properties":{"approvalId":{"type":"string"},"reviewPath":{"type":"string"}},"required":["approvalId","reviewPath"],"additionalProperties":false},"parameters":{"path:draftId":"draftId","header:X-Draft-Token":"token","header:X-Profile-Revision":"revision"},"body":"application","mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":["draft-token"],"revisionGuard":true,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"freeze-approval","statusCode":200,"webAction":"prepareApproval"},{"id":"readApproval","name":"readApproval","description":"Show the exact frozen application, evidence fingerprints and validation findings.","title":"Application awaiting your approval","binding":"approval.read","method":"GET","path":"/api/approvals/{approvalId}","inputSchema":{"type":"object","properties":{"approvalId":{"type":"string","minLength":1}},"required":["approvalId"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"approvalId":{"type":"string"},"draftId":{"type":"string"},"draftToken":{"type":"string"},"state":{"enum":["pending","authenticated","approved"]},"snapshot":{"type":"object","properties":{"application":{"additionalProperties":false,"properties":{"profileVersion":{"const":"0.1.0","title":"Profileversion","type":"string"},"applicationId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Application reference","type":"string","description":"Choose a unique reference for this application, beginning with a letter."},"household":{"items":{"$ref":"#/$defs/Member"},"maxItems":50,"minItems":1,"title":"People in your household","type":"array","description":"Add the people whose employment income you are reporting."},"employmentIncome":{"items":{"$ref":"#/$defs/EmploymentStream"},"maxItems":100,"title":"Jobs and employment income","type":"array","description":"Add each person’s job separately, linking it to that person and its supporting evidence."},"evidence":{"items":{"discriminator":{"mapping":{"employer_letter":"#/$defs/ManualEvidence","other":"#/$defs/ManualEvidence","self_declaration":"#/$defs/ManualEvidence","signed_pay_stub":"#/$defs/SignedPayStub","unsigned_pay_stub":"#/$defs/ManualEvidence"},"propertyName":"kind"},"oneOf":[{"$ref":"#/$defs/SignedPayStub"},{"$ref":"#/$defs/ManualEvidence"}]},"maxItems":200,"title":"Supporting evidence","type":"array","description":"Add issuer-signed payroll records or original documents for staff review."}},"required":["profileVersion","applicationId","household","employmentIncome","evidence"],"title":"Your employment evidence","type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","description":"Report each person’s employment income and provide the evidence for each job. This demo collects employment evidence; it does not determine housing eligibility.","x-process":{"href":"/api/forms/dc-hcv/process","policy":"/api/forms/dc-hcv/policy"}},"documentSha256":{"type":"object","additionalProperties":{"type":["string","null"]}},"profileRevision":{"type":"string"},"policyVersion":{"type":"string"},"requirements":{"type":"array"},"validationRules":{"type":"array"},"report":{"type":"object"},"declaration":{"type":"object"}},"required":["application","documentSha256","profileRevision","policyVersion","requirements","validationRules","report","declaration"],"additionalProperties":false},"snapshotSha256":{"type":"string"},"expiresAt":{"type":"string"}},"required":["approvalId","draftId","draftToken","state","snapshot","snapshotSha256","expiresAt"],"additionalProperties":false,"$defs":{"Document":{"additionalProperties":false,"properties":{"objectId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Uploaded document reference","type":"string","description":"Filled in when you upload the original document to this draft."},"sha256":{"pattern":"^[a-f0-9]{64}$","title":"Document fingerprint","type":"string","description":"Must match the original bytes. A hash by itself does not prove who issued a document."},"mediaType":{"enum":["application/pdf","image/png","image/jpeg"],"title":"Document format","type":"string","description":"The upload service accepts PDF, PNG, and JPEG."}},"required":["objectId","sha256","mediaType"],"title":"Document metadata","type":"object","description":"Upload the original employer file. Its stored reference and fingerprint are available in the details.","x-presentation":{"disclosure":"collapsed"}},"EmploymentStream":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Job reference","type":"string","description":"Give each reported job a different reference."},"memberId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference for this job","type":"string","description":"Must match a person reference in your household."},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employer reference","type":"string","description":"Use the employer reference on the issuer’s payroll evidence."},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"How often this job pays","type":"string","description":"The required number of pay stubs depends on this frequency."},"evidenceIds":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","type":"string"},"maxItems":100,"minItems":1,"title":"Evidence references for this job","type":"array","description":"List the evidence references that support this person’s job."}},"required":["id","memberId","employerId","payFrequency","evidenceIds"],"title":"EmploymentStream","type":"object","x-informationRequirement":"https://example.org/dc-hcv/requirements/employment-income"},"ManualEvidence":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"enum":["unsigned_pay_stub","employer_letter","self_declaration","other"],"title":"Kind","type":"string"},"document":{"$ref":"#/$defs/Document","title":"Original supporting document","description":"Upload the original PDF or image. Staff will review this evidence route."},"description":{"minLength":1,"title":"What this document shows","type":"string","description":"Explain which person and job this document supports."}},"required":["id","kind","document","description"],"title":"ManualEvidence","type":"object","x-acceptanceRoute":"manual-review"},"Member":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Person reference","type":"string","description":"Use this reference when linking a job to this person."},"fullName":{"minLength":1,"title":"Full name","type":"string","description":"Enter the name associated with this person’s evidence."}},"required":["id","fullName"],"title":"Member","type":"object"},"PayStubPayload":{"additionalProperties":false,"properties":{"profile":{"const":"https://example.org/dc-hcv/signed-pay-stub/v1","title":"Profile","type":"string"},"evidenceId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Evidenceid","type":"string"},"employerId":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employerid","type":"string"},"employeeReference":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Employeereference","type":"string"},"issuedOn":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Issuedon","type":"string"},"paymentDate":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Paymentdate","type":"string"},"payPeriodStart":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodstart","type":"string"},"payPeriodEnd":{"format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Payperiodend","type":"string"},"payFrequency":{"enum":["weekly","biweekly","semimonthly","monthly"],"title":"Payfrequency","type":"string"},"payrollSequence":{"maximum":9007199254740991,"minimum":1,"title":"Payrollsequence","type":"integer"},"grossPay":{"pattern":"^(0|[1-9][0-9]*)\\.[0-9]{2}$","title":"Grosspay","type":"string"},"currency":{"const":"USD","title":"Currency","type":"string"},"sourceDocument":{"$ref":"#/$defs/Document"}},"required":["profile","evidenceId","employerId","employeeReference","issuedOn","paymentDate","payPeriodStart","payPeriodEnd","payFrequency","payrollSequence","grossPay","currency","sourceDocument"],"title":"PayStubPayload","type":"object"},"Signature":{"additionalProperties":false,"properties":{"format":{"const":"cms-detached-rfc8785","title":"Format","type":"string"},"cmsDerBase64":{"maxLength":262144,"minLength":1,"title":"Cmsderbase64","type":"string"}},"required":["format","cmsDerBase64"],"title":"Digital signature details","type":"object","description":"This signature is supplied by the issuer. Import the signed record rather than entering signature bytes manually.","x-presentation":{"disclosure":"collapsed"}},"SignedPayStub":{"additionalProperties":false,"properties":{"id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,79}$","title":"Id","type":"string"},"kind":{"const":"signed_pay_stub","title":"Kind","type":"string"},"payload":{"$ref":"#/$defs/PayStubPayload","title":"Issuer-signed payroll claims","description":"Import these claims from the employer. Editing them invalidates the signature."},"signature":{"$ref":"#/$defs/Signature","title":"Employer’s digital signature","description":"Use the detached signature supplied by the payroll issuer."}},"required":["id","kind","payload","signature"],"title":"SignedPayStub","type":"object","x-cccev":{"class":"http://data.europa.eu/m8g/Evidence","evidenceType":"https://example.org/dc-hcv/evidence-types/pay-stub","supportsRequirement":"https://example.org/dc-hcv/requirements/employment-income"}}}},"parameters":{"path:approvalId":"approvalId"},"body":null,"mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":[],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"readApproval"},{"id":"approvalDocument","name":"approvalDocument","description":"Read the original evidence bytes retained with this review snapshot.","title":"View original evidence","binding":"approval.document","method":"GET","path":"/api/approvals/{approvalId}/documents/{objectId}","inputSchema":{"type":"object","properties":{"approvalId":{"type":"string","minLength":1},"objectId":{"type":"string","minLength":1}},"required":["approvalId","objectId"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"objectId":{"type":"string"},"contentBase64":{"type":"string"}},"required":["objectId","contentBase64"],"additionalProperties":false},"parameters":{"path:approvalId":"approvalId","path:objectId":"objectId"},"body":null,"mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":[],"revisionGuard":false,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"none","statusCode":200,"webAction":"approvalDocument"},{"id":"cancelApproval","name":"cancelApproval","description":"Revoke this approval request. It cannot be used to submit.","title":"Cancel this review","binding":"approval.cancel","method":"POST","path":"/api/approvals/{approvalId}/cancel","inputSchema":{"type":"object","properties":{"approvalId":{"type":"string","minLength":1},"revision":{"type":"string"}},"required":["approvalId","revision"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"cancelled":{"const":true}},"required":["cancelled"],"additionalProperties":false},"parameters":{"path:approvalId":"approvalId","header:X-Profile-Revision":"revision"},"body":null,"mediaTypes":[],"roles":["account-applicant"],"authorizationPolicy":"browser-account","permissions":[],"revisionGuard":true,"transports":["http","mcp"],"accessContext":"principal","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"cancel-approval","statusCode":200,"webAction":"cancelApproval"},{"id":"authenticateApproval","name":"authenticateApproval","description":"Authenticate freshly with the declared provider for this review. Authentication does not yet approve the application.","title":"Verify with identity provider","binding":"approval.authenticate","method":"POST","path":"/api/approvals/{approvalId}/authenticate","inputSchema":{"type":"object","properties":{"approvalId":{"type":"string","minLength":1},"revision":{"type":"string"}},"required":["approvalId","revision"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"authorizationUrl":{"type":"string"},"expiresAt":{"type":"string"}},"required":["authorizationUrl","expiresAt"],"additionalProperties":false},"parameters":{"path:approvalId":"approvalId","header:X-Profile-Revision":"revision"},"body":null,"mediaTypes":[],"roles":["anonymous-applicant"],"authorizationPolicy":"browser-handshake","permissions":[],"revisionGuard":true,"transports":["http"],"accessContext":"browser-transaction","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"authenticate-approval","statusCode":200,"webAction":"authenticateApproval"},{"id":"confirmApproval","name":"confirmApproval","description":"Explicitly acknowledge and approve the frozen snapshot after fresh trusted-provider authentication.","title":"Approve and submit this snapshot","binding":"approval.confirm","method":"POST","path":"/api/approvals/{approvalId}/confirm","inputSchema":{"type":"object","properties":{"approvalId":{"type":"string","minLength":1},"acknowledgment":{"const":true},"revision":{"type":"string"}},"required":["approvalId","acknowledgment","revision"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"approved":{"const":true},"approvalId":{"type":"string"}},"required":["approved","approvalId"],"additionalProperties":false},"parameters":{"path:approvalId":"approvalId","header:X-Profile-Revision":"revision"},"body":"acknowledgment","mediaTypes":[],"roles":["anonymous-applicant"],"authorizationPolicy":"browser-handshake","permissions":[],"revisionGuard":true,"transports":["http"],"accessContext":"browser-transaction","oidcProvider":null,"responseMode":"json","redirectField":null,"sideEffect":"confirm-approval","statusCode":200,"webAction":"confirmApproval"}],"resources":[{"id":"interface","name":"Employment evidence interface","description":"Annotated schema, revision, readable requirements, operations and remediation.","uri":"govforms://dc-hcv/interface","path":"/api/forms/dc-hcv/interface","binding":"interface","mediaType":"application/json","permissions":["public"],"source":null},{"id":"schema","name":"Employment application schema","description":"Canonical employment application data schema with profile annotations.","uri":"govforms://dc-hcv/schema","path":"/api/forms/dc-hcv/schema","binding":"schema","mediaType":"application/schema+json","permissions":["public"],"source":null},{"id":"process","name":"Employment evidence profile","description":"Authoritative CCCEV requirements and service declarations.","uri":"govforms://dc-hcv/process","path":"/api/forms/dc-hcv/process","binding":"process","mediaType":"application/ld+json","permissions":["public"],"source":null},{"id":"policy","name":"Employment acceptance policy","description":"Authoritative acceptance policy with runtime verifier configuration.","uri":"govforms://dc-hcv/policy","path":"/api/forms/dc-hcv/policy","binding":"policy","mediaType":"application/json","permissions":["public"],"source":null},{"id":"requirements","name":"Readable employment requirements","description":"Readable requirements derived from the current policy and linked SHACL rules.","uri":"govforms://dc-hcv/requirements","path":"/api/forms/dc-hcv/requirements","binding":"requirements","mediaType":"application/json","permissions":["public"],"source":null},{"id":"shape-process","name":"process SHACL rules","description":"Authoritative local SHACL Core definitions for process.","uri":"govforms://dc-hcv/shapes/process","path":"/api/forms/dc-hcv/shapes/process","binding":"shape","mediaType":"text/turtle","permissions":["public"],"source":"process"},{"id":"shape-document-age","name":"document-age SHACL rules","description":"Authoritative local SHACL Core definitions for document-age.","uri":"govforms://dc-hcv/shapes/document-age","path":"/api/forms/dc-hcv/shapes/document-age","binding":"shape","mediaType":"text/turtle","permissions":["public"],"source":"document-age"}],"workflow":["Read the interface and authoritative policy before collecting data. Use synthetic data for this demo. Refresh discovery when the specification revision changes.","Create a draft and retain its token. Draft capabilities expire after one hour or server restart and do not verify applicant identity.","Upload each original source document. Use the returned document identifier, fingerprint, and media type in the application. Stored bytes alone do not prove authenticity.","Collect an application matching the schema. Signed payroll claims and signatures must come from their issuer; never fabricate or edit signed payloads to force validation to pass.","Validate using the current revision and explain returned guidance. On a revision conflict refresh the manifest and review the application before retrying.","Submit only within the user's requested scope. Retain the receipt and retrieve its snapshot with the draft token. After a timeout do not blindly resubmit: this prototype has no idempotency guarantee.","Report the returned outcome and guidance. Never infer acceptance from absent checks. Employment evidence acceptance does not determine housing eligibility. Reviewer operations require separately assigned reviewer authorization; applicant authentication alone grants no reviewer access.","This variant requires a browser account session for applicant operations. Use the declared browser-only sign-in flow; an ID token supplied as an API bearer or MCP argument is not a session.","Provider authentication establishes an account session only. Do not infer identity proofing, delegated agent authority, or approval of an application from login; those require separately declared and implemented checks.","Before submitting, use the declared preparation action to freeze the application. The human reviews the snapshot, authenticates freshly with the trusted provider, and explicitly approves it. Submit the unchanged application with its approval reference. Login alone never grants approval; approval is single-use and expires."],"agentName":"dc-hcv-employment-evidence","agentDescription":"Prepare, validate, and submit synthetic DC HCV employment evidence through the declared local service when requested."},"endpoints":{"interface":"/api/forms/dc-hcv/interface","schema":"/api/forms/dc-hcv/schema","process":"/api/forms/dc-hcv/process","policy":"/api/forms/dc-hcv/policy","requirements":"/api/forms/dc-hcv/requirements","shape-process":"/api/forms/dc-hcv/shapes/process","shape-document-age":"/api/forms/dc-hcv/shapes/document-age","discovery":"/api/forms/dc-hcv","skill":"/api/forms/dc-hcv/skill","createDraft":"/api/drafts","uploadDocument":"/api/drafts/{draft_id}/documents","validate":"/api/drafts/{draft_id}/validate","submit":"/api/drafts/{draft_id}/submit","receipt":"/api/drafts/{draft_id}/receipts/{receipt_id}","listReviewCases":"/api/review/cases","readReviewCase":"/api/review/cases/{case_id}","readReviewDocument":"/api/review/cases/{case_id}/documents/{object_id}","decideReviewCase":"/api/review/cases/{case_id}/decisions","reevaluateReviewCase":"/api/review/cases/{case_id}/reevaluations","login":"/api/account/login","session":"/api/account/session","logout":"/api/account/logout","prepareApproval":"/api/drafts/{draftId}/approval","readApproval":"/api/approvals/{approvalId}","approvalDocument":"/api/approvals/{approvalId}/documents/{objectId}","cancelApproval":"/api/approvals/{approvalId}/cancel","authenticateApproval":"/api/approvals/{approvalId}/authenticate","confirmApproval":"/api/approvals/{approvalId}/confirm"}}