Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / internal/modules/eeo/handler.go |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | internal/modules/eeo/handler.go |
| Original SHA-256 | 017764a88488926861c8a029f09fd34eb9dce9174682df05d19961435144f80c |
| Git blob SHA | bd3ddf9e2764428e2524b9cdef1dedfd1876fc90 |
| Reading-copy SHA-256 | 017764a88488926861c8a029f09fd34eb9dce9174682df05d19961435144f80c |
Every recorded occurrence
These 36 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / internal/modules/eeo/handler.go | feature/opportunity-to-outcome | 720d47fae476b0d38477ae4401697d372b1ea2bc | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | per-tenant-routing | 9bde0f9a74b89d01980fa658e5253acda7528d0c | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-a-shared-core | e0de03ac3a1ec826bd15d0e048e3b02baa23eeff | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-c-slatematch | 5cd60c918301b46ecd6ed3e03e20c395da0062e2 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ws1-ontology-sync | b596f449a32a1016fbd403c36505cc00a1ac9ee6 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | w3-ai-staffing-recommendations | 43d56387270ef4da4cabd794d97ca6a49909bc7d | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ws3-clearance | 4b8e7ce594c068621867f9c9deed0ec64ae6c553 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-d-command-center | 255e7d1d420abf5e277d0cd8c9b14f6f72b6acb9 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-e-dataflow-deploy | 433815a042f9741411e60fa553fe72143e9b10db | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ruthless-debug-sweep | b7d742f8f032984be3817efffa3eb8b13b651c1f | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ai-intelligence-layer | 5d5ddff70393a197c5f54a45280bb5dd42b24755 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-a-opportunity-intelligence | 1675031db74316e100782d063e9eda1a597fe3a1 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | deploy-and-ops | bdacd9d0b4d5998d25fc74bf4007f4c3ec538c7a | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ws2-alias-relationship | e4dada4601c6eb101830f9d223a9655dfa120616 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | vendor-intelligence | fe9796a19c261951d3f2565206c0c1b5ac294465 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-b-screenmatch | 09015496d565a172bcaa15cfe9a8e4b072b13df0 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-e-commercial-stubs | 4437da660539284a400ee380b9b427a300c369ee | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | ai-brain-live | aac32fc49c878cc5bca099459307611562d0bac1 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-d-missionmatch | 3be46ba89edb737182075a2b320509b42dc916f8 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | workstream-b-sam-contract-awards | d5101cceb98e70000cebb31d3e7ac73d747d3a6d | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | w0-aedt-compliance | 39df94f92b2a33f852481fe1954dabed841524bb | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / internal/modules/eeo/handler.go | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
Recovered source transcript
Download complete source text ↓114 lines · 3.8 KB
package eeo
import (
"encoding/json"
"errors"
"fmt"
"net/http"
"strings"
"time"
"github.com/go-chi/chi/v5"
"github.com/missionworkforce/missionmatch/internal/platform/security"
"github.com/missionworkforce/missionmatch/internal/platform/tenant"
)
// Handler serves the adverse impact report and its publication ready export. Both are gated to the
// compliance capability (owner and admin) and mount under the tenant group, so they ride the validated
// session, RBAC, and RLS like every other surface.
type Handler struct{ svc *Service }
// NewHandler builds the handler.
func NewHandler(svc *Service) *Handler { return &Handler{svc: svc} }
// Routes mounts the compliance reporting endpoints.
func (h *Handler) Routes(r chi.Router) {
r.With(security.RequireCapability(security.CapComplianceRead)).Get("/compliance/adverse-impact", h.report)
r.With(security.RequireCapability(security.CapComplianceRead)).Get("/compliance/adverse-impact/export", h.export)
}
func (h *Handler) report(w http.ResponseWriter, r *http.Request) {
rep, err := h.svc.AdverseImpact(r.Context(), time.Now())
if err != nil {
writeErr(w, err)
return
}
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(rep)
}
func (h *Handler) export(w http.ResponseWriter, r *http.Request) {
rep, err := h.svc.AdverseImpact(r.Context(), time.Now())
if err != nil {
writeErr(w, err)
return
}
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.Header().Set("Content-Disposition", `attachment; filename="adverse_impact_report.txt"`)
_, _ = w.Write([]byte(renderText(rep)))
}
func writeErr(w http.ResponseWriter, err error) {
status := http.StatusInternalServerError
msg := "internal error"
switch {
case errors.Is(err, ErrNoCompliance):
status, msg = http.StatusServiceUnavailable, "compliance reporting not configured"
case errors.Is(err, tenant.ErrNoTenant):
status, msg = http.StatusForbidden, "no validated tenant"
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
_ = json.NewEncoder(w).Encode(map[string]string{"error": msg})
}
// renderText produces the publication ready summary: source, the date range covered, the method, and
// each cut, with flagged groups called out. No dashes in the prose.
func renderText(rep Report) string {
var b strings.Builder
b.WriteString("ADVERSE IMPACT REPORT\n")
b.WriteString("Generated at: " + rep.GeneratedAt + "\n")
b.WriteString("Data covered: " + dash(rep.DataFrom) + " to " + dash(rep.DataTo) + "\n\n")
b.WriteString("SOURCE\n" + wrap(rep.Source) + "\n\n")
b.WriteString("METHOD\n" + wrap(rep.Method) + "\n\n")
writeSection(&b, rep.Selection)
writeSection(&b, rep.Screening)
b.WriteString("This report supplies the data for an independent bias audit run by the deploying employer. It is not itself the audit, and vendor tooling does not transfer the employer's liability.\n")
return b.String()
}
func writeSection(b *strings.Builder, sec AnalysisSection) {
b.WriteString(strings.ToUpper(sec.Stage) + "\n")
b.WriteString(fmt.Sprintf("Candidates analyzed: %d. Unknown demographic category: %d.\n", sec.TotalN, sec.UnknownCount))
writeCut(b, "By sex", sec.ByGender)
writeCut(b, "By race or ethnicity", sec.ByRace)
writeCut(b, "Intersectional (sex by race or ethnicity)", sec.Intersectional)
b.WriteString("\n")
}
func writeCut(b *strings.Builder, title string, rows []ImpactRow) {
b.WriteString(" " + title + "\n")
if len(rows) == 0 {
b.WriteString(" No data.\n")
return
}
for _, r := range rows {
flag := ""
if r.Flagged {
flag = " FLAGGED below 0.80"
}
b.WriteString(fmt.Sprintf(" %-28s selected %d of %d, rate %s, impact ratio %s%s\n",
r.Group, r.Selected, r.Considered, r.Rate, r.ImpactRatio, flag))
}
}
func wrap(s string) string { return s }
func dash(s string) string {
if s == "" {
return "not available"
}
return s
}