Add validation of articles
This commit is contained in:
parent
04cdaac718
commit
126aebd7b1
14 changed files with 2335 additions and 111 deletions
|
@ -473,9 +473,8 @@ function auditLigne(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
remainingKeys,
|
remainingKeys,
|
||||||
auditSwitch(
|
auditSwitch(
|
||||||
[auditNumber, auditInteger, auditFunction((numero) => numero.toString())],
|
[auditNumber, auditInteger, auditFunction((numero) => numero.toString())],
|
||||||
auditTrimString,
|
[auditTrimString, auditEmptyToNull],
|
||||||
),
|
),
|
||||||
auditEmptyToNull,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return audit.reduceRemaining(data, errors, remainingKeys)
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
773
src/lib/auditors/jorf/articles.ts
Normal file
773
src/lib/auditors/jorf/articles.ts
Normal file
|
@ -0,0 +1,773 @@
|
||||||
|
import {
|
||||||
|
type Audit,
|
||||||
|
auditRequire,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditTrimString,
|
||||||
|
auditInteger,
|
||||||
|
auditFunction,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditNullish,
|
||||||
|
auditSwitch,
|
||||||
|
auditNumber,
|
||||||
|
auditCleanArray,
|
||||||
|
auditOptions,
|
||||||
|
auditHttpUrl,
|
||||||
|
} from "@auditors/core"
|
||||||
|
|
||||||
|
import {
|
||||||
|
allJorfArticleEtatsMutable,
|
||||||
|
allJorfArticleLienArticleOriginesMutable,
|
||||||
|
allJorfArticleNaturesMutable,
|
||||||
|
allJorfArticleOriginesMutable,
|
||||||
|
allJorfArticleTexteNaturesMutable,
|
||||||
|
allJorfArticleTypesMutable,
|
||||||
|
} from "$lib/legal"
|
||||||
|
|
||||||
|
function auditBlocTextuel(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"CONTENU",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditContexte(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TEXTE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTexte,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditEliAlias(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ID_ELI_ALIAS",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditHttpUrl,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function auditJorfArticle(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"BLOC_TEXTUEL",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditBlocTextuel,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"CONTEXTE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditContexte,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"LIENS",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(auditTrimString, auditLiens),
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditNullish,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMeta,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"SM",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSm,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditNullish,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"VERSIONS",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditVersions,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditLienArt(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
for (const key of ["@debut", "@fin"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@etat",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allJorfArticleEtatsMutable),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@id",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@num",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@origine",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allJorfArticleLienArticleOriginesMutable),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditLiens(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Mots-clés articles
|
||||||
|
function auditMcsArt(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"MC",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((lien) => (Array.isArray(lien) ? lien : [lien])),
|
||||||
|
auditCleanArray(
|
||||||
|
auditSwitch(
|
||||||
|
[auditNumber, auditInteger, auditFunction((num) => num.toString())],
|
||||||
|
[auditTrimString, auditEmptyToNull],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMeta(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META_COMMUN",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMetaCommun,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META_SPEC",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMetaSpec,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMetaArticle(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
for (const key of ["DATE_DEBUT", "DATE_FIN"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"MCS_ART",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch([auditTrimString, auditEmptyToNull, auditNullish], auditMcsArt),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"NUM",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(
|
||||||
|
[auditNumber, auditFunction((num) => num.toString())],
|
||||||
|
[auditTrimString, auditEmptyToNull],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TYPE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allJorfArticleTypesMutable),
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMetaCommun(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ANCIEN_ID",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(
|
||||||
|
[auditNumber, auditInteger, auditFunction((id) => id.toString())],
|
||||||
|
[auditTrimString, auditEmptyToNull],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
audit.attribute(data, "ELI_ALIAS", true, errors, remainingKeys, auditEliAlias)
|
||||||
|
for (const key of ["ID", "URL"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ID_ELI",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditHttpUrl,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"NATURE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allJorfArticleNaturesMutable),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ORIGINE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allJorfArticleOriginesMutable),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMetaSpec(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META_ARTICLE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMetaArticle,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditSm(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"CONTENU",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditNullish,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditTexte(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@cid",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
for (const key of ["@date_publi", "@date_signature"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((date) => date.replace(/^11992-12-27$/, "1992-12-27")),
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@nature",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allJorfArticleTexteNaturesMutable),
|
||||||
|
)
|
||||||
|
for (const key of ["@nor", "@num", "@num_parution_jo"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TITRE_TXT",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((titreTxt) =>
|
||||||
|
Array.isArray(titreTxt) ? titreTxt : [titreTxt],
|
||||||
|
),
|
||||||
|
auditCleanArray(auditTitreTxt),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(data, "TM", true, errors, remainingKeys, auditTm)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditTitreTm(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"#text",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
for (const key of ["@debut", "@fin"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@id",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditTitreTxt(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"#text",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@c_titre_court",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
for (const key of ["@debut", "@fin"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@id_txt",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Table des matières
|
||||||
|
function auditTm(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TITRE_TM",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTitreTm,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(data, "TM", true, errors, remainingKeys, auditTm)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditVersion(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@etat",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allJorfArticleEtatsMutable),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"LIEN_ART",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditLienArt,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditVersions(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"VERSION",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((version) => (Array.isArray(version) ? version : [version])),
|
||||||
|
auditCleanArray(auditVersion),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
1
src/lib/auditors/jorf/index.ts
Normal file
1
src/lib/auditors/jorf/index.ts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
export { auditJorfArticle } from "./articles"
|
912
src/lib/auditors/legi/articles.ts
Normal file
912
src/lib/auditors/legi/articles.ts
Normal file
|
@ -0,0 +1,912 @@
|
||||||
|
import {
|
||||||
|
type Audit,
|
||||||
|
auditRequire,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditTrimString,
|
||||||
|
auditInteger,
|
||||||
|
auditFunction,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditSwitch,
|
||||||
|
auditNumber,
|
||||||
|
auditCleanArray,
|
||||||
|
auditOptions,
|
||||||
|
auditHttpUrl,
|
||||||
|
} from "@auditors/core"
|
||||||
|
|
||||||
|
import {
|
||||||
|
allLegiArticleEtatsMutable,
|
||||||
|
allLegiArticleLienArticleOriginesMutable,
|
||||||
|
allLegiArticleLienNaturesMutable,
|
||||||
|
allLegiArticleLienSensMutable,
|
||||||
|
allLegiArticleLienTypesMutable,
|
||||||
|
allLegiArticleNaturesMutable,
|
||||||
|
allLegiArticleOriginesMutable,
|
||||||
|
allLegiArticleTexteNaturesMutable,
|
||||||
|
allLegiArticleTypesMutable,
|
||||||
|
} from "$lib/legal"
|
||||||
|
|
||||||
|
export const legiArticleStats: {
|
||||||
|
countByEtat: { [etat: string]: number }
|
||||||
|
countByLienArtEtat: { [etat: string]: number }
|
||||||
|
countByLienNature: { [nature: string]: number }
|
||||||
|
countByLienType: { [type: string]: number }
|
||||||
|
countByTexteNature: { [nature: string]: number }
|
||||||
|
countByVersionEtat: { [etat: string]: number }
|
||||||
|
} = {
|
||||||
|
countByEtat: {},
|
||||||
|
countByLienArtEtat: {},
|
||||||
|
countByLienNature: {},
|
||||||
|
countByLienType: {},
|
||||||
|
countByTexteNature: {},
|
||||||
|
countByVersionEtat: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditBlocTextuel(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"CONTENU",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditContexte(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TEXTE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTexte,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditEliAlias(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ID_ELI_ALIAS",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditHttpUrl,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function auditLegiArticle(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"BLOC_TEXTUEL",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditBlocTextuel,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"CONTEXTE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditContexte,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"LIENS",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(auditTrimString, auditLiens),
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMeta,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"NOTA",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditNota,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"VERSIONS",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditVersions,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditLien(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"#text",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(
|
||||||
|
[auditNumber, auditInteger, auditFunction((num) => num.toString())],
|
||||||
|
[auditTrimString, auditEmptyToNull],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
for (const key of ["@cidtexte", "@id", "@nortexte"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
for (const key of ["@datesignatexte"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditDateIso8601String,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@naturetexte",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
// auditFunction((nature) => {
|
||||||
|
// legiArticleStats.countByLienNature[nature] =
|
||||||
|
// (legiArticleStats.countByLienNature[nature] ?? 0) + 1
|
||||||
|
// return nature
|
||||||
|
// }),
|
||||||
|
auditOptions(allLegiArticleLienNaturesMutable),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@num",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@numtexte",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@sens",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allLegiArticleLienSensMutable),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@typelien",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
// auditFunction((type) => {
|
||||||
|
// legiArticleStats.countByLienType[type] =
|
||||||
|
// (legiArticleStats.countByLienType[type] ?? 0) + 1
|
||||||
|
// return type
|
||||||
|
// }),
|
||||||
|
auditOptions(allLegiArticleLienTypesMutable),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditLienArt(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
for (const key of ["@debut", "@fin"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@etat",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
// auditFunction((etat) => {
|
||||||
|
// legiArticleStats.countByLienArtEtat[etat] =
|
||||||
|
// (legiArticleStats.countByLienArtEtat[etat] ?? 0) + 1
|
||||||
|
// return etat
|
||||||
|
// }),
|
||||||
|
auditOptions(allLegiArticleEtatsMutable),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@id",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@num",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@origine",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allLegiArticleLienArticleOriginesMutable),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditLiens(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"LIEN",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((lien) => (Array.isArray(lien) ? lien : [lien])),
|
||||||
|
auditCleanArray(auditLien),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMeta(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META_COMMUN",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMetaCommun,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META_SPEC",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMetaSpec,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMetaArticle(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
for (const key of ["DATE_DEBUT", "DATE_FIN"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ETAT",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
// auditFunction((etat) => {
|
||||||
|
// legiArticleStats.countByEtat[etat] =
|
||||||
|
// (legiArticleStats.countByEtat[etat] ?? 0) + 1
|
||||||
|
// return etat
|
||||||
|
// }),
|
||||||
|
auditOptions(allLegiArticleEtatsMutable),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"NUM",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(
|
||||||
|
[auditNumber, auditFunction((num) => num.toString())],
|
||||||
|
[auditTrimString, auditEmptyToNull],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TYPE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allLegiArticleTypesMutable),
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMetaCommun(
|
||||||
|
audit: Audit,
|
||||||
|
dataUnknown: unknown,
|
||||||
|
): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ANCIEN_ID",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(
|
||||||
|
[auditNumber, auditInteger, auditFunction((id) => id.toString())],
|
||||||
|
[auditTrimString, auditEmptyToNull],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
for (const key of ["ID", "URL"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"NATURE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allLegiArticleNaturesMutable),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"ORIGINE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditOptions(allLegiArticleOriginesMutable),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditMetaSpec(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"META_ARTICLE",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditMetaArticle,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditNota(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"CONTENU",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditTexte(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@autorite",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@cid",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
for (const key of ["@date_publi", "@date_signature"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((date) => date.replace(/^11992-12-27$/, "1992-12-27")),
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@ministere",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@nature",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
// auditFunction((nature) => {
|
||||||
|
// legiArticleStats.countByTexteNature[nature] =
|
||||||
|
// (legiArticleStats.countByTexteNature[nature] ?? 0) + 1
|
||||||
|
// return nature
|
||||||
|
// }),
|
||||||
|
auditOptions(allLegiArticleTexteNaturesMutable),
|
||||||
|
)
|
||||||
|
for (const key of ["@nor", "@num", "@num_parution_jo"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TITRE_TXT",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((titreTxt) =>
|
||||||
|
Array.isArray(titreTxt) ? titreTxt : [titreTxt],
|
||||||
|
),
|
||||||
|
auditCleanArray(auditTitreTxt),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(data, "TM", true, errors, remainingKeys, auditTm)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditTitreTm(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"#text",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditSwitch(
|
||||||
|
[auditNumber, auditInteger, auditFunction((num) => num.toString())],
|
||||||
|
[auditTrimString, auditEmptyToNull],
|
||||||
|
),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
for (const key of ["@debut", "@fin"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@id",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditTitreTxt(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"#text",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@c_titre_court",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
for (const key of ["@debut", "@fin"]) {
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
key,
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditDateIso8601String,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@id_txt",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Table des matières
|
||||||
|
function auditTm(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"TITRE_TM",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((titreTm) => (Array.isArray(titreTm) ? titreTm : [titreTm])),
|
||||||
|
auditCleanArray(auditTitreTm),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
audit.attribute(data, "TM", true, errors, remainingKeys, auditTm)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditVersion(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"@etat",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditTrimString,
|
||||||
|
auditEmptyToNull,
|
||||||
|
// auditFunction((etat) => {
|
||||||
|
// legiArticleStats.countByVersionEtat[etat] =
|
||||||
|
// (legiArticleStats.countByVersionEtat[etat] ?? 0) + 1
|
||||||
|
// return etat
|
||||||
|
// }),
|
||||||
|
auditOptions(allLegiArticleEtatsMutable),
|
||||||
|
)
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"LIEN_ART",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditLienArt,
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
||||||
|
|
||||||
|
function auditVersions(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
|
||||||
|
if (dataUnknown == null) {
|
||||||
|
return [dataUnknown, null]
|
||||||
|
}
|
||||||
|
if (typeof dataUnknown !== "object") {
|
||||||
|
return audit.unexpectedType(dataUnknown, "object")
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = { ...dataUnknown }
|
||||||
|
const errors: { [key: string]: unknown } = {}
|
||||||
|
const remainingKeys = new Set(Object.keys(data))
|
||||||
|
|
||||||
|
audit.attribute(
|
||||||
|
data,
|
||||||
|
"VERSION",
|
||||||
|
true,
|
||||||
|
errors,
|
||||||
|
remainingKeys,
|
||||||
|
auditFunction((version) => (Array.isArray(version) ? version : [version])),
|
||||||
|
auditCleanArray(auditVersion),
|
||||||
|
auditRequire,
|
||||||
|
)
|
||||||
|
|
||||||
|
return audit.reduceRemaining(data, errors, remainingKeys)
|
||||||
|
}
|
1
src/lib/auditors/legi/index.ts
Normal file
1
src/lib/auditors/legi/index.ts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
export { auditLegiArticle, legiArticleStats } from "./articles"
|
|
@ -7,24 +7,71 @@ export {
|
||||||
type GetRechercheResult,
|
type GetRechercheResult,
|
||||||
type GetTexteResult,
|
type GetTexteResult,
|
||||||
type ListTextesResult,
|
type ListTextesResult,
|
||||||
} from "$lib/aggregates"
|
} from "./aggregates"
|
||||||
|
|
||||||
export { default as ArticleView } from "$lib/components/ArticleView.svelte"
|
export { default as ArticleView } from "./components/ArticleView.svelte"
|
||||||
|
|
||||||
export { default as LienView } from "$lib/components/LienView.svelte"
|
export { default as LienView } from "./components/LienView.svelte"
|
||||||
|
|
||||||
export { default as SectionTaView } from "$lib/components/SectionTaView.svelte"
|
export { default as SectionTaView } from "./components/SectionTaView.svelte"
|
||||||
|
|
||||||
export { default as TextelrView } from "$lib/components/TextelrView.svelte"
|
export { default as TextelrView } from "./components/TextelrView.svelte"
|
||||||
|
|
||||||
export { default as TexteVersionView } from "$lib/components/TexteVersionView.svelte"
|
export { default as TexteVersionView } from "./components/TexteVersionView.svelte"
|
||||||
|
|
||||||
|
export {
|
||||||
|
allJorfArticleEtats,
|
||||||
|
allJorfArticleEtatsMutable,
|
||||||
|
allJorfArticleLienArticleOrigines,
|
||||||
|
allJorfArticleLienArticleOriginesMutable,
|
||||||
|
allJorfArticleNatures,
|
||||||
|
allJorfArticleNaturesMutable,
|
||||||
|
allJorfArticleOrigines,
|
||||||
|
allJorfArticleOriginesMutable,
|
||||||
|
allJorfArticleTexteNatures,
|
||||||
|
allJorfArticleTexteNaturesMutable,
|
||||||
|
allJorfArticleTypes,
|
||||||
|
allJorfArticleTypesMutable,
|
||||||
|
allLegiArticleEtats,
|
||||||
|
allLegiArticleEtatsMutable,
|
||||||
|
allLegiArticleLienArticleOrigines,
|
||||||
|
allLegiArticleLienArticleOriginesMutable,
|
||||||
|
allLegiArticleLienNatures,
|
||||||
|
allLegiArticleLienNaturesMutable,
|
||||||
|
allLegiArticleLienSens,
|
||||||
|
allLegiArticleLienSensMutable,
|
||||||
|
allLegiArticleNatures,
|
||||||
|
allLegiArticleNaturesMutable,
|
||||||
|
allLegiArticleOrigines,
|
||||||
|
allLegiArticleOriginesMutable,
|
||||||
|
allLegiArticleTexteNatures,
|
||||||
|
allLegiArticleTexteNaturesMutable,
|
||||||
|
allLegiArticleTypes,
|
||||||
|
allLegiArticleTypesMutable,
|
||||||
|
type DossierLegislatif,
|
||||||
|
type JorfArticle,
|
||||||
|
type JorfArticleEtat,
|
||||||
|
type JorfArticleLienArticleOrigine,
|
||||||
|
type JorfArticleNature,
|
||||||
|
type JorfArticleOrigine,
|
||||||
|
type JorfArticleTexteNature,
|
||||||
|
type JorfArticleType,
|
||||||
|
type LegiArticle,
|
||||||
|
type LegiArticleEtat,
|
||||||
|
type LegiArticleLienArticleOrigine,
|
||||||
|
type LegiArticleLienNature,
|
||||||
|
type LegiArticleLienSens,
|
||||||
|
type LegiArticleNature,
|
||||||
|
type LegiArticleOrigine,
|
||||||
|
type LegiArticleTexteNature,
|
||||||
|
type LegiArticleType,
|
||||||
|
} from "./legal"
|
||||||
|
|
||||||
export {
|
export {
|
||||||
type Article,
|
type Article,
|
||||||
type ArticleVersion,
|
type ArticleVersion,
|
||||||
bestItemForDate,
|
bestItemForDate,
|
||||||
type Contexte,
|
type Contexte,
|
||||||
type DossierLegislatif,
|
|
||||||
type Etat,
|
type Etat,
|
||||||
type Idcc,
|
type Idcc,
|
||||||
type Jo,
|
type Jo,
|
||||||
|
@ -50,4 +97,4 @@ export {
|
||||||
type Tm,
|
type Tm,
|
||||||
type TmLienTxt,
|
type TmLienTxt,
|
||||||
type Versions,
|
type Versions,
|
||||||
} from "$lib/legal"
|
} from "./legal"
|
||||||
|
|
82
src/lib/legal/dole.ts
Normal file
82
src/lib/legal/dole.ts
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
export interface ArborescenceLien {
|
||||||
|
"#text"?: string
|
||||||
|
"@id": string
|
||||||
|
"@libelle"?: string
|
||||||
|
"@lien"?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ArborescenceNiveau {
|
||||||
|
"@id": string
|
||||||
|
"@libelle": string
|
||||||
|
LIEN?: ArborescenceLien[]
|
||||||
|
NIVEAU?: ArborescenceNiveau
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DossierLegislatif {
|
||||||
|
CONTENU: {
|
||||||
|
ARBORESCENCE: {
|
||||||
|
LIEN?: ArborescenceLien[]
|
||||||
|
NIVEAU?: ArborescenceNiveau
|
||||||
|
}
|
||||||
|
CONTENU_DOSSIER_1?: string
|
||||||
|
CONTENU_DOSSIER_2?: string
|
||||||
|
CONTENU_DOSSIER_3?: string
|
||||||
|
CONTENU_DOSSIER_4?: string
|
||||||
|
CONTENU_DOSSIER_5?: string
|
||||||
|
ECHEANCIER?: {
|
||||||
|
"@derniere_maj"?: string
|
||||||
|
LIGNE: Ligne[]
|
||||||
|
}
|
||||||
|
EXPOSE_MOTIF?: string
|
||||||
|
LIBELLE_TEXTE_1?: string
|
||||||
|
LIBELLE_TEXTE_2?: string
|
||||||
|
LIBELLE_TEXTE_3?: string
|
||||||
|
LIBELLE_TEXTE_4?: string
|
||||||
|
LIBELLE_TEXTE_5?: string
|
||||||
|
}
|
||||||
|
META: {
|
||||||
|
META_COMMUN: {
|
||||||
|
// MetaCommun
|
||||||
|
ANCIEN_ID?: string
|
||||||
|
ID: string
|
||||||
|
URL: string
|
||||||
|
// NATURE?: Nature // Never used
|
||||||
|
ORIGINE: "JORF" // Origine
|
||||||
|
}
|
||||||
|
META_DOSSIER_LEGISLATIF: {
|
||||||
|
DATE_CREATION: string
|
||||||
|
DATE_DERNIERE_MODIFICATION: string
|
||||||
|
ID_TEXTE_1?: string
|
||||||
|
ID_TEXTE_2?: string
|
||||||
|
ID_TEXTE_3?: string
|
||||||
|
ID_TEXTE_4?: string
|
||||||
|
ID_TEXTE_5?: string
|
||||||
|
LEGISLATURE: {
|
||||||
|
DATE_DEBUT: string
|
||||||
|
DATE_FIN: string
|
||||||
|
LIBELLE: string
|
||||||
|
NUMERO: number
|
||||||
|
}
|
||||||
|
TITRE: string
|
||||||
|
TYPE?:
|
||||||
|
| "LOI_PUBLIEE"
|
||||||
|
| "PROJET_LOI"
|
||||||
|
| "PROPOSITION_LOI"
|
||||||
|
| "ORDONNANCE_PUBLIEE"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Ligne {
|
||||||
|
ARTICLE?: string
|
||||||
|
BASE_LEGALE?: string
|
||||||
|
CID_LOI_CIBLE?: string // Always a JORFTEXT ID
|
||||||
|
DATE_PREVUE?: string
|
||||||
|
DECRET?: string
|
||||||
|
LIEN_ARTICLE?: Array<{
|
||||||
|
"@id": string // Always a JORFARTI ID
|
||||||
|
"#text": string
|
||||||
|
}>
|
||||||
|
NUMERO_ORDRE?: string
|
||||||
|
OBJET?: string
|
||||||
|
}
|
|
@ -1,18 +1,59 @@
|
||||||
import type { MenuItem } from "@tricoteuses/explorer-tools"
|
import type { MenuItem } from "@tricoteuses/explorer-tools"
|
||||||
|
|
||||||
export interface ArborescenceLien {
|
import type { DossierLegislatif } from "./dole"
|
||||||
"#text"?: string
|
|
||||||
"@id": string
|
|
||||||
"@libelle"?: string
|
|
||||||
"@lien"?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ArborescenceNiveau {
|
export type { DossierLegislatif } from "./dole"
|
||||||
"@id": string
|
export {
|
||||||
"@libelle": string
|
allJorfArticleEtats,
|
||||||
LIEN?: ArborescenceLien[]
|
allJorfArticleEtatsMutable,
|
||||||
NIVEAU?: ArborescenceNiveau
|
allJorfArticleLienArticleOrigines,
|
||||||
}
|
allJorfArticleLienArticleOriginesMutable,
|
||||||
|
allJorfArticleNatures,
|
||||||
|
allJorfArticleNaturesMutable,
|
||||||
|
allJorfArticleOrigines,
|
||||||
|
allJorfArticleOriginesMutable,
|
||||||
|
allJorfArticleTexteNatures,
|
||||||
|
allJorfArticleTexteNaturesMutable,
|
||||||
|
allJorfArticleTypes,
|
||||||
|
allJorfArticleTypesMutable,
|
||||||
|
type JorfArticle,
|
||||||
|
type JorfArticleEtat,
|
||||||
|
type JorfArticleLienArticleOrigine,
|
||||||
|
type JorfArticleNature,
|
||||||
|
type JorfArticleOrigine,
|
||||||
|
type JorfArticleTexteNature,
|
||||||
|
type JorfArticleType,
|
||||||
|
} from "./jorf"
|
||||||
|
export {
|
||||||
|
allLegiArticleEtats,
|
||||||
|
allLegiArticleEtatsMutable,
|
||||||
|
allLegiArticleLienArticleOrigines,
|
||||||
|
allLegiArticleLienArticleOriginesMutable,
|
||||||
|
allLegiArticleLienNatures,
|
||||||
|
allLegiArticleLienNaturesMutable,
|
||||||
|
allLegiArticleLienSens,
|
||||||
|
allLegiArticleLienSensMutable,
|
||||||
|
allLegiArticleLienTypes,
|
||||||
|
allLegiArticleLienTypesMutable,
|
||||||
|
allLegiArticleNatures,
|
||||||
|
allLegiArticleNaturesMutable,
|
||||||
|
allLegiArticleOrigines,
|
||||||
|
allLegiArticleOriginesMutable,
|
||||||
|
allLegiArticleTexteNatures,
|
||||||
|
allLegiArticleTexteNaturesMutable,
|
||||||
|
allLegiArticleTypes,
|
||||||
|
allLegiArticleTypesMutable,
|
||||||
|
type LegiArticle,
|
||||||
|
type LegiArticleEtat,
|
||||||
|
type LegiArticleLienArticleOrigine,
|
||||||
|
type LegiArticleLienNature,
|
||||||
|
type LegiArticleLienSens,
|
||||||
|
type LegiArticleLienType,
|
||||||
|
type LegiArticleNature,
|
||||||
|
type LegiArticleOrigine,
|
||||||
|
type LegiArticleTexteNature,
|
||||||
|
type LegiArticleType,
|
||||||
|
} from "./legi"
|
||||||
|
|
||||||
export interface Article {
|
export interface Article {
|
||||||
META: {
|
META: {
|
||||||
|
@ -62,61 +103,6 @@ export interface Contexte {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DossierLegislatif {
|
|
||||||
META: {
|
|
||||||
META_COMMUN: {
|
|
||||||
// MetaCommun
|
|
||||||
ANCIEN_ID?: string
|
|
||||||
ID: string
|
|
||||||
URL: string
|
|
||||||
// NATURE?: Nature // Never used
|
|
||||||
ORIGINE: "JORF" // Origine
|
|
||||||
}
|
|
||||||
META_DOSSIER_LEGISLATIF: {
|
|
||||||
DATE_CREATION: string
|
|
||||||
DATE_DERNIERE_MODIFICATION: string
|
|
||||||
ID_TEXTE_1?: string
|
|
||||||
ID_TEXTE_2?: string
|
|
||||||
ID_TEXTE_3?: string
|
|
||||||
ID_TEXTE_4?: string
|
|
||||||
ID_TEXTE_5?: string
|
|
||||||
LEGISLATURE: {
|
|
||||||
DATE_DEBUT: string
|
|
||||||
DATE_FIN: string
|
|
||||||
LIBELLE: string
|
|
||||||
NUMERO: number
|
|
||||||
}
|
|
||||||
TITRE: string
|
|
||||||
TYPE?:
|
|
||||||
| "LOI_PUBLIEE"
|
|
||||||
| "PROJET_LOI"
|
|
||||||
| "PROPOSITION_LOI"
|
|
||||||
| "ORDONNANCE_PUBLIEE"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CONTENU: {
|
|
||||||
ARBORESCENCE: {
|
|
||||||
LIEN?: ArborescenceLien[]
|
|
||||||
NIVEAU?: ArborescenceNiveau
|
|
||||||
}
|
|
||||||
CONTENU_DOSSIER_1?: string
|
|
||||||
CONTENU_DOSSIER_2?: string
|
|
||||||
CONTENU_DOSSIER_3?: string
|
|
||||||
CONTENU_DOSSIER_4?: string
|
|
||||||
CONTENU_DOSSIER_5?: string
|
|
||||||
ECHEANCIER?: {
|
|
||||||
"@derniere_maj"?: string
|
|
||||||
LIGNE: Ligne[]
|
|
||||||
}
|
|
||||||
EXPOSE_MOTIF?: string
|
|
||||||
LIBELLE_TEXTE_1?: string
|
|
||||||
LIBELLE_TEXTE_2?: string
|
|
||||||
LIBELLE_TEXTE_3?: string
|
|
||||||
LIBELLE_TEXTE_4?: string
|
|
||||||
LIBELLE_TEXTE_5?: string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export type Etat =
|
export type Etat =
|
||||||
| ""
|
| ""
|
||||||
| "ABROGE_DIFF"
|
| "ABROGE_DIFF"
|
||||||
|
@ -260,20 +246,6 @@ export interface LienSectionTa {
|
||||||
"#text": string
|
"#text": string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Ligne {
|
|
||||||
ARTICLE?: string
|
|
||||||
BASE_LEGALE?: string
|
|
||||||
CID_LOI_CIBLE?: string // Always a JORFTEXT ID
|
|
||||||
DATE_PREVUE?: string
|
|
||||||
DECRET?: string
|
|
||||||
LIEN_ARTICLE?: Array<{
|
|
||||||
"@id": string // Always a JORFARTI ID
|
|
||||||
"#text": string
|
|
||||||
}>
|
|
||||||
NUMERO_ORDRE?: string
|
|
||||||
OBJET?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MetaCommun {
|
export interface MetaCommun {
|
||||||
ID: string
|
ID: string
|
||||||
URL: string
|
URL: string
|
||||||
|
@ -463,18 +435,18 @@ export interface TexteVersion {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TitreTm {
|
export interface TitreTm {
|
||||||
"@id": string
|
|
||||||
"@fin": string
|
|
||||||
"#text": string
|
"#text": string
|
||||||
"@debut": string
|
"@debut": string
|
||||||
|
"@fin": string
|
||||||
|
"@id": string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TitreTxt {
|
export interface TitreTxt {
|
||||||
"@fin": string
|
|
||||||
"@debut": string
|
|
||||||
"@id_txt": string
|
|
||||||
"@c_titre_court": string
|
|
||||||
"#text": string
|
"#text": string
|
||||||
|
"@c_titre_court": string
|
||||||
|
"@debut": string
|
||||||
|
"@fin": string
|
||||||
|
"@id_txt": string
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Table des matières (TM)
|
/// Table des matières (TM)
|
190
src/lib/legal/jorf.ts
Normal file
190
src/lib/legal/jorf.ts
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
export interface JorfArticle {
|
||||||
|
BLOC_TEXTUEL?: {
|
||||||
|
CONTENU: string // HTML
|
||||||
|
}
|
||||||
|
CONTEXTE: {
|
||||||
|
TEXTE: {
|
||||||
|
"@cid": string
|
||||||
|
"@date_publi": string
|
||||||
|
"@date_signature": string
|
||||||
|
"@nature"?: JorfArticleTexteNature
|
||||||
|
"@nor"?: string
|
||||||
|
"@num"?: string
|
||||||
|
"@num_parution_jo"?: string
|
||||||
|
TITRE_TXT: Array<{
|
||||||
|
"#text": string
|
||||||
|
"@c_titre_court"?: string
|
||||||
|
"@debut": string
|
||||||
|
"@fin": string
|
||||||
|
"@id_txt": string
|
||||||
|
}>
|
||||||
|
TM?: JorfArticleTm
|
||||||
|
}
|
||||||
|
}
|
||||||
|
META: {
|
||||||
|
META_COMMUN: {
|
||||||
|
ANCIEN_ID?: string
|
||||||
|
ELI_ALIAS?: {
|
||||||
|
ID_ELI_ALIAS: string
|
||||||
|
}
|
||||||
|
ID: string
|
||||||
|
ID_ELI?: string
|
||||||
|
NATURE?: JorfArticleNature
|
||||||
|
URL: string
|
||||||
|
ORIGINE: JorfArticleOrigine
|
||||||
|
}
|
||||||
|
META_SPEC: {
|
||||||
|
META_ARTICLE: {
|
||||||
|
DATE_FIN: string
|
||||||
|
DATE_DEBUT: string
|
||||||
|
/// Mots-clés
|
||||||
|
MCS_ART?: { MC: string[] }
|
||||||
|
NUM?: string
|
||||||
|
TYPE?: JorfArticleType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VERSIONS: {
|
||||||
|
VERSION: Array<{
|
||||||
|
"@etat"?: JorfArticleEtat
|
||||||
|
LIEN_ART: {
|
||||||
|
"@debut": string
|
||||||
|
"@etat"?: JorfArticleEtat
|
||||||
|
"@fin": string
|
||||||
|
"@id": string
|
||||||
|
"@num"?: string
|
||||||
|
"@origine": JorfArticleLienArticleOrigine
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export type JorfArticleEtat = (typeof allJorfArticleEtats)[number]
|
||||||
|
|
||||||
|
export type JorfArticleLienArticleOrigine =
|
||||||
|
(typeof allJorfArticleLienArticleOrigines)[number]
|
||||||
|
|
||||||
|
export type JorfArticleNature = (typeof allJorfArticleNatures)[number]
|
||||||
|
|
||||||
|
export type JorfArticleOrigine = (typeof allJorfArticleOrigines)[number]
|
||||||
|
|
||||||
|
export type JorfArticleTexteNature = (typeof allJorfArticleTexteNatures)[number]
|
||||||
|
|
||||||
|
export type JorfArticleType = (typeof allJorfArticleTypes)[number]
|
||||||
|
|
||||||
|
/// Table des matières (TM)
|
||||||
|
export interface JorfArticleTm {
|
||||||
|
TITRE_TM: {
|
||||||
|
"#text"?: string
|
||||||
|
"@debut": string
|
||||||
|
"@fin": string
|
||||||
|
"@id": string
|
||||||
|
}
|
||||||
|
TM?: JorfArticleTm
|
||||||
|
}
|
||||||
|
|
||||||
|
export const allJorfArticleEtats = [
|
||||||
|
"ABROGE",
|
||||||
|
"ABROGE_DIFF",
|
||||||
|
"ANNULE",
|
||||||
|
"MODIFIE",
|
||||||
|
"MODIFIE_MORT_NE",
|
||||||
|
"PERIME",
|
||||||
|
"TRANSFERE",
|
||||||
|
"VIGUEUR",
|
||||||
|
"VIGUEUR_DIFF",
|
||||||
|
] as const
|
||||||
|
export const allJorfArticleEtatsMutable = [...allJorfArticleEtats]
|
||||||
|
|
||||||
|
export const allJorfArticleLienArticleOrigines = ["JORF", "LEGI"] as const
|
||||||
|
export const allJorfArticleLienArticleOriginesMutable = [
|
||||||
|
...allJorfArticleLienArticleOrigines,
|
||||||
|
]
|
||||||
|
|
||||||
|
export const allJorfArticleNatures = ["Article"] as const
|
||||||
|
export const allJorfArticleNaturesMutable = [...allJorfArticleNatures]
|
||||||
|
|
||||||
|
export const allJorfArticleOrigines = ["JORF"] as const
|
||||||
|
export const allJorfArticleOriginesMutable = [...allJorfArticleOrigines]
|
||||||
|
|
||||||
|
export const allJorfArticleTexteNatures = [
|
||||||
|
"DECRET", // 555543
|
||||||
|
"LOI", // 64957
|
||||||
|
"ARRETE", // 1228598
|
||||||
|
"DECISION", // 244100
|
||||||
|
"LISTE", // 24279
|
||||||
|
"AVIS", // 101688
|
||||||
|
"CODE", // 14737
|
||||||
|
"RESULTATS", // 14954
|
||||||
|
"MODIFICATION", // 724
|
||||||
|
"RAPPORT", // 2491
|
||||||
|
"REGLEMENT", // 1930
|
||||||
|
"LOI_ORGANIQUE", // 1144
|
||||||
|
"CIRCULAIRE", // 3933
|
||||||
|
"LOI_PROGRAMME", // 10
|
||||||
|
"CITATION", // 423
|
||||||
|
"ORDONNANCE", // 33582
|
||||||
|
"DELIBERATION", // 11012
|
||||||
|
"INSTRUCTION", // 1207
|
||||||
|
"AVENANT", // 533
|
||||||
|
"DECLARATION", // 77
|
||||||
|
"OBSERVATION", // 623
|
||||||
|
"INFORMATION", // 143
|
||||||
|
"RECOMMANDATION", // 204
|
||||||
|
"SAISINE", // 1075
|
||||||
|
"EXEQUATUR", // 173
|
||||||
|
"TABLEAU", // 1063
|
||||||
|
"REMISE", // 119
|
||||||
|
"ACCORD", // 153
|
||||||
|
"MEMOIRE", // 72
|
||||||
|
"DECISION_CC", // 51
|
||||||
|
"LOI_CONSTIT", // 76
|
||||||
|
"LETTRE", // 10
|
||||||
|
"ELECTIONDUPRESIDENTDELAREPUBLIQU", // 16
|
||||||
|
"CONVENTION", // 972
|
||||||
|
"ARRET", // 23
|
||||||
|
"CONTRAT", // 32
|
||||||
|
"COMPOSITION", // 19
|
||||||
|
"ADDITIF", // 139
|
||||||
|
"VOCABULAIRE", // 170
|
||||||
|
"DATE", // 1
|
||||||
|
"PROTOCOLE", // 25
|
||||||
|
"PROPOSITION", // 11
|
||||||
|
"DECRET_LOI", // 85
|
||||||
|
"COMMUNIQUE", // 3
|
||||||
|
"PROCLAMATION", // 17
|
||||||
|
"CONSTITUTION", // 41
|
||||||
|
"DIRECTIVE", // 11
|
||||||
|
"DECISION_EURO", // 15
|
||||||
|
"ABROGATION", // 10
|
||||||
|
"PREMIER", // 1
|
||||||
|
"PUBLICATION", // 2
|
||||||
|
"RECTIFICATIF", // 3
|
||||||
|
"DEUXIEME", // 5
|
||||||
|
"DELEGATION", // 1
|
||||||
|
"ANNEXE", // 2
|
||||||
|
"RELEVE", // 2
|
||||||
|
"COMPLEMENT", // 2
|
||||||
|
"ARRANGEMENT", // 1
|
||||||
|
"TROISIEME", // 2
|
||||||
|
"ELECTION", // 1
|
||||||
|
"SUSPENSION", // 2
|
||||||
|
"ATTESTATION", // 1
|
||||||
|
"CANDIDAT", // 2
|
||||||
|
"CHARTE", // 1
|
||||||
|
"PROJET", // 6
|
||||||
|
"INFORMATIONS_DIVERSES", // 524
|
||||||
|
"INFORMATIONS_PARLEMENTAIRES", // 6335
|
||||||
|
"INFORMATIONS_CESE", // 285
|
||||||
|
"ANNONCES", // 755
|
||||||
|
"Accord multilatéral", // 3
|
||||||
|
"ACCORD_FONCTION_PUBLIQUE", //
|
||||||
|
] as const
|
||||||
|
export const allJorfArticleTexteNaturesMutable = [...allJorfArticleTexteNatures]
|
||||||
|
|
||||||
|
export const allJorfArticleTypes = [
|
||||||
|
"AUTONOME",
|
||||||
|
"ENTIEREMENT_MODIF",
|
||||||
|
"PARTIELLEMENT_MODIF",
|
||||||
|
] as const
|
||||||
|
export const allJorfArticleTypesMutable = [...allJorfArticleTypes]
|
215
src/lib/legal/legi.ts
Normal file
215
src/lib/legal/legi.ts
Normal file
|
@ -0,0 +1,215 @@
|
||||||
|
export interface LegiArticle {
|
||||||
|
BLOC_TEXTUEL?: {
|
||||||
|
CONTENU: string // HTML
|
||||||
|
}
|
||||||
|
CONTEXTE: {
|
||||||
|
TEXTE: {
|
||||||
|
"@cid": string
|
||||||
|
"@date_publi": string
|
||||||
|
"@date_signature": string
|
||||||
|
"@nature"?: LegiArticleTexteNature
|
||||||
|
"@nor"?: string
|
||||||
|
"@num"?: string
|
||||||
|
"@num_parution_jo"?: string
|
||||||
|
TITRE_TXT: Array<{
|
||||||
|
"#text": string
|
||||||
|
"@c_titre_court"?: string
|
||||||
|
"@debut": string
|
||||||
|
"@fin": string
|
||||||
|
"@id_txt": string
|
||||||
|
}>
|
||||||
|
TM?: LegiArticleTm
|
||||||
|
}
|
||||||
|
}
|
||||||
|
META: {
|
||||||
|
META_COMMUN: {
|
||||||
|
ANCIEN_ID?: string
|
||||||
|
ELI_ALIAS?: {
|
||||||
|
ID_ELI_ALIAS: string
|
||||||
|
}
|
||||||
|
ID: string
|
||||||
|
ID_ELI?: string
|
||||||
|
NATURE?: LegiArticleNature
|
||||||
|
URL: string
|
||||||
|
ORIGINE: LegiArticleOrigine
|
||||||
|
}
|
||||||
|
META_SPEC: {
|
||||||
|
META_ARTICLE: {
|
||||||
|
DATE_FIN: string
|
||||||
|
DATE_DEBUT: string
|
||||||
|
/// Mots-clés
|
||||||
|
MCS_ART?: { MC: string[] }
|
||||||
|
NUM?: string
|
||||||
|
TYPE?: LegiArticleType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VERSIONS: {
|
||||||
|
VERSION: Array<{
|
||||||
|
"@etat"?: LegiArticleEtat
|
||||||
|
LIEN_ART: {
|
||||||
|
"@debut": string
|
||||||
|
"@etat"?: LegiArticleEtat
|
||||||
|
"@fin": string
|
||||||
|
"@id": string
|
||||||
|
"@num"?: string
|
||||||
|
"@origine": LegiArticleLienArticleOrigine
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export type LegiArticleEtat = (typeof allLegiArticleEtats)[number]
|
||||||
|
|
||||||
|
export type LegiArticleLienArticleOrigine =
|
||||||
|
(typeof allLegiArticleLienArticleOrigines)[number]
|
||||||
|
|
||||||
|
export type LegiArticleLienNature = (typeof allLegiArticleLienNatures)[number]
|
||||||
|
|
||||||
|
export type LegiArticleLienSens = (typeof allLegiArticleLienSens)[number]
|
||||||
|
|
||||||
|
export type LegiArticleLienType = (typeof allLegiArticleLienTypes)[number]
|
||||||
|
|
||||||
|
export type LegiArticleNature = (typeof allLegiArticleNatures)[number]
|
||||||
|
|
||||||
|
export type LegiArticleOrigine = (typeof allLegiArticleOrigines)[number]
|
||||||
|
|
||||||
|
export type LegiArticleTexteNature = (typeof allLegiArticleTexteNatures)[number]
|
||||||
|
|
||||||
|
export type LegiArticleType = (typeof allLegiArticleTypes)[number]
|
||||||
|
|
||||||
|
/// Table des matières (TM)
|
||||||
|
export interface LegiArticleTm {
|
||||||
|
TITRE_TM: {
|
||||||
|
"#text"?: string
|
||||||
|
"@debut": string
|
||||||
|
"@fin": string
|
||||||
|
"@id": string
|
||||||
|
}
|
||||||
|
TM?: LegiArticleTm
|
||||||
|
}
|
||||||
|
|
||||||
|
export const allLegiArticleEtats = [
|
||||||
|
"ABROGE_DIFF", // 16233
|
||||||
|
"ABROGE", // 341353
|
||||||
|
"ANNULE", // 1955
|
||||||
|
"DISJOINT", // 87
|
||||||
|
"MODIFIE_MORT_NE", // 6929
|
||||||
|
"MODIFIE", // 429664
|
||||||
|
"PERIME", // 19628
|
||||||
|
"TRANSFERE", // 14757
|
||||||
|
"VIGUEUR_DIFF", // 14629
|
||||||
|
"VIGUEUR", // 619477
|
||||||
|
] as const
|
||||||
|
export const allLegiArticleEtatsMutable = [...allLegiArticleEtats]
|
||||||
|
|
||||||
|
export const allLegiArticleLienArticleOrigines = ["JORF", "LEGI"] as const
|
||||||
|
export const allLegiArticleLienArticleOriginesMutable = [
|
||||||
|
...allLegiArticleLienArticleOrigines,
|
||||||
|
]
|
||||||
|
|
||||||
|
export const allLegiArticleLienNatures = [
|
||||||
|
"Accord de branche", // 10
|
||||||
|
"ACCORD_FONCTION_PUBLIQUE", // 68
|
||||||
|
"Accord", // 9
|
||||||
|
"ARRETE", // 878512
|
||||||
|
"Avenant", // 24
|
||||||
|
"AVENANT", // 7
|
||||||
|
"AVIS", // 139
|
||||||
|
"CIRCULAIRE", // 73
|
||||||
|
"CODE", // 3276729
|
||||||
|
"CONSTITUTION", // 1086
|
||||||
|
"Convention collective nationale", // 7
|
||||||
|
"Convention collective", // 1
|
||||||
|
"CONVENTION", // 3
|
||||||
|
"DECISION_EURO", // 1
|
||||||
|
"DECISION", // 1735
|
||||||
|
"DECRET_LOI", // 1184
|
||||||
|
"DECRET", // 2037090
|
||||||
|
"DELIBERATION", // 4172
|
||||||
|
"DIRECTIVE_EURO", // 180
|
||||||
|
"DIRECTIVE", // 64
|
||||||
|
"INSTRUCTION", // 4
|
||||||
|
"LOI_CONSTIT", // 111
|
||||||
|
"LOI_ORGANIQUE", // 5681
|
||||||
|
"LOI_PROGRAMME", // 335
|
||||||
|
"LOI", // 645965
|
||||||
|
"ORDONNANCE", // 225464
|
||||||
|
"RAPPORT", // 15802
|
||||||
|
"RECOMMANDATION", // 6
|
||||||
|
"REGLEMENTEUROPEEN", // 3
|
||||||
|
] as const
|
||||||
|
export const allLegiArticleLienNaturesMutable = [...allLegiArticleLienNatures]
|
||||||
|
|
||||||
|
export const allLegiArticleLienSens = ["cible", "source"] as const
|
||||||
|
export const allLegiArticleLienSensMutable = [...allLegiArticleLienSens]
|
||||||
|
|
||||||
|
export const allLegiArticleLienTypes = [
|
||||||
|
"ABROGATION", // 237556
|
||||||
|
"ABROGE", // 480524
|
||||||
|
"ANNULATION", // 1801
|
||||||
|
"ANNULE", // 13
|
||||||
|
"APPLICATION", // 398
|
||||||
|
"CITATION", // 4028139
|
||||||
|
"CODIFICATION", // 380434
|
||||||
|
"CODIFIE", // 29
|
||||||
|
"CONCORDANCE", // 315976
|
||||||
|
"CONCORDE", // 192980
|
||||||
|
"CREATION", // 174907
|
||||||
|
"CREE", // 265183
|
||||||
|
"DEPLACE", // 12605
|
||||||
|
"DEPLACEMENT", // 307
|
||||||
|
"DISJOINT", // 46
|
||||||
|
"DISJONCTION", // 77
|
||||||
|
"ETEND", // 43
|
||||||
|
"HISTO", // 14499
|
||||||
|
"MODIFICATION", // 390927
|
||||||
|
"MODIFIE", // 570147
|
||||||
|
"PEREMPTION", // 7001
|
||||||
|
"PERIME", // 1024
|
||||||
|
"PILOTE_SUIVEUR", // 4734
|
||||||
|
"RATIFICATION", // 259
|
||||||
|
"RATIFIE", // 56
|
||||||
|
"RECTIFICATION", // 1439
|
||||||
|
"SPEC_APPLI", // 87345
|
||||||
|
"TRANSFERE", // 16828
|
||||||
|
"TRANSFERT", // 10641
|
||||||
|
"TXT_ASSOCIE", // 47348
|
||||||
|
"TXT_SOURCE", // 263557
|
||||||
|
] as const
|
||||||
|
export const allLegiArticleLienTypesMutable = [...allLegiArticleLienTypes]
|
||||||
|
|
||||||
|
export const allLegiArticleNatures = ["Article"] as const
|
||||||
|
export const allLegiArticleNaturesMutable = [...allLegiArticleNatures]
|
||||||
|
|
||||||
|
export const allLegiArticleOrigines = ["LEGI"] as const
|
||||||
|
export const allLegiArticleOriginesMutable = [...allLegiArticleOrigines]
|
||||||
|
|
||||||
|
export const allLegiArticleTexteNatures = [
|
||||||
|
"ACCORD_FONCTION_PUBLIQUE", // 9,
|
||||||
|
"ARRETE", // 566126,
|
||||||
|
"AVIS", // 12,
|
||||||
|
"CIRCULAIRE", // 8,
|
||||||
|
"CODE", // 475255,
|
||||||
|
"CONSTITUTION", // 255,
|
||||||
|
"CONVENTION", // 1,
|
||||||
|
"DECISION", // 44,
|
||||||
|
"DECRET_LOI", // 905,
|
||||||
|
"DECRET", // 513465,
|
||||||
|
"DELIBERATION", // 1467,
|
||||||
|
"DIRECTIVE", // 57,
|
||||||
|
"LOI_CONSTIT", // 103,
|
||||||
|
"LOI_ORGANIQUE", // 1468,
|
||||||
|
"LOI_PROGRAMME", // 65,
|
||||||
|
"LOI", // 94775,
|
||||||
|
"ORDONNANCE", // 26800,
|
||||||
|
"RAPPORT", // 22,
|
||||||
|
] as const
|
||||||
|
export const allLegiArticleTexteNaturesMutable = [...allLegiArticleTexteNatures]
|
||||||
|
|
||||||
|
export const allLegiArticleTypes = [
|
||||||
|
"AUTONOME",
|
||||||
|
"ENTIEREMENT_MODIF",
|
||||||
|
"PARTIELLEMENT_MODIF",
|
||||||
|
] as const
|
||||||
|
export const allLegiArticleTypesMutable = [...allLegiArticleTypes]
|
|
@ -7,7 +7,7 @@ import path from "path"
|
||||||
import type { JSONValue } from "postgres"
|
import type { JSONValue } from "postgres"
|
||||||
import sade from "sade"
|
import sade from "sade"
|
||||||
|
|
||||||
import { auditDossierLegislatif } from "$lib/auditors/dossiers_legislatifs"
|
import { auditDossierLegislatif } from "$lib/auditors/dole"
|
||||||
import type { DossierLegislatif, XmlHeader } from "$lib/legal"
|
import type { DossierLegislatif, XmlHeader } from "$lib/legal"
|
||||||
import { db } from "$lib/server/database"
|
import { db } from "$lib/server/database"
|
||||||
import { walkDir } from "$lib/server/file_systems"
|
import { walkDir } from "$lib/server/file_systems"
|
||||||
|
|
|
@ -8,9 +8,10 @@ import type { JSONValue } from "postgres"
|
||||||
import sade from "sade"
|
import sade from "sade"
|
||||||
|
|
||||||
import { auditId, auditVersions } from "$lib/auditors/legal"
|
import { auditId, auditVersions } from "$lib/auditors/legal"
|
||||||
|
import { auditJorfArticle } from "$lib/auditors/jorf"
|
||||||
import type {
|
import type {
|
||||||
Article,
|
|
||||||
Jo,
|
Jo,
|
||||||
|
JorfArticle,
|
||||||
SectionTa,
|
SectionTa,
|
||||||
Textelr,
|
Textelr,
|
||||||
TexteVersion,
|
TexteVersion,
|
||||||
|
@ -107,7 +108,7 @@ async function importJorf(
|
||||||
).map(({ eli }) => eli),
|
).map(({ eli }) => eli),
|
||||||
)
|
)
|
||||||
|
|
||||||
const dataDir = path.join(dilaDir, "dole")
|
const dataDir = path.join(dilaDir, "jorf")
|
||||||
assert(await fs.pathExists(dataDir))
|
assert(await fs.pathExists(dataDir))
|
||||||
iterXmlFiles: for (const relativeSplitPath of walkDir(dataDir)) {
|
iterXmlFiles: for (const relativeSplitPath of walkDir(dataDir)) {
|
||||||
const relativePath = path.join(...relativeSplitPath)
|
const relativePath = path.join(...relativeSplitPath)
|
||||||
|
@ -134,7 +135,7 @@ async function importJorf(
|
||||||
for (const [key, element] of Object.entries(xmlData) as [
|
for (const [key, element] of Object.entries(xmlData) as [
|
||||||
string,
|
string,
|
||||||
(
|
(
|
||||||
| Article
|
| JorfArticle
|
||||||
| Jo
|
| Jo
|
||||||
| SectionTa
|
| SectionTa
|
||||||
| Textelr
|
| Textelr
|
||||||
|
@ -151,7 +152,19 @@ async function importJorf(
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case "ARTICLE": {
|
case "ARTICLE": {
|
||||||
const article = element as Article
|
const [article, error] = auditChain(auditJorfArticle, auditRequire)(
|
||||||
|
strictAudit,
|
||||||
|
element,
|
||||||
|
) as [JorfArticle, unknown]
|
||||||
|
assert.strictEqual(
|
||||||
|
error,
|
||||||
|
null,
|
||||||
|
`Unexpected format for ARTICLE:\n${JSON.stringify(
|
||||||
|
article,
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
)}\nError:\n${JSON.stringify(error, null, 2)}`,
|
||||||
|
)
|
||||||
await db`
|
await db`
|
||||||
INSERT INTO article (
|
INSERT INTO article (
|
||||||
id,
|
id,
|
||||||
|
@ -184,7 +197,6 @@ async function importJorf(
|
||||||
2,
|
2,
|
||||||
)}\nError:\n${JSON.stringify(idError, null, 2)}`,
|
)}\nError:\n${JSON.stringify(idError, null, 2)}`,
|
||||||
)
|
)
|
||||||
assert
|
|
||||||
await db`
|
await db`
|
||||||
INSERT INTO id (
|
INSERT INTO id (
|
||||||
eli,
|
eli,
|
||||||
|
@ -249,7 +261,7 @@ async function importJorf(
|
||||||
) VALUES (
|
) VALUES (
|
||||||
${texteVersion.META.META_COMMUN.ID},
|
${texteVersion.META.META_COMMUN.ID},
|
||||||
${db.json(texteVersion as unknown as JSONValue)},
|
${db.json(texteVersion as unknown as JSONValue)},
|
||||||
${texteVersion.META.META_COMMUN.NATURE}
|
${texteVersion.META.META_COMMUN.NATURE},
|
||||||
setweight(to_tsvector('french', ${textAFragments.join(
|
setweight(to_tsvector('french', ${textAFragments.join(
|
||||||
" ",
|
" ",
|
||||||
)}), 'A')
|
)}), 'A')
|
||||||
|
|
|
@ -97,7 +97,7 @@ async function importKali(
|
||||||
).map(({ id }) => id),
|
).map(({ id }) => id),
|
||||||
)
|
)
|
||||||
|
|
||||||
const dataDir = path.join(dilaDir, "dole")
|
const dataDir = path.join(dilaDir, "kali")
|
||||||
assert(await fs.pathExists(dataDir))
|
assert(await fs.pathExists(dataDir))
|
||||||
iterXmlFiles: for (const relativeSplitPath of walkDir(dataDir)) {
|
iterXmlFiles: for (const relativeSplitPath of walkDir(dataDir)) {
|
||||||
const relativePath = path.join(...relativeSplitPath)
|
const relativePath = path.join(...relativeSplitPath)
|
||||||
|
@ -206,7 +206,7 @@ async function importKali(
|
||||||
) VALUES (
|
) VALUES (
|
||||||
${texteVersion.META.META_COMMUN.ID},
|
${texteVersion.META.META_COMMUN.ID},
|
||||||
${db.json(texteVersion as unknown as JSONValue)},
|
${db.json(texteVersion as unknown as JSONValue)},
|
||||||
${texteVersion.META.META_COMMUN.NATURE}
|
${texteVersion.META.META_COMMUN.NATURE},
|
||||||
setweight(to_tsvector('french', ${textAFragments.join(
|
setweight(to_tsvector('french', ${textAFragments.join(
|
||||||
" ",
|
" ",
|
||||||
)}), 'A')
|
)}), 'A')
|
||||||
|
|
|
@ -8,8 +8,12 @@ import type { JSONValue } from "postgres"
|
||||||
import sade from "sade"
|
import sade from "sade"
|
||||||
|
|
||||||
import { auditId, auditVersions } from "$lib/auditors/legal"
|
import { auditId, auditVersions } from "$lib/auditors/legal"
|
||||||
|
import {
|
||||||
|
auditLegiArticle,
|
||||||
|
// legiArticleStats
|
||||||
|
} from "$lib/auditors/legi"
|
||||||
import type {
|
import type {
|
||||||
Article,
|
LegiArticle,
|
||||||
SectionTa,
|
SectionTa,
|
||||||
Textelr,
|
Textelr,
|
||||||
TexteVersion,
|
TexteVersion,
|
||||||
|
@ -98,7 +102,7 @@ async function importLegi(
|
||||||
).map(({ eli }) => eli),
|
).map(({ eli }) => eli),
|
||||||
)
|
)
|
||||||
|
|
||||||
const dataDir = path.join(dilaDir, "dole")
|
const dataDir = path.join(dilaDir, "legi")
|
||||||
assert(await fs.pathExists(dataDir))
|
assert(await fs.pathExists(dataDir))
|
||||||
iterXmlFiles: for (const relativeSplitPath of walkDir(dataDir)) {
|
iterXmlFiles: for (const relativeSplitPath of walkDir(dataDir)) {
|
||||||
const relativePath = path.join(...relativeSplitPath)
|
const relativePath = path.join(...relativeSplitPath)
|
||||||
|
@ -124,7 +128,7 @@ async function importLegi(
|
||||||
const xmlData = xmlParser.parse(xmlString)
|
const xmlData = xmlParser.parse(xmlString)
|
||||||
for (const [key, element] of Object.entries(xmlData) as [
|
for (const [key, element] of Object.entries(xmlData) as [
|
||||||
string,
|
string,
|
||||||
Article | SectionTa | Textelr | TexteVersion | Versions | XmlHeader,
|
LegiArticle | SectionTa | Textelr | TexteVersion | Versions | XmlHeader,
|
||||||
][]) {
|
][]) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case "?xml": {
|
case "?xml": {
|
||||||
|
@ -134,7 +138,19 @@ async function importLegi(
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case "ARTICLE": {
|
case "ARTICLE": {
|
||||||
const article = element as Article
|
const [article, error] = auditChain(auditLegiArticle, auditRequire)(
|
||||||
|
strictAudit,
|
||||||
|
element,
|
||||||
|
) as [LegiArticle, unknown]
|
||||||
|
assert.strictEqual(
|
||||||
|
error,
|
||||||
|
null,
|
||||||
|
`Unexpected format for ARTICLE:\n${JSON.stringify(
|
||||||
|
article,
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
)}\nError:\n${JSON.stringify(error, null, 2)}`,
|
||||||
|
)
|
||||||
await db`
|
await db`
|
||||||
INSERT INTO article (
|
INSERT INTO article (
|
||||||
id,
|
id,
|
||||||
|
@ -215,7 +231,7 @@ async function importLegi(
|
||||||
) VALUES (
|
) VALUES (
|
||||||
${texteVersion.META.META_COMMUN.ID},
|
${texteVersion.META.META_COMMUN.ID},
|
||||||
${db.json(texteVersion as unknown as JSONValue)},
|
${db.json(texteVersion as unknown as JSONValue)},
|
||||||
${texteVersion.META.META_COMMUN.NATURE}
|
${texteVersion.META.META_COMMUN.NATURE},
|
||||||
setweight(to_tsvector('french', ${textAFragments.join(
|
setweight(to_tsvector('french', ${textAFragments.join(
|
||||||
" ",
|
" ",
|
||||||
)}), 'A')
|
)}), 'A')
|
||||||
|
@ -342,6 +358,10 @@ async function importLegi(
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// console.log(
|
||||||
|
// "LEGI articles stats =",
|
||||||
|
// JSON.stringify(legiArticleStats, null, 2),
|
||||||
|
// )
|
||||||
}
|
}
|
||||||
|
|
||||||
sade("import_legi <dilaDir>", true)
|
sade("import_legi <dilaDir>", true)
|
||||||
|
|
Loading…
Reference in a new issue