import { Opaque } from 'type-fest'; import { EntityAdditionalProperties, RelationshipAdditionalProperties } from "./j1/types"; export interface PolicyBuilderElement { id: string; file: string; name?: string; type?: ProcedureType; provider?: string; summary?: string; guidance?: string; applicable?: boolean; resources?: Resource[]; adopted?: boolean; procedures?: string[]; webLink?: string; } export interface PolicyBuilderConfig { organization: Organization; standards?: PolicyBuilderElement[]; policies?: PolicyBuilderElement[]; procedures?: PolicyBuilderElement[]; references?: PolicyBuilderElement[]; } export declare type PolicyBuilderCollectionName = 'standards' | 'policies' | 'procedures' | 'references'; export declare type PolicyBuilderPaths = { output: string; templates?: string; partials: string; }; export interface HipaaConfig { isHIPAACoveredEntity: boolean; isHIPAABusinessAssociate: boolean; isHIPAAGovernmentEntity: boolean; isHIPAAPlanSponsor: boolean; isHIPAAHealthcareClearinghouse: boolean; } export interface HipaaAssessmentConfig { hasHIPAATrainingGap: boolean; hasInfoSecTrainingGap: boolean; hasRiskAssessmentGap: boolean; hasPenTestGap: boolean; lastPenTestDate: boolean; lastPenTestProvider: boolean; penTestFrequency: boolean; nextPenTestDate: boolean; hadDataBreach: boolean; } export interface Organization extends Partial { companyFullName?: string; companyShortName?: string; companyEmailDomain?: string; companyWebsiteURL?: string; companyMailingAddress?: string; companyOverview?: string; contactPhoneNumber?: string; ceoName?: string; ceoEmail?: string; cooName?: string; cooEmail?: string; ctoName?: string; ctoEmail?: string; securityOfficerName?: string; securityOfficerEmail?: string; privacyOfficerName?: string; privacyOfficerEmail?: string; securityCommitteeMembers?: string; wantCustomMkdocsTemplate?: boolean; mkdocsLogoURL?: string; mkdocsThemeColorPrimary?: string; mkdocsThemeColorAccent?: string; securityPolicyURL?: string; privacyPolicyURL?: string; cookiePolicyURL?: string; sourceControl?: string; ticketingSystem?: string; internalHelpdeskURL?: string; cmPortal?: string; ciSystem?: string; hrSystem?: string; supportBYODandMDM?: boolean; haveSecurityScorecard?: boolean; securityScorecardPeriod?: string; securityScorecardURL?: string; expenseReporting?: string; devWikiURL?: string; hipaaTrainingURL?: string; statusPageURL?: string; securityAwarenessTrainingProvider?: string; IdP?: string; CPA?: string; needStandardHIPAA?: boolean; needStandardHITRUST?: boolean; needStandardGDPR?: boolean; needStandardNIST?: boolean; needStandardPCI?: boolean; isServiceProvider?: boolean; mkdocsLogoFile?: string; defaultRevision?: string; } export declare type ProcedureId = Opaque; export declare type AdoptedPolicyBuilderElements = { standards: PolicyBuilderElement[]; policies: PolicyBuilderElement[]; procedures: PolicyBuilderElement[]; references: PolicyBuilderElement[]; }; export interface Resource { name?: string; link?: string; } export declare enum ProcedureType { Administrative = "administrative", Informational = "informational", Operational = "operational", Physical = "physical", Technical = "technical" } export declare type PolicyBuilderQuestion = { type: 'input' | 'confirm' | 'list'; name: keyof Organization; message: string; choices?: () => string[]; validate?: (value: string) => boolean | string; default?: boolean | string; when?: (answers: Record) => boolean; }; export declare type PolicyAssessmentQuestion = { type: 'input' | 'confirm' | 'list'; name: keyof HipaaAssessmentConfig; message: string; choices?: () => string[]; validate?: (value: string) => boolean | string; default?: boolean | string; when?: (answers: Record) => boolean; }; export declare type Gap = { ref: string; title: string; }; export declare type PolicyBuilderStatus = { ok: string[]; errors: string[]; type: string; }; export declare type PolicyBuilderPartialType = 'policies' | 'procedures' | 'references'; export declare type PolicyBuilderPartial = Omit & { tFile?: string; type: PolicyBuilderPartialType; }; export declare type StandardName = string; export declare type AssessmentAnswers = Partial; export declare type AssessmentInput = Organization & AssessmentAnswers & { date: Date; isHIPAACoveredEntityText: string; isHIPAABusinessAssociateText: string; }; export declare type ControlsMappings = { procedures: { id: string; implements: { standard: string; requirements: string[]; controls: string[]; }[]; }[]; }; export declare type AnnotatedRefs = Record; export declare type StandardRequirement = { ref: string; title: string; summary: string; appliesIf?: string; hasGap?: boolean; noadoption?: boolean; adoptedCPs?: PolicyBuilderElement[]; unAdoptedCPs?: PolicyBuilderElement[]; }; export declare type StandardConfig = { standard: string; version: string; webLink: string; sections: { title: string; requirements: StandardRequirement[]; }[]; }; export declare type SecurityEntityType = 'security_policy' | 'security_procedure' | 'security_document'; export declare type SecurityRelationshipType = 'procedure|implements|policy'; export declare type SecurityEntityClass = 'Document' | 'Policy' | 'Procedure'; export declare type SecurityRelationshipClass = 'IMPLEMENTS'; export declare type EntityForSync = EntityAdditionalProperties & { _key: string; _class: SecurityEntityClass[]; _type: SecurityEntityType; _rawData?: Record; }; export declare type RelationshipForSync = RelationshipAdditionalProperties & { _key: string; _class: SecurityRelationshipClass; _type: SecurityRelationshipType; _fromEntityKey: string; _toEntityKey: string; }; export declare type SectionName = 'policies' | 'procedures' | 'references'; export declare type TemplateData = Record>;