@things-factory/compliance 10.1.254 → 10.1.256
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/pages/regulation-detail.d.ts +3 -0
- package/dist-client/pages/regulation-detail.js +45 -3
- package/dist-client/pages/regulation-detail.js.map +1 -1
- package/dist-client/pages/regulations.js +41 -12
- package/dist-client/pages/regulations.js.map +1 -1
- package/dist-client/regulation/regulation-fragments.js +5 -0
- package/dist-client/regulation/regulation-fragments.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/words.js +1 -1
- package/dist-client/words.js.map +1 -1
- package/dist-server/activities/index.js +9 -7
- package/dist-server/activities/index.js.map +1 -1
- package/dist-server/index.d.ts +1 -0
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/service/index.js +2 -1
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/regulation/regulation-mutation.d.ts +1 -0
- package/dist-server/service/regulation/regulation-mutation.js +14 -0
- package/dist-server/service/regulation/regulation-mutation.js.map +1 -1
- package/dist-server/service/regulation/regulation-read.js +11 -2
- package/dist-server/service/regulation/regulation-read.js.map +1 -1
- package/dist-server/service/regulation/regulation-rules.d.ts +22 -3
- package/dist-server/service/regulation/regulation-rules.js +69 -13
- package/dist-server/service/regulation/regulation-rules.js.map +1 -1
- package/dist-server/service/regulation/regulation-service.d.ts +12 -0
- package/dist-server/service/regulation/regulation-service.js +48 -7
- package/dist-server/service/regulation/regulation-service.js.map +1 -1
- package/dist-server/service/regulation/regulation-type.d.ts +4 -0
- package/dist-server/service/regulation/regulation-type.js +16 -0
- package/dist-server/service/regulation/regulation-type.js.map +1 -1
- package/dist-server/service/regulation/regulation.d.ts +2 -0
- package/dist-server/service/regulation/regulation.js +11 -1
- package/dist-server/service/regulation/regulation.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/work-doors.d.ts +1 -0
- package/dist-server/work-doors.js +15 -0
- package/dist-server/work-doors.js.map +1 -0
- package/package.json +14 -14
- package/translations/en.json +22 -1
- package/translations/es.json +22 -1
- package/translations/ja.json +22 -1
- package/translations/ko.json +78 -57
- package/translations/ms.json +22 -1
- package/translations/zh.json +22 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regulation-rules.js","sourceRoot":"","sources":["../../../server/service/regulation/regulation-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { Refusal } from '@things-factory/shell'\n\n/*\n * What a company rule holds to (ADR-0187 decisions 2-4). Pure - the service reads the rows, these say yes or no.\n */\n\n/** Each kind, and the procedure the law asks before a version of it is adopted. */\nexport const REGULATION_KINDS: Record<string, { opinion: boolean; consentWhenUnfavourable: boolean; filing: boolean }> = {\n WORK_RULES: { opinion: true, consentWhenUnfavourable: true, filing: true },\n WORK_RULES_ANNEX: { opinion: true, consentWhenUnfavourable: true, filing: true },\n PRIVACY_POLICY: { opinion: false, consentWhenUnfavourable: false, filing: false },\n PRIVACY_PLAN: { opinion: false, consentWhenUnfavourable: false, filing: false },\n OTHER: { opinion: false, consentWhenUnfavourable: false, filing: false }\n}\n\n/** How an opinion, a consent or a filing was taken. */\nexport const PROCEDURE_METHODS: Record<string, string[]> = {\n OPINION: ['MAJORITY_UNION', 'WORKERS_MEETING', 'SIGNATURES'],\n CONSENT: ['MAJORITY_UNION', 'WORKERS_MEETING', 'SIGNATURES'],\n FILING: ['ONLINE', 'VISIT', 'MAIL']\n}\n\nconst DAY = /^\\d{4}-\\d{2}-\\d{2}$/\nconst CODE = /^[A-Za-z0-9_-]{1,40}$/\n\nexport interface Clause {\n number: string\n title: string | null\n chapter: string | null\n text: string\n}\n\nconst ARTICLE = /^\\s*(?:#{1,6}\\s*)?(?:\\*\\*)?제\\s*(\\d+(?:의\\s*\\d+)?)\\s*조\\s*(?:[((]([^))]*)[))])?(?:\\*\\*)?\\s*(.*)$/\nconst CHAPTER = /^\\s*(?:#{1,6}\\s*)?(?:\\*\\*)?(제\\s*\\d+\\s*장.*?)(?:\\*\\*)?\\s*$/\n\n/**\n * The articles of a text, each from its `제n조(제목)` head up to the next article or chapter. The words before the first\n * article are no article. A chapter head (`제2장 근로시간`) is kept as the chapter of the articles after it.\n */\nexport function clausesOf(body: string | null | undefined): Clause[] {\n const clauses: Clause[] = []\n let chapter: string | null = null\n let current: (Clause & { lines: string[] }) | null = null\n const close = () => {\n if (!current) return\n clauses.push({ number: current.number, title: current.title, chapter: current.chapter, text: current.lines.join('\\n').trim() })\n current = null\n }\n for (const line of (body ?? '').split(/\\r?\\n/)) {\n const article = ARTICLE.exec(line)\n if (article) {\n close()\n current = { number: article[1].replace(/\\s+/g, ''), title: article[2]?.trim() || null, chapter, text: '', lines: article[3] ? [article[3]] : [] }\n continue\n }\n const head = CHAPTER.exec(line)\n if (head) {\n close()\n chapter = head[1].replace(/\\s+/g, ' ').trim()\n continue\n }\n current?.lines.push(line)\n }\n close()\n return clauses\n}\n\nexport interface ClauseChange {\n number: string\n title: string | null\n change: 'ADDED' | 'CHANGED' | 'REMOVED'\n}\n\n/** What a version changed of the one before, article by article - by number; a heading or words that differ is a change. */\nexport function clauseChanges(before: Clause[], after: Clause[]): ClauseChange[] {\n const old = new Map(before.map(one => [one.number, one]))\n const fresh = new Map(after.map(one => [one.number, one]))\n const changes: ClauseChange[] = []\n for (const one of after) {\n const was = old.get(one.number)\n if (!was) changes.push({ number: one.number, title: one.title, change: 'ADDED' })\n else if (was.text !== one.text || (was.title ?? '') !== (one.title ?? '')) changes.push({ number: one.number, title: one.title, change: 'CHANGED' })\n }\n for (const one of before) if (!fresh.has(one.number)) changes.push({ number: one.number, title: one.title, change: 'REMOVED' })\n return changes\n}\n\nexport interface ProcedureFacts {\n kind: string\n day?: string | null\n workersCount?: number | null\n consentCount?: number | null\n files: number\n}\n\nexport interface VersionFacts {\n kind: string\n body?: string | null\n effectiveOn?: string | null\n unfavourable?: boolean | null\n}\n\n/** What a regulation asks before it is written. */\nexport function regulationRefusal(input: { code?: string | null; name?: string | null; kind?: string | null }): Refusal | null {\n if (!input.code || !CODE.test(input.code)) return new Refusal('regulation-code-required', {}, 'give the code - letters, digits, - and _, up to 40')\n if (!input.name?.trim()) return new Refusal('regulation-name-required', {}, 'give the name')\n if (!REGULATION_KINDS[input.kind ?? '']) return new Refusal('regulation-kind-required', {}, 'pick what the rule is')\n return null\n}\n\n/**\n * What a version asks before it is put up for adoption (decision 4). The writer must say whether the change is against\n * the workers - there is no default. A rule of working conditions needs the majority's opinion with its papers; against\n * them, the consent of more than half with its papers.\n */\nexport function adoptionRefusal(version: VersionFacts, procedures: ProcedureFacts[], today: string): Refusal | null {\n if (!clausesOf(version.body).length) return new Refusal('regulation-body-required', {}, 'the text has no article - begin each with 제n조(제목)')\n if (!version.effectiveOn || !DAY.test(version.effectiveOn)) return new Refusal('regulation-effective-required', {}, 'give the day it takes effect, YYYY-MM-DD')\n if (version.effectiveOn < today) return new Refusal('regulation-effective-past', { effectiveOn: version.effectiveOn, today }, `the effective day ${version.effectiveOn} is before today ${today}`)\n if (version.unfavourable == null) return new Refusal('regulation-unfavourable-required', {}, 'say whether the change is against the workers')\n const asks = REGULATION_KINDS[version.kind]\n if (!asks) return new Refusal('regulation-kind-required', {}, 'pick what the rule is')\n if (asks.opinion && !procedures.some(one => one.kind === 'OPINION' && one.files > 0))\n return new Refusal('regulation-opinion-required', {}, \"record the workers' majority opinion with its paper attached\")\n if (asks.consentWhenUnfavourable && version.unfavourable) {\n const consent = procedures.find(one => one.kind === 'CONSENT' && one.files > 0)\n if (!consent) return new Refusal('regulation-consent-required', {}, \"a change against the workers needs the majority's consent recorded with its paper attached\")\n const workers = Number(consent.workersCount ?? 0)\n const consented = Number(consent.consentCount ?? 0)\n if (!(workers > 0) || !(consented * 2 > workers))\n return new Refusal('regulation-consent-short', { consented, workers }, `a change against the workers - the consent (${consented}) is not more than half of the workers (${workers})`)\n }\n return null\n}\n\n/** What a procedure record asks before it is written. */\nexport function procedureRefusal(input: { kind?: string | null; day?: string | null; method?: string | null; workersCount?: number | null; consentCount?: number | null }): Refusal | null {\n if (!PROCEDURE_METHODS[input.kind ?? '']) return new Refusal('regulation-procedure-kind-required', {}, 'pick opinion, consent or filing')\n if (!input.day || !DAY.test(input.day)) return new Refusal('regulation-procedure-day-required', {}, 'give the day, YYYY-MM-DD')\n if (input.method && !PROCEDURE_METHODS[input.kind!].includes(input.method)) return new Refusal('regulation-procedure-method-unknown', {}, 'pick how it was taken')\n if (input.kind === 'CONSENT') {\n if (!(Number.isInteger(input.workersCount) && (input.workersCount as number) > 0)) return new Refusal('regulation-procedure-workers-required', {}, 'give how many workers it was of')\n if (!(Number.isInteger(input.consentCount) && (input.consentCount as number) >= 0 && (input.consentCount as number) <= (input.workersCount as number)))\n return new Refusal('regulation-procedure-consent-invalid', { workers: input.workersCount }, `the consent count is from 0 to the workers (${input.workersCount})`)\n }\n return null\n}\n\n/** Adopted versions as they stand on `today`: the one in force is the latest whose day has come. */\nexport function standingOf<V extends { status: string; effectiveOn?: string | null; version: number }>(versions: V[], today: string): { inForce: V | null; due: V | null } {\n const adopted = versions.filter(one => one.status === 'ADOPTED' && one.effectiveOn).sort((a, b) => (a.effectiveOn! < b.effectiveOn! ? -1 : a.effectiveOn! > b.effectiveOn! ? 1 : a.version - b.version))\n const come = adopted.filter(one => one.effectiveOn! <= today)\n return { inForce: come[come.length - 1] ?? null, due: adopted.find(one => one.effectiveOn! > today) ?? null }\n}\n\n/** Where an adopted version stands on `today`. */\nexport function periodOfVersion(version: { status: string; effectiveOn?: string | null; id: string }, standing: { inForce: { id: string } | null }, today: string): 'DRAFT' | 'IN_APPROVAL' | 'DUE' | 'IN_FORCE' | 'PAST' {\n if (version.status !== 'ADOPTED') return version.status as 'DRAFT' | 'IN_APPROVAL'\n if (standing.inForce?.id === version.id) return 'IN_FORCE'\n return version.effectiveOn! > today ? 'DUE' : 'PAST'\n}\n\n/** What may change on an adopted version - nothing but the workers count the filing reads. A draft changes freely. */\nexport function changeRefusal(status: string): Refusal | null {\n if (status === 'ADOPTED') return new Refusal('regulation-adopted-fixed', {}, 'an adopted version stays as it was - put up a new version to change it')\n if (status === 'IN_APPROVAL') return new Refusal('regulation-in-approval', {}, 'a version in approval is taken back before it changes')\n return null\n}\n\n/** A procedure is recorded on a draft; a filing also after adoption, since it follows it. */\nexport function procedureWriteRefusal(status: string, kind: string): Refusal | null {\n if (status === 'DRAFT') return null\n if (status === 'ADOPTED' && kind === 'FILING') return null\n return new Refusal('regulation-procedure-fixed', {}, kind === 'FILING' ? 'a filing is recorded once the version is adopted' : 'the procedure of a version in approval or adopted stays as it was')\n}\n"]}
|
|
1
|
+
{"version":3,"file":"regulation-rules.js","sourceRoot":"","sources":["../../../server/service/regulation/regulation-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { Refusal } from '@things-factory/shell'\n\n/*\n * What a company rule holds to (ADR-0187 decisions 2-4). Pure - the service reads the rows, these say yes or no.\n */\n\n/** Each kind, and the procedure the law asks before a version of it is adopted. */\nexport const REGULATION_KINDS: Record<string, { opinion: boolean; consentWhenUnfavourable: boolean; filing: boolean }> = {\n WORK_RULES: { opinion: true, consentWhenUnfavourable: true, filing: true },\n WORK_RULES_ANNEX: { opinion: true, consentWhenUnfavourable: true, filing: true },\n PRIVACY_POLICY: { opinion: false, consentWhenUnfavourable: false, filing: false },\n PRIVACY_PLAN: { opinion: false, consentWhenUnfavourable: false, filing: false },\n OTHER: { opinion: false, consentWhenUnfavourable: false, filing: false }\n}\n\n/** How an opinion, a consent or a filing was taken. */\nexport const PROCEDURE_METHODS: Record<string, string[]> = {\n OPINION: ['MAJORITY_UNION', 'WORKERS_MEETING', 'SIGNATURES'],\n CONSENT: ['MAJORITY_UNION', 'WORKERS_MEETING', 'SIGNATURES'],\n FILING: ['ONLINE', 'VISIT', 'MAIL']\n}\n\nconst DAY = /^\\d{4}-\\d{2}-\\d{2}$/\nconst CODE = /^[A-Za-z0-9_-]{1,40}$/\n\nexport interface Clause {\n number: string\n title: string | null\n chapter: string | null\n heading: string\n text: string\n}\n\nconst ARTICLE = /^\\s*(?:#{1,6}\\s*)?(?:\\*\\*)?제\\s*(\\d+(?:의\\s*\\d+)?)\\s*조\\s*(?:[((]([^))]*)[))])?(?:\\*\\*)?\\s*(.*)$/\nconst CHAPTER = /^\\s*(?:#{1,6}\\s*)?(?:\\*\\*)?(제\\s*\\d+\\s*장.*?)(?:\\*\\*)?\\s*$/\nconst SECTION = /^\\s*(?:#{1,6}\\s*)?(?:\\*\\*)?<?\\s*(제\\s*\\d+\\s*절[^>]*?)\\s*>?(?:\\*\\*)?\\s*$/\nconst ADDENDA = /^\\s*(?:#{1,6}\\s*)?(?:\\*\\*)?부\\s*칙(?:\\*\\*)?\\s*(?:<[^>]*>)?\\s*$/\nconst APPENDIX = /^\\s*(?:#{1,6}\\s*)?\\[[^\\]]+\\]/\n\n/** How an article is named on the page - 「제3조(휴게)」, in the addenda 「부칙 제1조(시행일)」. */\nconst headingOf = (number: string, title: string | null) => {\n const addenda = number.startsWith('부칙')\n return `${addenda ? '부칙 ' : ''}제${addenda ? number.slice(2) : number}조${title ? `(${title})` : ''}`\n}\n\n/**\n * The parts of a text (ADR-0187 decision 2): its articles, each from its `제n조(제목)` head up to the next article or\n * head, and the appendix - from the first line headed in brackets (`[별표 1]`) to the end. The words before the first\n * article are no article. A chapter (`제2장 근로시간`) and a section (`제1절 근로시간`) are kept as the chapter of the\n * articles after them. The articles after 「부칙」 are numbered `부칙1`, `부칙2` - apart from the body's.\n */\nexport function partsOf(body: string | null | undefined): { clauses: Clause[]; appendix: string | null } {\n const clauses: Clause[] = []\n let chapter: string | null = null\n let section: string | null = null\n let addenda = false\n let current: (Omit<Clause, 'text' | 'heading'> & { lines: string[] }) | null = null\n const close = () => {\n if (!current) return\n clauses.push({ number: current.number, title: current.title, chapter: current.chapter, heading: headingOf(current.number, current.title), text: current.lines.join('\\n').trim() })\n current = null\n }\n const lines = (body ?? '').split(/\\r?\\n/)\n for (const [index, line] of lines.entries()) {\n if (APPENDIX.test(line)) {\n close()\n return { clauses, appendix: lines.slice(index).join('\\n').trim() || null }\n }\n const article = ARTICLE.exec(line)\n if (article) {\n close()\n const number = article[1].replace(/\\s+/g, '')\n current = { number: addenda ? `부칙${number}` : number, title: article[2]?.trim() || null, chapter: [chapter, section].filter(Boolean).join(' · ') || null, lines: article[3] ? [article[3]] : [] }\n continue\n }\n const head = CHAPTER.exec(line)\n if (head) {\n close()\n chapter = head[1].replace(/\\s+/g, ' ').trim()\n section = null\n continue\n }\n const part = SECTION.exec(line)\n if (part) {\n close()\n section = part[1].replace(/\\s+/g, ' ').trim()\n continue\n }\n if (ADDENDA.test(line)) {\n close()\n addenda = true\n chapter = '부칙'\n section = null\n continue\n }\n current?.lines.push(line)\n }\n close()\n return { clauses, appendix: null }\n}\n\n/** The articles of a text. */\nexport const clausesOf = (body: string | null | undefined): Clause[] => partsOf(body).clauses\n\nexport interface ClauseChange {\n number: string\n title: string | null\n heading: string\n change: 'ADDED' | 'CHANGED' | 'REMOVED'\n}\n\n/** What a version changed of the one before, article by article - by number; a heading or words that differ is a change. */\nexport function clauseChanges(before: Clause[], after: Clause[]): ClauseChange[] {\n const old = new Map(before.map(one => [one.number, one]))\n const fresh = new Map(after.map(one => [one.number, one]))\n const changes: ClauseChange[] = []\n for (const one of after) {\n const was = old.get(one.number)\n if (!was) changes.push({ number: one.number, title: one.title, heading: one.heading, change: 'ADDED' })\n else if (was.text !== one.text || (was.title ?? '') !== (one.title ?? '')) changes.push({ number: one.number, title: one.title, heading: one.heading, change: 'CHANGED' })\n }\n for (const one of before) if (!fresh.has(one.number)) changes.push({ number: one.number, title: one.title, heading: one.heading, change: 'REMOVED' })\n return changes\n}\n\nexport interface ProcedureFacts {\n kind: string\n day?: string | null\n workersCount?: number | null\n consentCount?: number | null\n files: number\n}\n\nexport interface VersionFacts {\n kind: string\n body?: string | null\n effectiveOn?: string | null\n unfavourable?: boolean | null\n}\n\n/** What a regulation asks before it is written. */\nexport function regulationRefusal(input: { code?: string | null; name?: string | null; kind?: string | null }): Refusal | null {\n if (!input.code || !CODE.test(input.code)) return new Refusal('regulation-code-required', {}, 'give the code - letters, digits, - and _, up to 40')\n if (!input.name?.trim()) return new Refusal('regulation-name-required', {}, 'give the name')\n if (!REGULATION_KINDS[input.kind ?? '']) return new Refusal('regulation-kind-required', {}, 'pick what the rule is')\n return null\n}\n\n/**\n * What a version asks before it is put up for adoption (decision 4). The writer must say whether the change is against\n * the workers - there is no default. A rule of working conditions needs the majority's opinion with its papers; against\n * them, the consent of more than half with its papers.\n */\nexport function adoptionRefusal(version: VersionFacts, procedures: ProcedureFacts[], today: string): Refusal | null {\n if (!clausesOf(version.body).length) return new Refusal('regulation-body-required', {}, 'the text has no article - begin each with 제n조(제목)')\n if (!version.effectiveOn || !DAY.test(version.effectiveOn)) return new Refusal('regulation-effective-required', {}, 'give the day it takes effect, YYYY-MM-DD')\n if (version.effectiveOn < today) return new Refusal('regulation-effective-past', { effectiveOn: version.effectiveOn, today }, `the effective day ${version.effectiveOn} is before today ${today}`)\n if (version.unfavourable == null) return new Refusal('regulation-unfavourable-required', {}, 'say whether the change is against the workers')\n const asks = REGULATION_KINDS[version.kind]\n if (!asks) return new Refusal('regulation-kind-required', {}, 'pick what the rule is')\n if (asks.opinion && !procedures.some(one => one.kind === 'OPINION' && one.files > 0))\n return new Refusal('regulation-opinion-required', {}, \"record the workers' majority opinion with its paper attached\")\n if (asks.consentWhenUnfavourable && version.unfavourable) {\n const consent = procedures.find(one => one.kind === 'CONSENT' && one.files > 0)\n if (!consent) return new Refusal('regulation-consent-required', {}, \"a change against the workers needs the majority's consent recorded with its paper attached\")\n const workers = Number(consent.workersCount ?? 0)\n const consented = Number(consent.consentCount ?? 0)\n if (!(workers > 0) || !(consented * 2 > workers))\n return new Refusal('regulation-consent-short', { consented, workers }, `a change against the workers - the consent (${consented}) is not more than half of the workers (${workers})`)\n }\n return null\n}\n\n/**\n * What a version asks before it is registered as in force already (ADR-0187 decision 3, amendment 2): the first version\n * of its rule to be adopted, still being written, with a text, a day come by today and the original attached. No article\n * is asked - a table of amounts has none; no procedure is asked - it was taken before the system.\n */\nexport function inForceRefusal(version: { status: string; body?: string | null; effectiveOn?: string | null }, adoptedBefore: number, originals: number, today: string): Refusal | null {\n if (version.status !== 'DRAFT') return new Refusal('regulation-register-not-draft', {}, 'only a version being written is registered')\n if (adoptedBefore) return new Refusal('regulation-in-force-first-only', {}, 'the rule has a version adopted or in approval - a change of it goes through approval')\n if (!version.body?.trim()) return new Refusal('regulation-body-empty', {}, 'write the text of the rule')\n if (!version.effectiveOn || !DAY.test(version.effectiveOn)) return new Refusal('regulation-effective-required', {}, 'give the day it takes effect, YYYY-MM-DD')\n if (version.effectiveOn > today) return new Refusal('regulation-in-force-future', { effectiveOn: version.effectiveOn, today }, `the effective day ${version.effectiveOn} is after today ${today} - a rule to take effect later is adopted through approval`)\n if (!originals) return new Refusal('regulation-original-required', {}, 'attach the original of the rule')\n return null\n}\n\n/** What a procedure record asks before it is written. */\nexport function procedureRefusal(input: { kind?: string | null; day?: string | null; method?: string | null; workersCount?: number | null; consentCount?: number | null }): Refusal | null {\n if (!PROCEDURE_METHODS[input.kind ?? '']) return new Refusal('regulation-procedure-kind-required', {}, 'pick opinion, consent or filing')\n if (!input.day || !DAY.test(input.day)) return new Refusal('regulation-procedure-day-required', {}, 'give the day, YYYY-MM-DD')\n if (input.method && !PROCEDURE_METHODS[input.kind!].includes(input.method)) return new Refusal('regulation-procedure-method-unknown', {}, 'pick how it was taken')\n if (input.kind === 'CONSENT') {\n if (!(Number.isInteger(input.workersCount) && (input.workersCount as number) > 0)) return new Refusal('regulation-procedure-workers-required', {}, 'give how many workers it was of')\n if (!(Number.isInteger(input.consentCount) && (input.consentCount as number) >= 0 && (input.consentCount as number) <= (input.workersCount as number)))\n return new Refusal('regulation-procedure-consent-invalid', { workers: input.workersCount }, `the consent count is from 0 to the workers (${input.workersCount})`)\n }\n return null\n}\n\n/** Adopted versions as they stand on `today`: the one in force is the latest whose day has come. */\nexport function standingOf<V extends { status: string; effectiveOn?: string | null; version: number }>(versions: V[], today: string): { inForce: V | null; due: V | null } {\n const adopted = versions.filter(one => one.status === 'ADOPTED' && one.effectiveOn).sort((a, b) => (a.effectiveOn! < b.effectiveOn! ? -1 : a.effectiveOn! > b.effectiveOn! ? 1 : a.version - b.version))\n const come = adopted.filter(one => one.effectiveOn! <= today)\n return { inForce: come[come.length - 1] ?? null, due: adopted.find(one => one.effectiveOn! > today) ?? null }\n}\n\n/** Where an adopted version stands on `today`. */\nexport function periodOfVersion(version: { status: string; effectiveOn?: string | null; id: string }, standing: { inForce: { id: string } | null }, today: string): 'DRAFT' | 'IN_APPROVAL' | 'DUE' | 'IN_FORCE' | 'PAST' {\n if (version.status !== 'ADOPTED') return version.status as 'DRAFT' | 'IN_APPROVAL'\n if (standing.inForce?.id === version.id) return 'IN_FORCE'\n return version.effectiveOn! > today ? 'DUE' : 'PAST'\n}\n\n/** What may change on an adopted version - nothing but the workers count the filing reads. A draft changes freely. */\nexport function changeRefusal(status: string): Refusal | null {\n if (status === 'ADOPTED') return new Refusal('regulation-adopted-fixed', {}, 'an adopted version stays as it was - put up a new version to change it')\n if (status === 'IN_APPROVAL') return new Refusal('regulation-in-approval', {}, 'a version in approval is taken back before it changes')\n return null\n}\n\n/** A procedure is recorded on a draft; a filing also after adoption, since it follows it. */\nexport function procedureWriteRefusal(status: string, kind: string): Refusal | null {\n if (status === 'DRAFT') return null\n if (status === 'ADOPTED' && kind === 'FILING') return null\n return new Refusal('regulation-procedure-fixed', {}, kind === 'FILING' ? 'a filing is recorded once the version is adopted' : 'the procedure of a version in approval or adopted stays as it was')\n}\n"]}
|
|
@@ -4,6 +4,8 @@ import { Regulation, RegulationProcedure, RegulationVersion } from './regulation
|
|
|
4
4
|
import { NewRegulation, NewRegulationProcedure, RegulationPatch, RegulationVersionPatch } from './regulation-type';
|
|
5
5
|
/** The papers of a procedure hang on it under this `refType` (attachment-base). */
|
|
6
6
|
export declare const REGULATION_PROCEDURE_REF_TYPE = "RegulationProcedure";
|
|
7
|
+
/** The original of a version registered as in force hangs on the version under this `refType`. */
|
|
8
|
+
export declare const REGULATION_ORIGINAL_REF_TYPE = "RegulationVersion";
|
|
7
9
|
/** The help source of the articles (ADR-0187 decision 12). */
|
|
8
10
|
export declare const REGULATION_HELP_SOURCE = "regulation";
|
|
9
11
|
/** The announcement trigger of an adoption (ADR-0187 decision 6). */
|
|
@@ -37,6 +39,16 @@ export declare function proceduresOf(tx: EntityManager, domain: {
|
|
|
37
39
|
export declare function previousAdopted(tx: EntityManager, version: RegulationVersion): Promise<RegulationVersion | null>;
|
|
38
40
|
/** Puts a version up for adoption - or adopts it at once where the domain names no approver (decision 5). */
|
|
39
41
|
export declare function submitRegulationVersion(id: string, context: ResolverContext): Promise<RegulationVersion>;
|
|
42
|
+
/**
|
|
43
|
+
* Registers the first version of a rule as in force already (decision 3, amendment 2): adopted as it stands from its own
|
|
44
|
+
* day, its original attached, its articles cut and indexed - with no approval, since nothing is decided, and no
|
|
45
|
+
* announcement, since the employees live under it already.
|
|
46
|
+
*/
|
|
47
|
+
export declare function registerRegulationInForce(id: string, files: FileUpload[] | undefined, context: ResolverContext): Promise<RegulationVersion>;
|
|
48
|
+
/** How many originals each version carries. */
|
|
49
|
+
export declare function originalsOf(tx: EntityManager, domain: {
|
|
50
|
+
id: string;
|
|
51
|
+
}, versionIds: string[]): Promise<Map<string, number>>;
|
|
40
52
|
/** Takes back a version in approval - it is being written again. */
|
|
41
53
|
export declare function withdrawRegulationVersion(id: string, context: ResolverContext): Promise<RegulationVersion>;
|
|
42
54
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REGULATION_ADOPTED_TRIGGER = exports.REGULATION_HELP_SOURCE = exports.REGULATION_PROCEDURE_REF_TYPE = void 0;
|
|
3
|
+
exports.REGULATION_ADOPTED_TRIGGER = exports.REGULATION_HELP_SOURCE = exports.REGULATION_ORIGINAL_REF_TYPE = exports.REGULATION_PROCEDURE_REF_TYPE = void 0;
|
|
4
4
|
exports.versionOf = versionOf;
|
|
5
5
|
exports.createRegulation = createRegulation;
|
|
6
6
|
exports.updateRegulation = updateRegulation;
|
|
@@ -13,6 +13,8 @@ exports.deleteRegulationProcedure = deleteRegulationProcedure;
|
|
|
13
13
|
exports.proceduresOf = proceduresOf;
|
|
14
14
|
exports.previousAdopted = previousAdopted;
|
|
15
15
|
exports.submitRegulationVersion = submitRegulationVersion;
|
|
16
|
+
exports.registerRegulationInForce = registerRegulationInForce;
|
|
17
|
+
exports.originalsOf = originalsOf;
|
|
16
18
|
exports.withdrawRegulationVersion = withdrawRegulationVersion;
|
|
17
19
|
exports.decideRegulationVersion = decideRegulationVersion;
|
|
18
20
|
exports.announcementsOfVersions = announcementsOfVersions;
|
|
@@ -32,10 +34,13 @@ const regulation_rules_1 = require("./regulation-rules");
|
|
|
32
34
|
* Writing a company rule and adopting its versions (ADR-0187 decisions 2-6). The one way a version is adopted: through
|
|
33
35
|
* the work door `Compliance Regulation Adopt` - raised for approval where the domain names approvers, adopted at once
|
|
34
36
|
* and written down where it names none. Adopting cuts its articles, tells the employees through the announcement of
|
|
35
|
-
* the trigger `compliance.regulation-adopted`, and has the help index the articles again.
|
|
37
|
+
* the trigger `compliance.regulation-adopted`, and has the help index the articles again. A rule in force before the
|
|
38
|
+
* system is registered as it stands instead - its first version, with its original attached (amendment 2).
|
|
36
39
|
*/
|
|
37
40
|
/** The papers of a procedure hang on it under this `refType` (attachment-base). */
|
|
38
41
|
exports.REGULATION_PROCEDURE_REF_TYPE = 'RegulationProcedure';
|
|
42
|
+
/** The original of a version registered as in force hangs on the version under this `refType`. */
|
|
43
|
+
exports.REGULATION_ORIGINAL_REF_TYPE = 'RegulationVersion';
|
|
39
44
|
/** The help source of the articles (ADR-0187 decision 12). */
|
|
40
45
|
exports.REGULATION_HELP_SOURCE = 'regulation';
|
|
41
46
|
/** The announcement trigger of an adoption (ADR-0187 decision 6). */
|
|
@@ -255,7 +260,7 @@ async function submitRegulationVersion(id, context) {
|
|
|
255
260
|
headline,
|
|
256
261
|
reason: [
|
|
257
262
|
...(version.changeSummary ? [`바뀐 곳: ${version.changeSummary}`] : []),
|
|
258
|
-
...(changes.length ? [`조문: ${changes.map(one =>
|
|
263
|
+
...(changes.length ? [`조문: ${changes.map(one => `${one.heading} ${words[one.change]}`).join(', ')}`] : []),
|
|
259
264
|
`불리한 변경: ${version.unfavourable ? '예' : '아니오'}`,
|
|
260
265
|
...procedures.map(one => `${{ OPINION: '의견 청취', CONSENT: '동의', FILING: '신고' }[one.kind]} ${one.day}${one.kind === 'CONSENT' ? ` · ${one.consentCount}/${one.workersCount}` : ''} · 첨부 ${one.files}`)
|
|
261
266
|
],
|
|
@@ -268,6 +273,45 @@ async function submitRegulationVersion(id, context) {
|
|
|
268
273
|
saved.activityInstanceId = instance.id;
|
|
269
274
|
return await tx.getRepository(regulation_1.RegulationVersion).save(saved);
|
|
270
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* Registers the first version of a rule as in force already (decision 3, amendment 2): adopted as it stands from its own
|
|
278
|
+
* day, its original attached, its articles cut and indexed - with no approval, since nothing is decided, and no
|
|
279
|
+
* announcement, since the employees live under it already.
|
|
280
|
+
*/
|
|
281
|
+
async function registerRegulationInForce(id, files, context) {
|
|
282
|
+
const { domain, user, tx } = context.state;
|
|
283
|
+
const version = await versionOf(tx, domain, id);
|
|
284
|
+
const adoptedBefore = await tx.getRepository(regulation_1.RegulationVersion).count({
|
|
285
|
+
where: { regulation: { id: version.regulationId }, status: (0, typeorm_1.In)([regulation_1.RegulationVersionStatus.ADOPTED, regulation_1.RegulationVersionStatus.IN_APPROVAL]) }
|
|
286
|
+
});
|
|
287
|
+
const refusal = (0, regulation_rules_1.inForceRefusal)(version, adoptedBefore, files?.length ?? 0, (0, employee_reader_1.todayIn)(domain));
|
|
288
|
+
if (refusal)
|
|
289
|
+
throw refusal;
|
|
290
|
+
version.status = regulation_1.RegulationVersionStatus.ADOPTED;
|
|
291
|
+
version.registeredInForce = true;
|
|
292
|
+
version.adoptedAt = new Date();
|
|
293
|
+
version.adoptedBy = user;
|
|
294
|
+
version.adoptionNote = null;
|
|
295
|
+
version.updater = user;
|
|
296
|
+
const saved = await tx.getRepository(regulation_1.RegulationVersion).save(version);
|
|
297
|
+
await keepClauses(saved, context);
|
|
298
|
+
for (const file of files ?? [])
|
|
299
|
+
await (0, attachment_base_1.createAttachment)(null, { attachment: { file, refType: exports.REGULATION_ORIGINAL_REF_TYPE, refBy: saved.id } }, context);
|
|
300
|
+
(0, help_1.invalidateHelpSource)(exports.REGULATION_HELP_SOURCE, domain.id);
|
|
301
|
+
return saved;
|
|
302
|
+
}
|
|
303
|
+
/** How many originals each version carries. */
|
|
304
|
+
async function originalsOf(tx, domain, versionIds) {
|
|
305
|
+
const rows = versionIds.length ? await tx.getRepository(attachment_base_1.Attachment).find({ where: { domain: { id: domain.id }, refType: exports.REGULATION_ORIGINAL_REF_TYPE, refBy: (0, typeorm_1.In)(versionIds) } }) : [];
|
|
306
|
+
return rows.reduce((counts, one) => counts.set(one.refBy, (counts.get(one.refBy) ?? 0) + 1), new Map());
|
|
307
|
+
}
|
|
308
|
+
/** The articles of an adopted version, cut from its text and kept. */
|
|
309
|
+
async function keepClauses(version, context) {
|
|
310
|
+
const { domain, tx } = context.state;
|
|
311
|
+
await tx.getRepository(regulation_1.RegulationClause).delete({ version: { id: version.id } });
|
|
312
|
+
for (const [rank, one] of (0, regulation_rules_1.clausesOf)(version.body).entries())
|
|
313
|
+
await tx.getRepository(regulation_1.RegulationClause).save({ domain, version, rank, ...one });
|
|
314
|
+
}
|
|
271
315
|
/** Takes back a version in approval - it is being written again. */
|
|
272
316
|
async function withdrawRegulationVersion(id, context) {
|
|
273
317
|
const { domain, user, tx } = context.state;
|
|
@@ -320,10 +364,7 @@ async function adopt(version, context) {
|
|
|
320
364
|
version.adoptedBy = user;
|
|
321
365
|
version.adoptionNote = null;
|
|
322
366
|
const saved = await tx.getRepository(regulation_1.RegulationVersion).save(version);
|
|
323
|
-
|
|
324
|
-
await tx.getRepository(regulation_1.RegulationClause).delete({ version: { id: saved.id } });
|
|
325
|
-
for (const [rank, one] of clauses.entries())
|
|
326
|
-
await tx.getRepository(regulation_1.RegulationClause).save({ domain, version: saved, rank, ...one });
|
|
367
|
+
await keepClauses(saved, context);
|
|
327
368
|
const regulation = version.regulation;
|
|
328
369
|
const announcement = await (0, announcement_1.announce)(context, {
|
|
329
370
|
trigger: exports.REGULATION_ADOPTED_TRIGGER,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regulation-service.js","sourceRoot":"","sources":["../../../server/service/regulation/regulation-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport { EntityManager, In } from 'typeorm'\n\nimport { decisionOf } from '@things-factory/accounting'\nimport { announce, announcementsOfSource } from '@things-factory/announcement'\nimport { Attachment, createAttachment } from '@things-factory/attachment-base'\nimport { invalidateHelpSource } from '@things-factory/help'\nimport { Refusal } from '@things-factory/shell'\nimport { abort, activityNamed, declaredDoor, issue, passWorkDoor, seatReader, WorkDoorNotUsed } from '@things-factory/worklist'\n\nimport { REGULATION_ADOPT_ACTIVITY } from '../../activities/regulation-activity-names'\nimport { todayIn } from '../common/employee-reader'\nimport { Regulation, RegulationClause, RegulationKind, RegulationProcedure, RegulationProcedureKind, RegulationVersion, RegulationVersionStatus } from './regulation'\nimport { adoptionRefusal, changeRefusal, clauseChanges, clausesOf, procedureRefusal, procedureWriteRefusal, regulationRefusal, standingOf } from './regulation-rules'\nimport { NewRegulation, NewRegulationProcedure, RegulationPatch, RegulationVersionPatch } from './regulation-type'\n\n/*\n * Writing a company rule and adopting its versions (ADR-0187 decisions 2-6). The one way a version is adopted: through\n * the work door `Compliance Regulation Adopt` - raised for approval where the domain names approvers, adopted at once\n * and written down where it names none. Adopting cuts its articles, tells the employees through the announcement of\n * the trigger `compliance.regulation-adopted`, and has the help index the articles again.\n */\n\n/** The papers of a procedure hang on it under this `refType` (attachment-base). */\nexport const REGULATION_PROCEDURE_REF_TYPE = 'RegulationProcedure'\n/** The help source of the articles (ADR-0187 decision 12). */\nexport const REGULATION_HELP_SOURCE = 'regulation'\n/** The announcement trigger of an adoption (ADR-0187 decision 6). */\nexport const REGULATION_ADOPTED_TRIGGER = 'compliance.regulation-adopted'\n\nconst text = (value: unknown) => (typeof value === 'string' && value.trim() ? value.trim() : null)\nconst NOT_FOUND = () => new Refusal('regulation-not-found', {}, 'the rule was not found. reload and try again.')\n\nasync function regulationOf(tx: EntityManager, domain: { id: string }, id: string): Promise<Regulation> {\n const row = await tx.getRepository(Regulation).findOne({ where: { id, domain: { id: domain.id } } as any })\n if (!row) throw NOT_FOUND()\n return row\n}\n\nexport async function versionOf(tx: EntityManager, domain: { id: string }, id: string): Promise<RegulationVersion> {\n const row = await tx.getRepository(RegulationVersion).findOne({ where: { id, domain: { id: domain.id } } as any, relations: ['regulation'] })\n if (!row) throw NOT_FOUND()\n return row\n}\n\n/** A new rule, with its first version to write. */\nexport async function createRegulation(input: NewRegulation, context: ResolverContext): Promise<Regulation> {\n const { domain, user, tx } = context.state\n const refusal = regulationRefusal(input)\n if (refusal) throw refusal\n const code = input.code.trim()\n if (await tx.getRepository(Regulation).findOne({ where: { domain: { id: domain.id }, code } as any }))\n throw new Refusal('regulation-code-taken', { code }, `the code ${code} is taken - give another`)\n const regulation = await tx.getRepository(Regulation).save({\n domain,\n code,\n name: input.name.trim(),\n kind: input.kind,\n topics: [...new Set((input.topics ?? []).map(one => one.trim()).filter(Boolean))],\n rank: input.rank ?? 0,\n creator: user,\n updater: user\n } as any)\n await tx.getRepository(RegulationVersion).save({ domain, regulation, version: 1, body: input.body ?? null, status: RegulationVersionStatus.DRAFT, creator: user, updater: user } as any)\n return regulation as Regulation\n}\n\n/** The name, topics and place of a rule; its kind only while none of its versions is adopted. */\nexport async function updateRegulation(id: string, patch: RegulationPatch, context: ResolverContext): Promise<Regulation> {\n const { domain, user, tx } = context.state\n const regulation = await regulationOf(tx, domain, id)\n if (patch.kind !== undefined && patch.kind !== regulation.kind) {\n const adopted = await tx.getRepository(RegulationVersion).count({ where: { regulation: { id }, status: In([RegulationVersionStatus.ADOPTED, RegulationVersionStatus.IN_APPROVAL]) } as any })\n if (adopted) throw new Refusal('regulation-kind-fixed', {}, 'the kind of a rule with an adopted version stays - its procedure was taken for it')\n }\n const refusal = regulationRefusal({ code: regulation.code, name: patch.name ?? regulation.name, kind: patch.kind ?? regulation.kind })\n if (refusal) throw refusal\n if (patch.name !== undefined) regulation.name = patch.name.trim()\n if (patch.kind !== undefined) regulation.kind = patch.kind\n if (patch.topics !== undefined) regulation.topics = [...new Set((patch.topics ?? []).map(one => one.trim()).filter(Boolean))]\n if (patch.rank !== undefined) regulation.rank = patch.rank ?? 0\n regulation.updater = user\n const saved = await tx.getRepository(Regulation).save(regulation)\n invalidateHelpSource(REGULATION_HELP_SOURCE, domain.id)\n return saved\n}\n\n/** A rule with no adopted version is deleted with its drafts; one adopted once is kept - its employees were told of it. */\nexport async function deleteRegulations(ids: string[], context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n for (const id of ids) {\n const regulation = await tx.getRepository(Regulation).findOne({ where: { id, domain: { id: domain.id } } as any })\n if (!regulation) continue\n const kept = await tx.getRepository(RegulationVersion).count({ where: { regulation: { id }, status: In([RegulationVersionStatus.ADOPTED, RegulationVersionStatus.IN_APPROVAL]) } as any })\n if (kept) throw new Refusal('regulation-adopted-kept', { name: regulation.name }, `${regulation.name} has a version adopted or in approval - a rule its employees were told of is kept`)\n await tx.getRepository(Regulation).delete(regulation.id)\n }\n return true\n}\n\n/** The next version to write, its text the latest version's. One is written at a time. */\nexport async function newRegulationVersion(regulationId: string, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const regulation = await regulationOf(tx, domain, regulationId)\n const versions = await tx.getRepository(RegulationVersion).find({ where: { regulation: { id: regulationId } } as any, order: { version: 'DESC' } as any })\n if (versions.some(one => one.status !== RegulationVersionStatus.ADOPTED))\n throw new Refusal('regulation-version-open', { name: regulation.name }, `${regulation.name} has a version being written or in approval - finish it first`)\n return await tx.getRepository(RegulationVersion).save({\n domain,\n regulation,\n version: (versions[0]?.version ?? 0) + 1,\n body: versions[0]?.body ?? null,\n status: RegulationVersionStatus.DRAFT,\n creator: user,\n updater: user\n } as any)\n}\n\n/** The text, day, summary, whether it is against the workers and how many workers - of a version being written. */\nexport async function updateRegulationVersion(id: string, patch: RegulationVersionPatch, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, id)\n const refusal = changeRefusal(version.status)\n if (refusal) throw refusal\n if (patch.body !== undefined) version.body = patch.body ?? null\n if (patch.effectiveOn !== undefined) version.effectiveOn = text(patch.effectiveOn)\n if (patch.changeSummary !== undefined) version.changeSummary = text(patch.changeSummary)\n if (patch.unfavourable !== undefined) version.unfavourable = patch.unfavourable\n if (patch.workersCount !== undefined) version.workersCount = patch.workersCount ?? null\n version.updater = user\n return await tx.getRepository(RegulationVersion).save(version)\n}\n\n/** A version being written is deleted; one put up or adopted is kept. */\nexport async function deleteRegulationVersion(id: string, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n const version = await versionOf(tx, domain, id)\n if (version.status !== RegulationVersionStatus.DRAFT) throw new Refusal('regulation-version-kept', {}, 'a version put up or adopted is kept')\n await tx.getRepository(RegulationVersion).delete(version.id)\n return true\n}\n\n/** Records an opinion heard, a consent or a filing, with its papers. */\nexport async function recordRegulationProcedure(input: NewRegulationProcedure, files: FileUpload[] | undefined, context: ResolverContext): Promise<RegulationProcedure> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, input.versionId)\n const refusal = procedureWriteRefusal(version.status, input.kind) ?? procedureRefusal(input)\n if (refusal) throw refusal\n if (input.kind === RegulationProcedureKind.FILING && !files?.length) throw new Refusal('regulation-filing-paper-required', {}, 'attach the filing or its receipt')\n const saved = await tx.getRepository(RegulationProcedure).save({\n domain,\n version,\n kind: input.kind,\n day: input.day,\n method: text(input.method),\n workersCount: input.workersCount ?? null,\n consentCount: input.kind === RegulationProcedureKind.CONSENT ? input.consentCount : null,\n notes: text(input.notes),\n creator: user\n } as any)\n for (const file of files ?? []) await createAttachment(null, { attachment: { file, refType: REGULATION_PROCEDURE_REF_TYPE, refBy: saved.id } } as any, context)\n return saved as RegulationProcedure\n}\n\n/** A procedure of a version being written is taken off; once put up it is the evidence and stays. */\nexport async function deleteRegulationProcedure(id: string, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n const row = await tx.getRepository(RegulationProcedure).findOne({ where: { id, domain: { id: domain.id } } as any })\n if (!row) return true\n const version = await versionOf(tx, domain, row.versionId!)\n if (version.status !== RegulationVersionStatus.DRAFT) throw new Refusal('regulation-procedure-fixed', {}, 'the procedure of a version put up or adopted stays as it was')\n const files = await tx.getRepository(Attachment).find({ where: { domain: { id: domain.id }, refType: REGULATION_PROCEDURE_REF_TYPE, refBy: id } as any })\n if (files.length) await tx.getRepository(Attachment).delete(files.map(one => one.id))\n await tx.getRepository(RegulationProcedure).delete(id)\n return true\n}\n\n/** The procedures of versions, each with how many papers it carries. */\nexport async function proceduresOf(tx: EntityManager, domain: { id: string }, versionIds: string[]): Promise<(RegulationProcedure & { files: number })[]> {\n if (!versionIds.length) return []\n const rows = await tx.getRepository(RegulationProcedure).find({ where: { domain: { id: domain.id }, version: { id: In(versionIds) } } as any, order: { day: 'ASC' } as any })\n const files = rows.length ? await tx.getRepository(Attachment).find({ where: { domain: { id: domain.id }, refType: REGULATION_PROCEDURE_REF_TYPE, refBy: In(rows.map(one => one.id)) } as any }) : []\n return rows.map(one => Object.assign(one, { files: files.filter(file => file.refBy === one.id).length }))\n}\n\n/** The version adopted before this one, whose articles it is told against. */\nexport async function previousAdopted(tx: EntityManager, version: RegulationVersion): Promise<RegulationVersion | null> {\n const adopted = await tx.getRepository(RegulationVersion).find({ where: { regulation: { id: version.regulationId }, status: RegulationVersionStatus.ADOPTED } as any, order: { version: 'DESC' } as any })\n return adopted.find(one => one.version < version.version) ?? null\n}\n\n/** Puts a version up for adoption - or adopts it at once where the domain names no approver (decision 5). */\nexport async function submitRegulationVersion(id: string, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, id)\n if (version.status !== RegulationVersionStatus.DRAFT) throw new Refusal('regulation-not-draft', {}, 'only a version being written is put up')\n const regulation = version.regulation!\n const procedures = await proceduresOf(tx, domain, [version.id])\n const refusal = adoptionRefusal({ kind: regulation.kind, body: version.body, effectiveOn: version.effectiveOn, unfavourable: version.unfavourable }, procedures, todayIn(domain))\n if (refusal) throw refusal\n\n const door = declaredDoor(REGULATION_ADOPT_ACTIVITY)!\n const carrier = await activityNamed(REGULATION_ADOPT_ACTIVITY, context)\n const notUsed = !!(await tx.getRepository(WorkDoorNotUsed).findOne({ where: { domain: { id: domain.id }, doorName: REGULATION_ADOPT_ACTIVITY } as any }))\n const verdict = await passWorkDoor({ door, activity: carrier, subject: { kind: 'RegulationVersion', id: version.id }, notUsed }, { tx, domain, user, seats: seatReader(tx) })\n if (verdict.go === 'refuse') throw verdict.refusal\n if (verdict.go === 'run') return await adopt(version, context)\n if (!carrier) throw new Refusal('regulation-approval-not-installed', { form: REGULATION_ADOPT_ACTIVITY }, `the approval '${REGULATION_ADOPT_ACTIVITY}' is not installed in this domain`)\n\n const before = await previousAdopted(tx, version)\n const changes = clauseChanges(before ? clausesOf(before.body) : [], clausesOf(version.body))\n const words: Record<string, string> = { ADDED: '신설', CHANGED: '개정', REMOVED: '삭제' }\n version.status = RegulationVersionStatus.IN_APPROVAL\n version.adoptionNote = null\n version.updater = user\n const saved = await tx.getRepository(RegulationVersion).save(version)\n const headline = `${regulation.name} 제${version.version}판 · 시행 ${version.effectiveOn}`\n const instance = await issue(\n {\n name: headline,\n description: version.changeSummary ?? '',\n activityId: carrier.id,\n approvalLine: carrier.approvalLine,\n input: {\n versionId: saved.id,\n regulation: regulation.name,\n requester: user.name ?? '',\n sourceHref: `regulation-detail?id=${regulation.id}&version=${saved.id}`,\n headline,\n reason: [\n ...(version.changeSummary ? [`바뀐 곳: ${version.changeSummary}`] : []),\n ...(changes.length ? [`조문: ${changes.map(one => `제${one.number}조 ${words[one.change]}`).join(', ')}`] : []),\n `불리한 변경: ${version.unfavourable ? '예' : '아니오'}`,\n ...procedures.map(one => `${{ OPINION: '의견 청취', CONSENT: '동의', FILING: '신고' }[one.kind]} ${one.day}${one.kind === 'CONSENT' ? ` · ${one.consentCount}/${one.workersCount}` : ''} · 첨부 ${one.files}`)\n ],\n consequence: `승인하면 ${regulation.name} 제${version.version}판이 채택되어 ${version.effectiveOn}부터 시행됩니다`\n },\n threadsMin: 1,\n threadsMax: 1,\n requireApproval: true\n } as any,\n context\n )\n saved.activityInstanceId = instance.id\n return await tx.getRepository(RegulationVersion).save(saved)\n}\n\n/** Takes back a version in approval - it is being written again. */\nexport async function withdrawRegulationVersion(id: string, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, id)\n if (version.status !== RegulationVersionStatus.IN_APPROVAL) throw new Refusal('regulation-not-in-approval', {}, 'only a version in approval is taken back')\n if (version.activityInstanceId) await abort({ id: version.activityInstanceId, reason: '올린 사람이 회수함' } as any, context)\n version.status = RegulationVersionStatus.DRAFT\n version.activityInstanceId = null\n version.updater = user\n return await tx.getRepository(RegulationVersion).save(version)\n}\n\n/**\n * What an approver's decision does to the version - worklist calls it on every state change of the instance; a decision\n * lands only on the version still waiting on that very instance. Rejected or withdrawn, it is written again.\n */\nexport async function decideRegulationVersion(instance: { id: string; state: any; input?: any }, causedBy: readonly { state?: any }[], context: ResolverContext) {\n const { domain, tx } = context.state\n const id = instance.input?.versionId\n if (!id) return\n const version = await tx.getRepository(RegulationVersion).findOne({ where: { id, domain: { id: domain.id } } as any, relations: ['regulation'] })\n if (!version) return\n const decision = decisionOf(\n { id: instance.id, state: String(instance.state) },\n causedBy.map(one => ({ state: String(one.state) })),\n { status: version.status === RegulationVersionStatus.IN_APPROVAL ? 'SUBMITTED' : (version.status as any), activityInstanceId: version.activityInstanceId }\n )\n if (!decision) return\n if (decision === 'APPROVED') return void (await adopt(version, context))\n version.status = RegulationVersionStatus.DRAFT\n version.activityInstanceId = null\n await tx.getRepository(RegulationVersion).save(version)\n}\n\n/**\n * Adopts a version: its effective day must not have passed by the day it is decided - an approval that ended late leaves\n * it to be put up again with a new day. Its articles are cut and kept, the employees are told, the help indexes again.\n */\nasync function adopt(version: RegulationVersion, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const today = todayIn(domain)\n if (!version.effectiveOn || version.effectiveOn < today) {\n version.status = RegulationVersionStatus.DRAFT\n version.activityInstanceId = null\n version.adoptionNote = `시행일 ${version.effectiveOn ?? ''}이(가) 결재가 끝난 ${today}보다 앞서 채택되지 않았습니다 — 시행일을 고쳐 다시 올리세요`\n return await tx.getRepository(RegulationVersion).save(version)\n }\n version.status = RegulationVersionStatus.ADOPTED\n version.adoptedAt = new Date()\n version.adoptedBy = user\n version.adoptionNote = null\n const saved = await tx.getRepository(RegulationVersion).save(version)\n const clauses = clausesOf(saved.body)\n await tx.getRepository(RegulationClause).delete({ version: { id: saved.id } } as any)\n for (const [rank, one] of clauses.entries()) await tx.getRepository(RegulationClause).save({ domain, version: saved, rank, ...one } as any)\n\n const regulation = version.regulation!\n const announcement = await announce(context, {\n trigger: REGULATION_ADOPTED_TRIGGER,\n sourceKind: 'RegulationVersion',\n sourceId: saved.id,\n title: `${regulation.name} 제${saved.version}판 시행 안내 (${saved.effectiveOn})`,\n body: [`**${regulation.name}** 제${saved.version}판이 채택되어 **${saved.effectiveOn}**부터 시행됩니다.`, saved.changeSummary ? `\\n바뀐 곳: ${saved.changeSummary}` : ''].join(''),\n links: [{ label: regulation.name, url: `regulations?regulation=${encodeURIComponent(regulation.code)}&version=${saved.id}` }]\n })\n if (announcement) {\n saved.announcementId = announcement.id\n await tx.getRepository(RegulationVersion).save(saved)\n }\n invalidateHelpSource(REGULATION_HELP_SOURCE, domain.id)\n return saved\n}\n\n/** The announcement of each version, by version - drafts too, the keeper reads whether it went out. */\nexport async function announcementsOfVersions(tx: EntityManager, domain: { id: string }, versionIds: string[]) {\n const rows = await announcementsOfSource(domain, 'RegulationVersion', versionIds, tx)\n return new Map(rows.map(one => [one.sourceId!, one]))\n}\n\n/** Every regulation of a kind whose version in force has no filing - a work rule must be filed (근로기준법 §93). */\nexport async function regulationsWithoutFiling(manager: EntityManager, domain: { id: string }, today: string) {\n const regulations = await manager.getRepository(Regulation).find({ where: { domain: { id: domain.id }, kind: In([RegulationKind.WORK_RULES, RegulationKind.WORK_RULES_ANNEX]) } as any })\n if (!regulations.length) return []\n const versions = await manager.getRepository(RegulationVersion).find({ where: { regulation: { id: In(regulations.map(one => one.id)) }, status: RegulationVersionStatus.ADOPTED } as any })\n const out: { regulation: Regulation; version: RegulationVersion }[] = []\n for (const regulation of regulations) {\n const { inForce } = standingOf(versions.filter(one => one.regulationId === regulation.id), today)\n if (!inForce) continue\n const filed = await manager.getRepository(RegulationProcedure).count({ where: { version: { id: inForce.id }, kind: RegulationProcedureKind.FILING } as any })\n if (!filed) out.push({ regulation, version: inForce })\n }\n return out\n}\n"]}
|
|
1
|
+
{"version":3,"file":"regulation-service.js","sourceRoot":"","sources":["../../../server/service/regulation/regulation-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport { EntityManager, In } from 'typeorm'\n\nimport { decisionOf } from '@things-factory/accounting'\nimport { announce, announcementsOfSource } from '@things-factory/announcement'\nimport { Attachment, createAttachment } from '@things-factory/attachment-base'\nimport { invalidateHelpSource } from '@things-factory/help'\nimport { Refusal } from '@things-factory/shell'\nimport { abort, activityNamed, declaredDoor, issue, passWorkDoor, seatReader, WorkDoorNotUsed } from '@things-factory/worklist'\n\nimport { REGULATION_ADOPT_ACTIVITY } from '../../activities/regulation-activity-names'\nimport { todayIn } from '../common/employee-reader'\nimport { Regulation, RegulationClause, RegulationKind, RegulationProcedure, RegulationProcedureKind, RegulationVersion, RegulationVersionStatus } from './regulation'\nimport { adoptionRefusal, changeRefusal, clauseChanges, clausesOf, inForceRefusal, procedureRefusal, procedureWriteRefusal, regulationRefusal, standingOf } from './regulation-rules'\nimport { NewRegulation, NewRegulationProcedure, RegulationPatch, RegulationVersionPatch } from './regulation-type'\n\n/*\n * Writing a company rule and adopting its versions (ADR-0187 decisions 2-6). The one way a version is adopted: through\n * the work door `Compliance Regulation Adopt` - raised for approval where the domain names approvers, adopted at once\n * and written down where it names none. Adopting cuts its articles, tells the employees through the announcement of\n * the trigger `compliance.regulation-adopted`, and has the help index the articles again. A rule in force before the\n * system is registered as it stands instead - its first version, with its original attached (amendment 2).\n */\n\n/** The papers of a procedure hang on it under this `refType` (attachment-base). */\nexport const REGULATION_PROCEDURE_REF_TYPE = 'RegulationProcedure'\n/** The original of a version registered as in force hangs on the version under this `refType`. */\nexport const REGULATION_ORIGINAL_REF_TYPE = 'RegulationVersion'\n/** The help source of the articles (ADR-0187 decision 12). */\nexport const REGULATION_HELP_SOURCE = 'regulation'\n/** The announcement trigger of an adoption (ADR-0187 decision 6). */\nexport const REGULATION_ADOPTED_TRIGGER = 'compliance.regulation-adopted'\n\nconst text = (value: unknown) => (typeof value === 'string' && value.trim() ? value.trim() : null)\nconst NOT_FOUND = () => new Refusal('regulation-not-found', {}, 'the rule was not found. reload and try again.')\n\nasync function regulationOf(tx: EntityManager, domain: { id: string }, id: string): Promise<Regulation> {\n const row = await tx.getRepository(Regulation).findOne({ where: { id, domain: { id: domain.id } } as any })\n if (!row) throw NOT_FOUND()\n return row\n}\n\nexport async function versionOf(tx: EntityManager, domain: { id: string }, id: string): Promise<RegulationVersion> {\n const row = await tx.getRepository(RegulationVersion).findOne({ where: { id, domain: { id: domain.id } } as any, relations: ['regulation'] })\n if (!row) throw NOT_FOUND()\n return row\n}\n\n/** A new rule, with its first version to write. */\nexport async function createRegulation(input: NewRegulation, context: ResolverContext): Promise<Regulation> {\n const { domain, user, tx } = context.state\n const refusal = regulationRefusal(input)\n if (refusal) throw refusal\n const code = input.code.trim()\n if (await tx.getRepository(Regulation).findOne({ where: { domain: { id: domain.id }, code } as any }))\n throw new Refusal('regulation-code-taken', { code }, `the code ${code} is taken - give another`)\n const regulation = await tx.getRepository(Regulation).save({\n domain,\n code,\n name: input.name.trim(),\n kind: input.kind,\n topics: [...new Set((input.topics ?? []).map(one => one.trim()).filter(Boolean))],\n rank: input.rank ?? 0,\n creator: user,\n updater: user\n } as any)\n await tx.getRepository(RegulationVersion).save({ domain, regulation, version: 1, body: input.body ?? null, status: RegulationVersionStatus.DRAFT, creator: user, updater: user } as any)\n return regulation as Regulation\n}\n\n/** The name, topics and place of a rule; its kind only while none of its versions is adopted. */\nexport async function updateRegulation(id: string, patch: RegulationPatch, context: ResolverContext): Promise<Regulation> {\n const { domain, user, tx } = context.state\n const regulation = await regulationOf(tx, domain, id)\n if (patch.kind !== undefined && patch.kind !== regulation.kind) {\n const adopted = await tx.getRepository(RegulationVersion).count({ where: { regulation: { id }, status: In([RegulationVersionStatus.ADOPTED, RegulationVersionStatus.IN_APPROVAL]) } as any })\n if (adopted) throw new Refusal('regulation-kind-fixed', {}, 'the kind of a rule with an adopted version stays - its procedure was taken for it')\n }\n const refusal = regulationRefusal({ code: regulation.code, name: patch.name ?? regulation.name, kind: patch.kind ?? regulation.kind })\n if (refusal) throw refusal\n if (patch.name !== undefined) regulation.name = patch.name.trim()\n if (patch.kind !== undefined) regulation.kind = patch.kind\n if (patch.topics !== undefined) regulation.topics = [...new Set((patch.topics ?? []).map(one => one.trim()).filter(Boolean))]\n if (patch.rank !== undefined) regulation.rank = patch.rank ?? 0\n regulation.updater = user\n const saved = await tx.getRepository(Regulation).save(regulation)\n invalidateHelpSource(REGULATION_HELP_SOURCE, domain.id)\n return saved\n}\n\n/** A rule with no adopted version is deleted with its drafts; one adopted once is kept - its employees were told of it. */\nexport async function deleteRegulations(ids: string[], context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n for (const id of ids) {\n const regulation = await tx.getRepository(Regulation).findOne({ where: { id, domain: { id: domain.id } } as any })\n if (!regulation) continue\n const kept = await tx.getRepository(RegulationVersion).count({ where: { regulation: { id }, status: In([RegulationVersionStatus.ADOPTED, RegulationVersionStatus.IN_APPROVAL]) } as any })\n if (kept) throw new Refusal('regulation-adopted-kept', { name: regulation.name }, `${regulation.name} has a version adopted or in approval - a rule its employees were told of is kept`)\n await tx.getRepository(Regulation).delete(regulation.id)\n }\n return true\n}\n\n/** The next version to write, its text the latest version's. One is written at a time. */\nexport async function newRegulationVersion(regulationId: string, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const regulation = await regulationOf(tx, domain, regulationId)\n const versions = await tx.getRepository(RegulationVersion).find({ where: { regulation: { id: regulationId } } as any, order: { version: 'DESC' } as any })\n if (versions.some(one => one.status !== RegulationVersionStatus.ADOPTED))\n throw new Refusal('regulation-version-open', { name: regulation.name }, `${regulation.name} has a version being written or in approval - finish it first`)\n return await tx.getRepository(RegulationVersion).save({\n domain,\n regulation,\n version: (versions[0]?.version ?? 0) + 1,\n body: versions[0]?.body ?? null,\n status: RegulationVersionStatus.DRAFT,\n creator: user,\n updater: user\n } as any)\n}\n\n/** The text, day, summary, whether it is against the workers and how many workers - of a version being written. */\nexport async function updateRegulationVersion(id: string, patch: RegulationVersionPatch, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, id)\n const refusal = changeRefusal(version.status)\n if (refusal) throw refusal\n if (patch.body !== undefined) version.body = patch.body ?? null\n if (patch.effectiveOn !== undefined) version.effectiveOn = text(patch.effectiveOn)\n if (patch.changeSummary !== undefined) version.changeSummary = text(patch.changeSummary)\n if (patch.unfavourable !== undefined) version.unfavourable = patch.unfavourable\n if (patch.workersCount !== undefined) version.workersCount = patch.workersCount ?? null\n version.updater = user\n return await tx.getRepository(RegulationVersion).save(version)\n}\n\n/** A version being written is deleted; one put up or adopted is kept. */\nexport async function deleteRegulationVersion(id: string, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n const version = await versionOf(tx, domain, id)\n if (version.status !== RegulationVersionStatus.DRAFT) throw new Refusal('regulation-version-kept', {}, 'a version put up or adopted is kept')\n await tx.getRepository(RegulationVersion).delete(version.id)\n return true\n}\n\n/** Records an opinion heard, a consent or a filing, with its papers. */\nexport async function recordRegulationProcedure(input: NewRegulationProcedure, files: FileUpload[] | undefined, context: ResolverContext): Promise<RegulationProcedure> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, input.versionId)\n const refusal = procedureWriteRefusal(version.status, input.kind) ?? procedureRefusal(input)\n if (refusal) throw refusal\n if (input.kind === RegulationProcedureKind.FILING && !files?.length) throw new Refusal('regulation-filing-paper-required', {}, 'attach the filing or its receipt')\n const saved = await tx.getRepository(RegulationProcedure).save({\n domain,\n version,\n kind: input.kind,\n day: input.day,\n method: text(input.method),\n workersCount: input.workersCount ?? null,\n consentCount: input.kind === RegulationProcedureKind.CONSENT ? input.consentCount : null,\n notes: text(input.notes),\n creator: user\n } as any)\n for (const file of files ?? []) await createAttachment(null, { attachment: { file, refType: REGULATION_PROCEDURE_REF_TYPE, refBy: saved.id } } as any, context)\n return saved as RegulationProcedure\n}\n\n/** A procedure of a version being written is taken off; once put up it is the evidence and stays. */\nexport async function deleteRegulationProcedure(id: string, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n const row = await tx.getRepository(RegulationProcedure).findOne({ where: { id, domain: { id: domain.id } } as any })\n if (!row) return true\n const version = await versionOf(tx, domain, row.versionId!)\n if (version.status !== RegulationVersionStatus.DRAFT) throw new Refusal('regulation-procedure-fixed', {}, 'the procedure of a version put up or adopted stays as it was')\n const files = await tx.getRepository(Attachment).find({ where: { domain: { id: domain.id }, refType: REGULATION_PROCEDURE_REF_TYPE, refBy: id } as any })\n if (files.length) await tx.getRepository(Attachment).delete(files.map(one => one.id))\n await tx.getRepository(RegulationProcedure).delete(id)\n return true\n}\n\n/** The procedures of versions, each with how many papers it carries. */\nexport async function proceduresOf(tx: EntityManager, domain: { id: string }, versionIds: string[]): Promise<(RegulationProcedure & { files: number })[]> {\n if (!versionIds.length) return []\n const rows = await tx.getRepository(RegulationProcedure).find({ where: { domain: { id: domain.id }, version: { id: In(versionIds) } } as any, order: { day: 'ASC' } as any })\n const files = rows.length ? await tx.getRepository(Attachment).find({ where: { domain: { id: domain.id }, refType: REGULATION_PROCEDURE_REF_TYPE, refBy: In(rows.map(one => one.id)) } as any }) : []\n return rows.map(one => Object.assign(one, { files: files.filter(file => file.refBy === one.id).length }))\n}\n\n/** The version adopted before this one, whose articles it is told against. */\nexport async function previousAdopted(tx: EntityManager, version: RegulationVersion): Promise<RegulationVersion | null> {\n const adopted = await tx.getRepository(RegulationVersion).find({ where: { regulation: { id: version.regulationId }, status: RegulationVersionStatus.ADOPTED } as any, order: { version: 'DESC' } as any })\n return adopted.find(one => one.version < version.version) ?? null\n}\n\n/** Puts a version up for adoption - or adopts it at once where the domain names no approver (decision 5). */\nexport async function submitRegulationVersion(id: string, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, id)\n if (version.status !== RegulationVersionStatus.DRAFT) throw new Refusal('regulation-not-draft', {}, 'only a version being written is put up')\n const regulation = version.regulation!\n const procedures = await proceduresOf(tx, domain, [version.id])\n const refusal = adoptionRefusal({ kind: regulation.kind, body: version.body, effectiveOn: version.effectiveOn, unfavourable: version.unfavourable }, procedures, todayIn(domain))\n if (refusal) throw refusal\n\n const door = declaredDoor(REGULATION_ADOPT_ACTIVITY)!\n const carrier = await activityNamed(REGULATION_ADOPT_ACTIVITY, context)\n const notUsed = !!(await tx.getRepository(WorkDoorNotUsed).findOne({ where: { domain: { id: domain.id }, doorName: REGULATION_ADOPT_ACTIVITY } as any }))\n const verdict = await passWorkDoor({ door, activity: carrier, subject: { kind: 'RegulationVersion', id: version.id }, notUsed }, { tx, domain, user, seats: seatReader(tx) })\n if (verdict.go === 'refuse') throw verdict.refusal\n if (verdict.go === 'run') return await adopt(version, context)\n if (!carrier) throw new Refusal('regulation-approval-not-installed', { form: REGULATION_ADOPT_ACTIVITY }, `the approval '${REGULATION_ADOPT_ACTIVITY}' is not installed in this domain`)\n\n const before = await previousAdopted(tx, version)\n const changes = clauseChanges(before ? clausesOf(before.body) : [], clausesOf(version.body))\n const words: Record<string, string> = { ADDED: '신설', CHANGED: '개정', REMOVED: '삭제' }\n version.status = RegulationVersionStatus.IN_APPROVAL\n version.adoptionNote = null\n version.updater = user\n const saved = await tx.getRepository(RegulationVersion).save(version)\n const headline = `${regulation.name} 제${version.version}판 · 시행 ${version.effectiveOn}`\n const instance = await issue(\n {\n name: headline,\n description: version.changeSummary ?? '',\n activityId: carrier.id,\n approvalLine: carrier.approvalLine,\n input: {\n versionId: saved.id,\n regulation: regulation.name,\n requester: user.name ?? '',\n sourceHref: `regulation-detail?id=${regulation.id}&version=${saved.id}`,\n headline,\n reason: [\n ...(version.changeSummary ? [`바뀐 곳: ${version.changeSummary}`] : []),\n ...(changes.length ? [`조문: ${changes.map(one => `${one.heading} ${words[one.change]}`).join(', ')}`] : []),\n `불리한 변경: ${version.unfavourable ? '예' : '아니오'}`,\n ...procedures.map(one => `${{ OPINION: '의견 청취', CONSENT: '동의', FILING: '신고' }[one.kind]} ${one.day}${one.kind === 'CONSENT' ? ` · ${one.consentCount}/${one.workersCount}` : ''} · 첨부 ${one.files}`)\n ],\n consequence: `승인하면 ${regulation.name} 제${version.version}판이 채택되어 ${version.effectiveOn}부터 시행됩니다`\n },\n threadsMin: 1,\n threadsMax: 1,\n requireApproval: true\n } as any,\n context\n )\n saved.activityInstanceId = instance.id\n return await tx.getRepository(RegulationVersion).save(saved)\n}\n\n/**\n * Registers the first version of a rule as in force already (decision 3, amendment 2): adopted as it stands from its own\n * day, its original attached, its articles cut and indexed - with no approval, since nothing is decided, and no\n * announcement, since the employees live under it already.\n */\nexport async function registerRegulationInForce(id: string, files: FileUpload[] | undefined, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, id)\n const adoptedBefore = await tx.getRepository(RegulationVersion).count({\n where: { regulation: { id: version.regulationId }, status: In([RegulationVersionStatus.ADOPTED, RegulationVersionStatus.IN_APPROVAL]) } as any\n })\n const refusal = inForceRefusal(version, adoptedBefore, files?.length ?? 0, todayIn(domain))\n if (refusal) throw refusal\n version.status = RegulationVersionStatus.ADOPTED\n version.registeredInForce = true\n version.adoptedAt = new Date()\n version.adoptedBy = user\n version.adoptionNote = null\n version.updater = user\n const saved = await tx.getRepository(RegulationVersion).save(version)\n await keepClauses(saved, context)\n for (const file of files ?? []) await createAttachment(null, { attachment: { file, refType: REGULATION_ORIGINAL_REF_TYPE, refBy: saved.id } } as any, context)\n invalidateHelpSource(REGULATION_HELP_SOURCE, domain.id)\n return saved\n}\n\n/** How many originals each version carries. */\nexport async function originalsOf(tx: EntityManager, domain: { id: string }, versionIds: string[]): Promise<Map<string, number>> {\n const rows = versionIds.length ? await tx.getRepository(Attachment).find({ where: { domain: { id: domain.id }, refType: REGULATION_ORIGINAL_REF_TYPE, refBy: In(versionIds) } as any }) : []\n return rows.reduce((counts, one) => counts.set(one.refBy!, (counts.get(one.refBy!) ?? 0) + 1), new Map<string, number>())\n}\n\n/** The articles of an adopted version, cut from its text and kept. */\nasync function keepClauses(version: RegulationVersion, context: ResolverContext) {\n const { domain, tx } = context.state\n await tx.getRepository(RegulationClause).delete({ version: { id: version.id } } as any)\n for (const [rank, one] of clausesOf(version.body).entries()) await tx.getRepository(RegulationClause).save({ domain, version, rank, ...one } as any)\n}\n\n/** Takes back a version in approval - it is being written again. */\nexport async function withdrawRegulationVersion(id: string, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const version = await versionOf(tx, domain, id)\n if (version.status !== RegulationVersionStatus.IN_APPROVAL) throw new Refusal('regulation-not-in-approval', {}, 'only a version in approval is taken back')\n if (version.activityInstanceId) await abort({ id: version.activityInstanceId, reason: '올린 사람이 회수함' } as any, context)\n version.status = RegulationVersionStatus.DRAFT\n version.activityInstanceId = null\n version.updater = user\n return await tx.getRepository(RegulationVersion).save(version)\n}\n\n/**\n * What an approver's decision does to the version - worklist calls it on every state change of the instance; a decision\n * lands only on the version still waiting on that very instance. Rejected or withdrawn, it is written again.\n */\nexport async function decideRegulationVersion(instance: { id: string; state: any; input?: any }, causedBy: readonly { state?: any }[], context: ResolverContext) {\n const { domain, tx } = context.state\n const id = instance.input?.versionId\n if (!id) return\n const version = await tx.getRepository(RegulationVersion).findOne({ where: { id, domain: { id: domain.id } } as any, relations: ['regulation'] })\n if (!version) return\n const decision = decisionOf(\n { id: instance.id, state: String(instance.state) },\n causedBy.map(one => ({ state: String(one.state) })),\n { status: version.status === RegulationVersionStatus.IN_APPROVAL ? 'SUBMITTED' : (version.status as any), activityInstanceId: version.activityInstanceId }\n )\n if (!decision) return\n if (decision === 'APPROVED') return void (await adopt(version, context))\n version.status = RegulationVersionStatus.DRAFT\n version.activityInstanceId = null\n await tx.getRepository(RegulationVersion).save(version)\n}\n\n/**\n * Adopts a version: its effective day must not have passed by the day it is decided - an approval that ended late leaves\n * it to be put up again with a new day. Its articles are cut and kept, the employees are told, the help indexes again.\n */\nasync function adopt(version: RegulationVersion, context: ResolverContext): Promise<RegulationVersion> {\n const { domain, user, tx } = context.state\n const today = todayIn(domain)\n if (!version.effectiveOn || version.effectiveOn < today) {\n version.status = RegulationVersionStatus.DRAFT\n version.activityInstanceId = null\n version.adoptionNote = `시행일 ${version.effectiveOn ?? ''}이(가) 결재가 끝난 ${today}보다 앞서 채택되지 않았습니다 — 시행일을 고쳐 다시 올리세요`\n return await tx.getRepository(RegulationVersion).save(version)\n }\n version.status = RegulationVersionStatus.ADOPTED\n version.adoptedAt = new Date()\n version.adoptedBy = user\n version.adoptionNote = null\n const saved = await tx.getRepository(RegulationVersion).save(version)\n await keepClauses(saved, context)\n\n const regulation = version.regulation!\n const announcement = await announce(context, {\n trigger: REGULATION_ADOPTED_TRIGGER,\n sourceKind: 'RegulationVersion',\n sourceId: saved.id,\n title: `${regulation.name} 제${saved.version}판 시행 안내 (${saved.effectiveOn})`,\n body: [`**${regulation.name}** 제${saved.version}판이 채택되어 **${saved.effectiveOn}**부터 시행됩니다.`, saved.changeSummary ? `\\n바뀐 곳: ${saved.changeSummary}` : ''].join(''),\n links: [{ label: regulation.name, url: `regulations?regulation=${encodeURIComponent(regulation.code)}&version=${saved.id}` }]\n })\n if (announcement) {\n saved.announcementId = announcement.id\n await tx.getRepository(RegulationVersion).save(saved)\n }\n invalidateHelpSource(REGULATION_HELP_SOURCE, domain.id)\n return saved\n}\n\n/** The announcement of each version, by version - drafts too, the keeper reads whether it went out. */\nexport async function announcementsOfVersions(tx: EntityManager, domain: { id: string }, versionIds: string[]) {\n const rows = await announcementsOfSource(domain, 'RegulationVersion', versionIds, tx)\n return new Map(rows.map(one => [one.sourceId!, one]))\n}\n\n/** Every regulation of a kind whose version in force has no filing - a work rule must be filed (근로기준법 §93). */\nexport async function regulationsWithoutFiling(manager: EntityManager, domain: { id: string }, today: string) {\n const regulations = await manager.getRepository(Regulation).find({ where: { domain: { id: domain.id }, kind: In([RegulationKind.WORK_RULES, RegulationKind.WORK_RULES_ANNEX]) } as any })\n if (!regulations.length) return []\n const versions = await manager.getRepository(RegulationVersion).find({ where: { regulation: { id: In(regulations.map(one => one.id)) }, status: RegulationVersionStatus.ADOPTED } as any })\n const out: { regulation: Regulation; version: RegulationVersion }[] = []\n for (const regulation of regulations) {\n const { inForce } = standingOf(versions.filter(one => one.regulationId === regulation.id), today)\n if (!inForce) continue\n const filed = await manager.getRepository(RegulationProcedure).count({ where: { version: { id: inForce.id }, kind: RegulationProcedureKind.FILING } as any })\n if (!filed) out.push({ regulation, version: inForce })\n }\n return out\n}\n"]}
|
|
@@ -37,6 +37,7 @@ export declare class RegulationList {
|
|
|
37
37
|
export declare class RegulationClauseChange {
|
|
38
38
|
number: string;
|
|
39
39
|
title?: string;
|
|
40
|
+
heading: string;
|
|
40
41
|
change: string;
|
|
41
42
|
}
|
|
42
43
|
export declare class RegulationProcedureRow extends RegulationProcedure {
|
|
@@ -47,8 +48,11 @@ export declare class RegulationVersionView {
|
|
|
47
48
|
period: string;
|
|
48
49
|
endsOn?: string;
|
|
49
50
|
clauses: RegulationClause[];
|
|
51
|
+
appendix?: string;
|
|
52
|
+
text?: string;
|
|
50
53
|
changes: RegulationClauseChange[];
|
|
51
54
|
procedures?: RegulationProcedureRow[];
|
|
55
|
+
originals?: number;
|
|
52
56
|
announcement?: Announcement;
|
|
53
57
|
told: boolean;
|
|
54
58
|
readAt?: Date;
|
|
@@ -142,6 +142,10 @@ tslib_1.__decorate([
|
|
|
142
142
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Its heading' }),
|
|
143
143
|
tslib_1.__metadata("design:type", String)
|
|
144
144
|
], RegulationClauseChange.prototype, "title", void 0);
|
|
145
|
+
tslib_1.__decorate([
|
|
146
|
+
(0, type_graphql_1.Field)({ description: 'How it is named on the page - 제3조(휴게), 부칙 제1조(시행일)' }),
|
|
147
|
+
tslib_1.__metadata("design:type", String)
|
|
148
|
+
], RegulationClauseChange.prototype, "heading", void 0);
|
|
145
149
|
tslib_1.__decorate([
|
|
146
150
|
(0, type_graphql_1.Field)({ description: 'ADDED, CHANGED or REMOVED' }),
|
|
147
151
|
tslib_1.__metadata("design:type", String)
|
|
@@ -178,6 +182,14 @@ tslib_1.__decorate([
|
|
|
178
182
|
(0, type_graphql_1.Field)(type => [regulation_1.RegulationClause], { description: 'Its articles' }),
|
|
179
183
|
tslib_1.__metadata("design:type", Array)
|
|
180
184
|
], RegulationVersionView.prototype, "clauses", void 0);
|
|
185
|
+
tslib_1.__decorate([
|
|
186
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The words after its articles from the first line headed in brackets - [별표 1]' }),
|
|
187
|
+
tslib_1.__metadata("design:type", String)
|
|
188
|
+
], RegulationVersionView.prototype, "appendix", void 0);
|
|
189
|
+
tslib_1.__decorate([
|
|
190
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The whole text, where it has no article - a table of amounts' }),
|
|
191
|
+
tslib_1.__metadata("design:type", String)
|
|
192
|
+
], RegulationVersionView.prototype, "text", void 0);
|
|
181
193
|
tslib_1.__decorate([
|
|
182
194
|
(0, type_graphql_1.Field)(type => [RegulationClauseChange], { description: 'What it changed of the version adopted before' }),
|
|
183
195
|
tslib_1.__metadata("design:type", Array)
|
|
@@ -186,6 +198,10 @@ tslib_1.__decorate([
|
|
|
186
198
|
(0, type_graphql_1.Field)(type => [RegulationProcedureRow], { nullable: true, description: 'The procedure - to its keepers only' }),
|
|
187
199
|
tslib_1.__metadata("design:type", Array)
|
|
188
200
|
], RegulationVersionView.prototype, "procedures", void 0);
|
|
201
|
+
tslib_1.__decorate([
|
|
202
|
+
(0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true, description: 'How many originals are attached to a version registered as in force - to its keepers only' }),
|
|
203
|
+
tslib_1.__metadata("design:type", Number)
|
|
204
|
+
], RegulationVersionView.prototype, "originals", void 0);
|
|
189
205
|
tslib_1.__decorate([
|
|
190
206
|
(0, type_graphql_1.Field)(type => announcement_1.Announcement, { nullable: true, description: 'The announcement that told of it - to its keepers only' }),
|
|
191
207
|
tslib_1.__metadata("design:type", announcement_1.Announcement)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regulation-type.js","sourceRoot":"","sources":["../../../server/service/regulation/regulation-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'\n\nimport { Announcement } from '@things-factory/announcement'\n\nimport { Regulation, RegulationClause, RegulationKind, RegulationProcedure, RegulationProcedureKind, RegulationVersion } from './regulation'\n\n@InputType({ description: 'A new company rule' })\nexport class NewRegulation {\n @Field({ description: 'The code, unique in the domain' }) code: string\n @Field({ description: 'The name' }) name: string\n @Field(type => RegulationKind, { description: 'What it is' }) kind: RegulationKind\n @Field(type => [String], { nullable: true, description: \"The guide's sections it answers\" }) topics?: string[]\n @Field(type => Int, { nullable: true, description: 'Its place in the list' }) rank?: number\n @Field({ nullable: true, description: 'The text of its first version, in Markdown' }) body?: string\n}\n\n@InputType({ description: 'What changes of a company rule' })\nexport class RegulationPatch {\n @Field({ nullable: true, description: 'The name' }) name?: string\n @Field(type => RegulationKind, { nullable: true, description: 'What it is - while none of its versions is adopted' }) kind?: RegulationKind\n @Field(type => [String], { nullable: true, description: \"The guide's sections it answers\" }) topics?: string[]\n @Field(type => Int, { nullable: true, description: 'Its place in the list' }) rank?: number\n}\n\n@InputType({ description: 'What changes of a version being written' })\nexport class RegulationVersionPatch {\n @Field({ nullable: true, description: 'The text in Markdown' }) body?: string\n @Field({ nullable: true, description: 'YYYY-MM-DD it takes effect' }) effectiveOn?: string\n @Field({ nullable: true, description: 'What changed' }) changeSummary?: string\n @Field({ nullable: true, description: 'Whether the change is against the workers' }) unfavourable?: boolean\n @Field(type => Int, { nullable: true, description: 'How many workers the procedure is of' }) workersCount?: number\n}\n\n@InputType({ description: 'An opinion heard, a consent given or a filing' })\nexport class NewRegulationProcedure {\n @Field({ description: 'The version' }) versionId: string\n @Field(type => RegulationProcedureKind, { description: 'Opinion, consent or filing' }) kind: RegulationProcedureKind\n @Field({ description: 'YYYY-MM-DD' }) day: string\n @Field({ nullable: true, description: 'How it was taken' }) method?: string\n @Field(type => Int, { nullable: true, description: 'How many workers it was of' }) workersCount?: number\n @Field(type => Int, { nullable: true, description: 'How many consented' }) consentCount?: number\n @Field({ nullable: true, description: 'Notes' }) notes?: string\n}\n\n@ObjectType({ description: 'A list of company rules' })\nexport class RegulationList {\n @Field(type => [Regulation], { description: 'The rules' }) items: Regulation[]\n @Field(type => Int, { description: 'How many' }) total: number\n}\n\n@ObjectType({ description: 'An article added, changed or removed of the version before' })\nexport class RegulationClauseChange {\n @Field({ description: 'The article number' }) number: string\n @Field({ nullable: true, description: 'Its heading' }) title?: string\n @Field({ description: 'ADDED, CHANGED or REMOVED' }) change: string\n}\n\n@ObjectType({ description: 'A procedure with how many papers it carries' })\nexport class RegulationProcedureRow extends RegulationProcedure {\n @Field(type => Int, { description: 'How many papers are attached' }) files: number\n}\n\n@ObjectType({ description: 'A version as its reader sees it - where it stands today, its articles and what changed' })\nexport class RegulationVersionView {\n @Field(type => RegulationVersion, { description: 'The version' }) version: RegulationVersion\n @Field({ description: 'DRAFT, IN_APPROVAL, DUE, IN_FORCE or PAST - on today' }) period: string\n @Field({ nullable: true, description: 'YYYY-MM-DD the version after it took effect - the end of its time' }) endsOn?: string\n @Field(type => [RegulationClause], { description: 'Its articles' }) clauses: RegulationClause[]\n @Field(type => [RegulationClauseChange], { description: 'What it changed of the version adopted before' }) changes: RegulationClauseChange[]\n @Field(type => [RegulationProcedureRow], { nullable: true, description: 'The procedure - to its keepers only' }) procedures?: RegulationProcedureRow[]\n @Field(type => Announcement, { nullable: true, description: 'The announcement that told of it - to its keepers only' }) announcement?: Announcement\n @Field({ description: 'Whether the employees were told of it - its announcement is out' }) told: boolean\n @Field({ nullable: true, description: 'When the reader acknowledged it' }) readAt?: Date\n}\n\n@ObjectType({ description: 'A company rule as its reader sees it' })\nexport class RegulationView {\n @Field(type => Regulation, { description: 'The rule' }) regulation: Regulation\n @Field(type => RegulationVersionView, { nullable: true, description: 'The version in force' }) inForce?: RegulationVersionView\n @Field(type => RegulationVersionView, { nullable: true, description: 'The version adopted to take effect later' }) due?: RegulationVersionView\n @Field(type => [RegulationVersionView], { description: 'Every version the reader may read, newest first' }) versions: RegulationVersionView[]\n}\n"]}
|
|
1
|
+
{"version":3,"file":"regulation-type.js","sourceRoot":"","sources":["../../../server/service/regulation/regulation-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'\n\nimport { Announcement } from '@things-factory/announcement'\n\nimport { Regulation, RegulationClause, RegulationKind, RegulationProcedure, RegulationProcedureKind, RegulationVersion } from './regulation'\n\n@InputType({ description: 'A new company rule' })\nexport class NewRegulation {\n @Field({ description: 'The code, unique in the domain' }) code: string\n @Field({ description: 'The name' }) name: string\n @Field(type => RegulationKind, { description: 'What it is' }) kind: RegulationKind\n @Field(type => [String], { nullable: true, description: \"The guide's sections it answers\" }) topics?: string[]\n @Field(type => Int, { nullable: true, description: 'Its place in the list' }) rank?: number\n @Field({ nullable: true, description: 'The text of its first version, in Markdown' }) body?: string\n}\n\n@InputType({ description: 'What changes of a company rule' })\nexport class RegulationPatch {\n @Field({ nullable: true, description: 'The name' }) name?: string\n @Field(type => RegulationKind, { nullable: true, description: 'What it is - while none of its versions is adopted' }) kind?: RegulationKind\n @Field(type => [String], { nullable: true, description: \"The guide's sections it answers\" }) topics?: string[]\n @Field(type => Int, { nullable: true, description: 'Its place in the list' }) rank?: number\n}\n\n@InputType({ description: 'What changes of a version being written' })\nexport class RegulationVersionPatch {\n @Field({ nullable: true, description: 'The text in Markdown' }) body?: string\n @Field({ nullable: true, description: 'YYYY-MM-DD it takes effect' }) effectiveOn?: string\n @Field({ nullable: true, description: 'What changed' }) changeSummary?: string\n @Field({ nullable: true, description: 'Whether the change is against the workers' }) unfavourable?: boolean\n @Field(type => Int, { nullable: true, description: 'How many workers the procedure is of' }) workersCount?: number\n}\n\n@InputType({ description: 'An opinion heard, a consent given or a filing' })\nexport class NewRegulationProcedure {\n @Field({ description: 'The version' }) versionId: string\n @Field(type => RegulationProcedureKind, { description: 'Opinion, consent or filing' }) kind: RegulationProcedureKind\n @Field({ description: 'YYYY-MM-DD' }) day: string\n @Field({ nullable: true, description: 'How it was taken' }) method?: string\n @Field(type => Int, { nullable: true, description: 'How many workers it was of' }) workersCount?: number\n @Field(type => Int, { nullable: true, description: 'How many consented' }) consentCount?: number\n @Field({ nullable: true, description: 'Notes' }) notes?: string\n}\n\n@ObjectType({ description: 'A list of company rules' })\nexport class RegulationList {\n @Field(type => [Regulation], { description: 'The rules' }) items: Regulation[]\n @Field(type => Int, { description: 'How many' }) total: number\n}\n\n@ObjectType({ description: 'An article added, changed or removed of the version before' })\nexport class RegulationClauseChange {\n @Field({ description: 'The article number' }) number: string\n @Field({ nullable: true, description: 'Its heading' }) title?: string\n @Field({ description: 'How it is named on the page - 제3조(휴게), 부칙 제1조(시행일)' }) heading: string\n @Field({ description: 'ADDED, CHANGED or REMOVED' }) change: string\n}\n\n@ObjectType({ description: 'A procedure with how many papers it carries' })\nexport class RegulationProcedureRow extends RegulationProcedure {\n @Field(type => Int, { description: 'How many papers are attached' }) files: number\n}\n\n@ObjectType({ description: 'A version as its reader sees it - where it stands today, its articles and what changed' })\nexport class RegulationVersionView {\n @Field(type => RegulationVersion, { description: 'The version' }) version: RegulationVersion\n @Field({ description: 'DRAFT, IN_APPROVAL, DUE, IN_FORCE or PAST - on today' }) period: string\n @Field({ nullable: true, description: 'YYYY-MM-DD the version after it took effect - the end of its time' }) endsOn?: string\n @Field(type => [RegulationClause], { description: 'Its articles' }) clauses: RegulationClause[]\n @Field({ nullable: true, description: 'The words after its articles from the first line headed in brackets - [별표 1]' }) appendix?: string\n @Field({ nullable: true, description: 'The whole text, where it has no article - a table of amounts' }) text?: string\n @Field(type => [RegulationClauseChange], { description: 'What it changed of the version adopted before' }) changes: RegulationClauseChange[]\n @Field(type => [RegulationProcedureRow], { nullable: true, description: 'The procedure - to its keepers only' }) procedures?: RegulationProcedureRow[]\n @Field(type => Int, { nullable: true, description: 'How many originals are attached to a version registered as in force - to its keepers only' }) originals?: number\n @Field(type => Announcement, { nullable: true, description: 'The announcement that told of it - to its keepers only' }) announcement?: Announcement\n @Field({ description: 'Whether the employees were told of it - its announcement is out' }) told: boolean\n @Field({ nullable: true, description: 'When the reader acknowledged it' }) readAt?: Date\n}\n\n@ObjectType({ description: 'A company rule as its reader sees it' })\nexport class RegulationView {\n @Field(type => Regulation, { description: 'The rule' }) regulation: Regulation\n @Field(type => RegulationVersionView, { nullable: true, description: 'The version in force' }) inForce?: RegulationVersionView\n @Field(type => RegulationVersionView, { nullable: true, description: 'The version adopted to take effect later' }) due?: RegulationVersionView\n @Field(type => [RegulationVersionView], { description: 'Every version the reader may read, newest first' }) versions: RegulationVersionView[]\n}\n"]}
|
|
@@ -71,6 +71,7 @@ export declare class RegulationVersion {
|
|
|
71
71
|
adoptedBy?: User;
|
|
72
72
|
adoptedById?: string;
|
|
73
73
|
adoptionNote?: string;
|
|
74
|
+
registeredInForce?: boolean;
|
|
74
75
|
announcementId?: string;
|
|
75
76
|
createdAt?: Date;
|
|
76
77
|
updatedAt?: Date;
|
|
@@ -87,6 +88,7 @@ export declare class RegulationClause {
|
|
|
87
88
|
versionId?: string;
|
|
88
89
|
rank: number;
|
|
89
90
|
number: string;
|
|
91
|
+
heading?: string;
|
|
90
92
|
title?: string;
|
|
91
93
|
chapter?: string;
|
|
92
94
|
text: string;
|
|
@@ -210,6 +210,11 @@ tslib_1.__decorate([
|
|
|
210
210
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Why an approval did not adopt it - its effective day had passed' }),
|
|
211
211
|
tslib_1.__metadata("design:type", String)
|
|
212
212
|
], RegulationVersion.prototype, "adoptionNote", void 0);
|
|
213
|
+
tslib_1.__decorate([
|
|
214
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
215
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'Whether it was registered as in force already - a rule taken before the system, adopted without approval or announcement' }),
|
|
216
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
217
|
+
], RegulationVersion.prototype, "registeredInForce", void 0);
|
|
213
218
|
tslib_1.__decorate([
|
|
214
219
|
(0, typeorm_1.Column)({ nullable: true }),
|
|
215
220
|
(0, type_graphql_1.Field)({ nullable: true, description: 'The announcement that told the employees of it' }),
|
|
@@ -278,9 +283,14 @@ tslib_1.__decorate([
|
|
|
278
283
|
], RegulationClause.prototype, "rank", void 0);
|
|
279
284
|
tslib_1.__decorate([
|
|
280
285
|
(0, typeorm_1.Column)(),
|
|
281
|
-
(0, type_graphql_1.Field)({ description: 'The article number as written - `3`, `3의2`' }),
|
|
286
|
+
(0, type_graphql_1.Field)({ description: 'The article number as written - `3`, `3의2`; in the addenda `부칙1`' }),
|
|
282
287
|
tslib_1.__metadata("design:type", String)
|
|
283
288
|
], RegulationClause.prototype, "number", void 0);
|
|
289
|
+
tslib_1.__decorate([
|
|
290
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
291
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'How it is named on the page - 제3조(휴게), 부칙 제1조(시행일)' }),
|
|
292
|
+
tslib_1.__metadata("design:type", String)
|
|
293
|
+
], RegulationClause.prototype, "heading", void 0);
|
|
284
294
|
tslib_1.__decorate([
|
|
285
295
|
(0, typeorm_1.Column)({ nullable: true }),
|
|
286
296
|
(0, type_graphql_1.Field)({ nullable: true, description: 'The heading in the brackets - 근로시간' }),
|