visura-parser 1.0.0 → 1.1.0

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/README.md CHANGED
@@ -10,14 +10,19 @@ be text based.
10
10
 
11
11
  ## Motivation
12
12
 
13
- When working with Italian companies, you may need to obtain structured data about them. And yet ther isn't really a free and reliable solution to do that.
14
- This is what happened at Silkware, where we work with and onboard Italian companies on a daily basis.
15
- The _Visura camerale_ is an official document that contains a satisfying amount of information about a company that is easy to obtain and to share for companies.
16
- Currently, there isn't a free and open source solution to extract this information in a structured way.
13
+ When working with Italian companies, you often need structured data about them.
14
+ We wanted an open source parser that we could inspect, test, and improve.
15
+
16
+ This came up at Silkware, where we work with and onboard Italian companies. The
17
+ _Visura camerale_ is easy for companies to obtain and share, and it contains
18
+ enough official registry data to make structured extraction useful.
17
19
 
18
20
  ## Disclaimer
19
21
 
20
- This the development of this library is strongly aided by AI coding agents such as GPT5.6.
22
+ This library is developed with substantial help from AI coding agents.
23
+ Contributions must meet the same fixture, correctness, and review requirements
24
+ regardless of how the code was written.
25
+ The parser should be treated as a best-effort tool, so it may fail for Visure layouts that are not in the private corpus. Feel free to open an issue if you encounter a layout that is not supported, or contribute yourself.
21
26
 
22
27
  ## Requirements
23
28
 
@@ -26,6 +31,12 @@ This the development of this library is strongly aided by AI coding agents such
26
31
 
27
32
  ## Usage
28
33
 
34
+ Install the ESM package in your application:
35
+
36
+ ```sh
37
+ npm install visura-parser
38
+ ```
39
+
29
40
  ```ts
30
41
  import { readFile } from 'node:fs/promises';
31
42
  import { parseVisura, VisuraParseError } from 'visura-parser';
@@ -48,9 +59,11 @@ and is copied to `filename`; it is not inferred from the PDF.
48
59
 
49
60
  Missing fields are omitted. Counts and monetary amounts are numbers; explicit
50
61
  availability values are booleans. Dates use ISO `YYYY-MM-DD`. Official Italian
51
- role names are preserved in structured officer and shareholder records.
62
+ role names are preserved in structured officer and shareholder records. Current
63
+ secondary offices and local business units are returned in `localUnits`, in
64
+ their printed order.
52
65
  See the [example output](exampleOutput.json) and
53
- [the schema](outputSchema.md).
66
+ [the schema](outputSchema.json).
54
67
 
55
68
  Ordinary, historical, evasion reports, and the supported shareholder Visura
56
69
  block are recognized. A block has no `reportType`. Image-only PDFs,
@@ -105,9 +118,21 @@ These files can contain personal data, just like the source PDFs.
105
118
 
106
119
  ## Contributing
107
120
 
108
- Read [`CONTRIBUTING.md`](CONTRIBUTING.md) before adding fixtures. Real Visure
121
+ Read [the contributor guide](https://github.com/LorenzoYeKai/visura-parser/blob/main/CONTRIBUTING.md) before adding fixtures. Real Visure
109
122
  often contain personal data and must not be committed.
110
123
 
124
+ The public tests and synthetic fixtures work without access to the private
125
+ corpus. To measure the built package on Node.js:
126
+
127
+ ```sh
128
+ bun run benchmark
129
+ bun run benchmark -- /path/to/local/pdfs 3
130
+ ```
131
+
132
+ The benchmark prints aggregate timings and result hashes, without filenames or
133
+ document values. See [the performance review and audit](https://github.com/LorenzoYeKai/visura-parser/blob/main/docs/performance-review.md)
134
+ for the measurement method, findings, and remaining work.
135
+
111
136
  ## License
112
137
 
113
138
  [MIT](LICENSE)
package/dist/index.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  export { VisuraParseError } from './errors.js';
3
3
  export { parseVisura } from './parse-visura.js';
4
4
  export type { VisuraParseErrorCode } from './errors.js';
5
- export type { Representative, Activity, AtecoClassification, ShareCapital, Employees, CompanySummary, BusinessRegisterFilings, Certifications, AvailableDocuments, Officer, Shareholder, VisuraDocument, ParseVisuraOptions, } from './types.js';
5
+ export type { Representative, Activity, AtecoClassification, ShareCapital, Employees, CompanySummary, BusinessRegisterFilings, Certifications, AvailableDocuments, LocalUnit, Officer, Shareholder, VisuraDocument, ParseVisuraOptions, } from './types.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EACV,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EACV,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,OAAO,EACP,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-document.d.ts","sourceRoot":"","sources":["../../src/internal/parse-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAiB,YAAY,EAAkB,MAAM,YAAY,CAAC;AA6W9E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAQjE;AAwBD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,YAAY,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc,CAkFhB"}
1
+ {"version":3,"file":"parse-document.d.ts","sourceRoot":"","sources":["../../src/internal/parse-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAiB,YAAY,EAAkB,MAAM,YAAY,CAAC;AA4X9E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAQjE;AA4BD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,YAAY,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc,CAgHhB"}
@@ -5,6 +5,7 @@ import { isPersonRole, parsePeople } from './parse-people.js';
5
5
  import { parseClassifications } from './parse-classifications.js';
6
6
  import { parseCapital } from './parse-capital.js';
7
7
  import { joinPages } from './join-pages.js';
8
+ import { parseLocalUnits } from './parse-local-units.js';
8
9
  const FIELD_SPECS = [
9
10
  {
10
11
  key: 'registeredOfficeAddress',
@@ -143,32 +144,30 @@ const DATE_FIELDS = new Set([
143
144
  'startDate',
144
145
  ]);
145
146
  function matchesAny(text, patterns) {
146
- const normalized = normalizeText(text);
147
- return patterns.some((pattern) => pattern.test(normalized));
147
+ return patterns.some((pattern) => pattern.test(text));
148
148
  }
149
149
  function isKnownLabel(text) {
150
- return (isPersonRole(text) ||
151
- ALL_LABELS.some((pattern) => pattern.test(normalizeText(text))));
150
+ const normalized = normalizeText(text);
151
+ return (isPersonRole(normalized) ||
152
+ ALL_LABELS.some((pattern) => pattern.test(normalized)));
152
153
  }
153
154
  function samePanel(page, left, right) {
154
155
  const midpoint = page.width / 2;
155
156
  return left.x < midpoint === right.x < midpoint;
156
157
  }
157
- function inlineValue(label, patterns) {
158
- const text = normalizeText(label.text);
158
+ function inlineValue(text, patterns) {
159
159
  const separator = text.indexOf(':');
160
- if (separator < 0 || !matchesAny(text.slice(0, separator), patterns))
160
+ if (separator < 0 || !matchesAny(text.slice(0, separator).trim(), patterns))
161
161
  return undefined;
162
162
  const value = normalizeText(text.slice(separator + 1));
163
163
  if (value.length > 0)
164
164
  return value;
165
165
  return undefined;
166
166
  }
167
- function findValueOnPage(page, patterns, multiline = false, fullWidth = false) {
168
- const labels = semanticSpans(page).filter((span) => matchesAny(span.text, patterns) ||
169
- inlineValue(span, patterns) !== undefined);
170
- for (const label of labels) {
171
- const inline = inlineValue(label, patterns);
167
+ function findValueOnPage(page, prepared, patterns, multiline = false, fullWidth = false) {
168
+ const labels = prepared.labels.filter(({ text }) => matchesAny(text, patterns) || inlineValue(text, patterns) !== undefined);
169
+ for (const { span: label, text } of labels) {
170
+ const inline = inlineValue(text, patterns);
172
171
  if (inline !== undefined)
173
172
  return inline;
174
173
  const candidates = page.spans
@@ -196,7 +195,7 @@ function findValueOnPage(page, patterns, multiline = false, fullWidth = false) {
196
195
  continue;
197
196
  if (!multiline)
198
197
  return normalizeText(value.text);
199
- const nextLabel = semanticSpans(page)
198
+ const nextLabel = prepared.spans
200
199
  .filter((span) => (fullWidth || samePanel(page, value, span)) &&
201
200
  span.x < value.x - 10 &&
202
201
  span.y < value.y - 2 &&
@@ -234,8 +233,7 @@ function findCoverPage(pdf) {
234
233
  pdf.pages.find((page) => /registro imprese/i.test(pageText(page))) ??
235
234
  pdf.pages.find((page) => page.spans.length > 0));
236
235
  }
237
- function findBusinessName(page) {
238
- const spans = semanticSpans(page);
236
+ function findBusinessName(page, spans) {
239
237
  const title = spans
240
238
  .filter((span) => span.y > page.height * 0.35 &&
241
239
  /^(?:visura\s+(?:ordinaria|storica|(?:di\s+)?evasione)\b|soci e titolari di diritti|esito evasione protocollo)/i.test(normalizeText(span.text)))
@@ -268,17 +266,17 @@ function findBusinessName(page) {
268
266
  }
269
267
  return parts.join(' ');
270
268
  }
271
- function findBusinessNameFromLabels(pdf) {
269
+ function findBusinessNameFromLabels(pdf, prepare) {
272
270
  const labels = [/^denominazione$/i, /^ditta$/i, /^ragione sociale$/i];
273
271
  for (const page of pdf.pages) {
274
- const value = findValueOnPage(page, labels, true);
272
+ const value = findValueOnPage(page, prepare(page), labels, true);
275
273
  if (value !== undefined)
276
274
  return value;
277
275
  }
278
276
  return undefined;
279
277
  }
280
- function detectVisuraType(cover) {
281
- const titles = semanticSpans(cover).filter((span) => span.y > cover.height * 0.35);
278
+ function detectVisuraType(cover, spans) {
279
+ const titles = spans.filter((span) => span.y > cover.height * 0.35);
282
280
  const title = titles.find((span) => /^visura\s+(?:ordinaria|storica|(?:di\s+)?evasione)\b/i.test(normalizeText(span.text)));
283
281
  if (title !== undefined)
284
282
  return normalizeText(title.text);
@@ -292,10 +290,10 @@ export function isSupportedVisuraBlock(pdf) {
292
290
  return (/dati anagrafici/i.test(pageText(cover)) &&
293
291
  cover.spans.some((span) => /^soci e titolari di diritti/i.test(normalizeText(span.text))));
294
292
  }
295
- function beforeSection(pdf, heading) {
293
+ function beforeSection(pdf, heading, spansFor) {
296
294
  const pages = [];
297
295
  for (const page of pdf.pages) {
298
- const boundary = semanticSpans(page)
296
+ const boundary = spansFor(page)
299
297
  .filter((span) => span.x < page.width * 0.15 && heading.test(normalizeText(span.text)))
300
298
  .sort((left, right) => right.y - left.y)[0];
301
299
  if (boundary === undefined) {
@@ -311,13 +309,33 @@ function beforeSection(pdf, heading) {
311
309
  return { pages };
312
310
  }
313
311
  export function parseExtractedDocument(pdf, filename) {
312
+ // Reuse phrase reconstruction across fields within this call only. Key by
313
+ // object identity: section-clipped pages can share a source page number.
314
+ const prepared = new Map();
315
+ const prepare = (page) => {
316
+ let text = prepared.get(page);
317
+ if (text === undefined) {
318
+ const spans = semanticSpans(page);
319
+ text = {
320
+ spans,
321
+ labels: spans.map((span) => ({
322
+ span,
323
+ text: normalizeText(span.text),
324
+ })),
325
+ };
326
+ prepared.set(page, text);
327
+ }
328
+ return text;
329
+ };
330
+ const spansFor = (page) => prepare(page).spans;
314
331
  const cover = findCoverPage(pdf);
315
- const currentPdf = beforeSection(pdf, /^(?:\d+\s+)?(?:storia (?:delle|dei|di)|informazioni storiche|protocollo evaso\b)/i);
332
+ const currentPdf = beforeSection(pdf, /^(?:\d+\s+)?(?:storia (?:delle|dei|di)|informazioni storiche|protocollo evaso\b)/i, spansFor);
333
+ const companyPdf = beforeSection(currentPdf, /^(?:\d+\s+)?(?:sedi secondarie ed )?unit[aà]'? locali$/i, spansFor);
316
334
  // Company dates precede the domain sections; later registration dates can
317
335
  // belong to a shareholder or an appointment rather than the company.
318
- const identityPdf = beforeSection(currentPdf, /^\d+\s+(?:capitale|soci|amministratori|sindaci|titolari|attivit[aà]'?|trasferimenti|scioglimento|altre cariche)\b/i);
336
+ const identityPdf = beforeSection(companyPdf, /^\d+\s+(?:capitale|soci|amministratori|sindaci|titolari|attivit[aà]'?|trasferimenti|scioglimento|altre cariche)\b/i, spansFor);
319
337
  const fields = {};
320
- const activityBody = joinPages(currentPdf.pages.filter((page) => page.number !== cover.number));
338
+ const activityBody = joinPages(companyPdf.pages.filter((page) => page.number !== cover.number));
321
339
  for (const field of FIELD_SPECS) {
322
340
  const key = field.key;
323
341
  const pages = field.pages === 'cover'
@@ -326,9 +344,9 @@ export function parseExtractedDocument(pdf, filename) {
326
344
  ? identityPdf.pages
327
345
  : field.pages === 'activity'
328
346
  ? [cover, activityBody]
329
- : currentPdf.pages;
347
+ : companyPdf.pages;
330
348
  for (const page of pages) {
331
- const value = findValueOnPage(page, field.labels, field.multiline, page === activityBody);
349
+ const value = findValueOnPage(page, prepare(page), field.labels, field.multiline, page === activityBody);
332
350
  if (value === undefined)
333
351
  continue;
334
352
  const normalized = DATE_FIELDS.has(key) ? parseItalianDate(value) : value;
@@ -341,14 +359,15 @@ export function parseExtractedDocument(pdf, filename) {
341
359
  const result = mapDocument(fields);
342
360
  if (filename !== undefined)
343
361
  result.filename = filename;
344
- const reportType = detectVisuraType(cover);
362
+ const reportType = detectVisuraType(cover, spansFor(cover));
345
363
  if (reportType !== undefined)
346
364
  result.reportType = reportType;
347
- const name = findBusinessName(cover) ?? findBusinessNameFromLabels(currentPdf);
365
+ const name = findBusinessName(cover, spansFor(cover)) ??
366
+ findBusinessNameFromLabels(companyPdf, prepare);
348
367
  if (name !== undefined)
349
368
  result.companyName = normalizeText(name);
350
369
  // Dates belong to their printed summary label, not the report extraction date.
351
- for (const label of semanticSpans(cover)) {
370
+ for (const label of spansFor(cover)) {
352
371
  const text = normalizeText(label.text);
353
372
  const employees = /^addetti(?: al)?\s*\(?(\d{2}\/\d{2}\/\d{4})\)?$/i.exec(text);
354
373
  const filings = /^documenti ri(?: dal)?\s*\(?(\d{2}\/\d{2}\/\d{4})\)?$/i.exec(text);
@@ -364,22 +383,25 @@ export function parseExtractedDocument(pdf, filename) {
364
383
  sinceDate: date,
365
384
  };
366
385
  }
367
- const people = parsePeople(currentPdf, cover.number);
386
+ const people = parsePeople(companyPdf, cover.number);
368
387
  if (people.primaryRepresentative)
369
388
  result.primaryRepresentative = people.primaryRepresentative;
370
389
  if (people.officers.length)
371
390
  result.officers = people.officers;
372
391
  if (people.shareholders.length)
373
392
  result.shareholders = people.shareholders;
374
- const classifications = parseClassifications(currentPdf);
393
+ const classifications = parseClassifications(companyPdf);
375
394
  if (classifications.length)
376
395
  result.activity = {
377
396
  ...result.activity,
378
397
  atecoClassifications: classifications,
379
398
  };
380
- const capital = parseCapital(currentPdf);
399
+ const capital = parseCapital(companyPdf);
381
400
  if (capital !== undefined)
382
401
  result.shareCapital = capital;
402
+ const localUnits = parseLocalUnits(currentPdf);
403
+ if (localUnits.length)
404
+ result.localUnits = localUnits;
383
405
  return result;
384
406
  }
385
407
  //# sourceMappingURL=parse-document.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-document.js","sourceRoot":"","sources":["../../src/internal/parse-document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-document.js","sourceRoot":"","sources":["../../src/internal/parse-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { LocalUnit } from '../types.js';
2
+ import type { ExtractedPdf } from './model.js';
3
+ /** Parses current local-unit records and keeps their printed source order. */
4
+ export declare function parseLocalUnits(pdf: ExtractedPdf): LocalUnit[];
5
+ //# sourceMappingURL=parse-local-units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-local-units.d.ts","sourceRoot":"","sources":["../../src/internal/parse-local-units.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAC;AA2E/D,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,EAAE,CAoD9D"}
@@ -0,0 +1,104 @@
1
+ import { joinPages } from './join-pages.js';
2
+ import { normalizeText, spansInReadingOrder } from './text.js';
3
+ import { parseItalianDate } from './values.js';
4
+ const LOCAL_UNIT_HEADING = /^unit[aà]'? locale n\.?\s*([a-z]{2})\s*\/\s*(\d+)\b/i;
5
+ const SECTION_HEADING = /^\d+\s+\D/u;
6
+ const ADDRESS_LABEL = /^indirizzo\b\s*:?[\s]*/i;
7
+ const ACTIVITY_LABEL = /^attivit[aà]'? esercitata\b\s*:?[\s]*/i;
8
+ const FIELD_OR_BLOCK_LABEL = /^(?:data (?:di )?apertura|indirizzo|estremi di iscrizione|numero repertorio economico amministrativo|attivit[aà]'? (?:secondaria )?esercitata|classificazione ateco(?:ri)?|denuncia attivit[aà]'?|licenze\/?autorizzazioni|tipo)\b/i;
9
+ function rowsFromSpans(spans) {
10
+ const rows = [];
11
+ for (const span of spansInReadingOrder({
12
+ number: 1,
13
+ width: 595,
14
+ height: 842,
15
+ spans,
16
+ })) {
17
+ const row = rows.at(-1);
18
+ if (row !== undefined && Math.abs((row[0]?.y ?? span.y) - span.y) <= 2) {
19
+ row.push(span);
20
+ }
21
+ else {
22
+ rows.push([span]);
23
+ }
24
+ }
25
+ return rows.map((row) => {
26
+ row.sort((left, right) => left.x - right.x);
27
+ return {
28
+ x: row[0]?.x ?? 0,
29
+ y: row[0]?.y ?? 0,
30
+ text: normalizeText(row.map((span) => span.text).join(' ')),
31
+ };
32
+ });
33
+ }
34
+ function multilineValue(rows, label) {
35
+ const index = rows.findIndex((row) => label.test(row.text));
36
+ if (index < 0)
37
+ return undefined;
38
+ const parts = [];
39
+ const first = rows[index];
40
+ if (first !== undefined) {
41
+ const inline = normalizeText(first.text.replace(label, ''));
42
+ if (inline.length > 0)
43
+ parts.push(inline);
44
+ }
45
+ for (const row of rows.slice(index + 1)) {
46
+ if (FIELD_OR_BLOCK_LABEL.test(row.text))
47
+ break;
48
+ parts.push(row.text);
49
+ }
50
+ const value = normalizeText(parts.join(' '));
51
+ return value.length === 0 ? undefined : value;
52
+ }
53
+ function inlineValue(rows, label) {
54
+ for (const row of rows) {
55
+ const match = label.exec(row.text);
56
+ const value = match?.[1];
57
+ if (value !== undefined)
58
+ return normalizeText(value);
59
+ }
60
+ return undefined;
61
+ }
62
+ /** Parses current local-unit records and keeps their printed source order. */
63
+ export function parseLocalUnits(pdf) {
64
+ const page = joinPages(pdf.pages);
65
+ const rows = rowsFromSpans(page.spans);
66
+ const starts = rows
67
+ .map((row, index) => ({
68
+ index,
69
+ row,
70
+ match: LOCAL_UNIT_HEADING.exec(row.text),
71
+ }))
72
+ .filter((entry) => entry.match !== null && entry.row.x < page.width * 0.1);
73
+ const result = [];
74
+ for (const [position, start] of starts.entries()) {
75
+ const nextRecord = starts[position + 1]?.index ?? rows.length;
76
+ const nextSection = rows.findIndex((row, index) => index > start.index &&
77
+ index < nextRecord &&
78
+ row.x < page.width * 0.15 &&
79
+ SECTION_HEADING.test(row.text));
80
+ const end = nextSection < 0 ? nextRecord : nextSection;
81
+ const recordRows = rows.slice(start.index + 1, end);
82
+ const province = start.match[1];
83
+ const ordinal = start.match[2];
84
+ if (province === undefined || ordinal === undefined)
85
+ continue;
86
+ const unit = { number: `${province.toUpperCase()}/${ordinal}` };
87
+ const openingDate = inlineValue(recordRows, /\bdata (?:di )?apertura\s*:?\s*(\d{2}\/\d{2}\/\d{4})\b/i);
88
+ const parsedOpeningDate = openingDate === undefined ? undefined : parseItalianDate(openingDate);
89
+ if (parsedOpeningDate !== undefined)
90
+ unit.openingDate = parsedOpeningDate;
91
+ const address = multilineValue(recordRows, ADDRESS_LABEL);
92
+ if (address !== undefined)
93
+ unit.address = address;
94
+ const reaNumber = inlineValue(recordRows, /\bnumero repertorio economico amministrativo\s*:?\s*(.+)$/i);
95
+ if (reaNumber !== undefined)
96
+ unit.reaNumber = reaNumber;
97
+ const primaryActivity = multilineValue(recordRows, ACTIVITY_LABEL);
98
+ if (primaryActivity !== undefined)
99
+ unit.primaryActivity = primaryActivity;
100
+ result.push(unit);
101
+ }
102
+ return result;
103
+ }
104
+ //# sourceMappingURL=parse-local-units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-local-units.js","sourceRoot":"","sources":["../../src/internal/parse-local-units.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-people.d.ts","sourceRoot":"","sources":["../../src/internal/parse-people.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAiB,YAAY,EAAkB,MAAM,YAAY,CAAC;AAiB9E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AA+HD,wBAAgB,WAAW,CACzB,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,GAChB;IACD,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CAiMA"}
1
+ {"version":3,"file":"parse-people.d.ts","sourceRoot":"","sources":["../../src/internal/parse-people.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAiB,YAAY,EAAkB,MAAM,YAAY,CAAC;AAqC9E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAgID,wBAAgB,WAAW,CACzB,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,GAChB;IACD,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CA6LA"}
@@ -1,16 +1,28 @@
1
1
  import { foldText, normalizeText, semanticSpans } from './text.js';
2
2
  import { parseItalianAmount } from './values.js';
3
3
  import { joinPages } from './join-pages.js';
4
- const OFFICER_ROLE = /^(?:presidente(?: (?:del )?consiglio (?:di |d')?amministrazione| del collegio sindacale)?|vice ?presidente(?: (?:del )?consiglio (?:di |d')?amministrazione)?|amministratore(?: unico| delegato)?|consigliere(?: delegato)?|sindaco(?: effettivo| supplente)?|titolare(?: dell'impresa individuale| di impresa individuale| firmatari[oa])?|liquidatore|procuratore(?: speciale| generale)?)$/i;
5
- const SHAREHOLDER_ROLE = /^(?:soci[oa](?: unic[oa]| accomandante| accomandatari[oa])?|(?:nuda )?propriet[aà]'?|usufrutto)$/i;
4
+ const OFFICER_ROLE = /^(?:presidente(?: (?:del )?consiglio (?:di |d')?amministrazione| del collegio sindacale)?|vice ?presidente(?: (?:del )?consiglio (?:di |d')?amministrazione)?|amministrat(?:ore|rice)(?: unic[oa]| delegat[oa])?|consigliere(?: delegato)?|sindaco(?: effettivo| supplente)?|titolare(?: dell'impresa individuale| di impresa individuale| firmatari[oa])?|liquidatore|procuratore(?: speciale| generale)?|legale rappresentante)$/i;
5
+ const PARTNER_GOVERNANCE_ROLE = /^soci[oa] (?:accomandatari[oa]|amministrat(?:ore|rice)|legale rappresentante)$/i;
6
+ const SHAREHOLDER_ROLE = /^soci[oa](?: unic[oa]| accomandante)?$/i;
6
7
  const RIGHT = /^(?:(?:nuda )?propriet[aà]'?|usufrutto)$/i;
7
8
  const TAX_CODE = /^(?:codice fiscale\s*:?\s*)?([A-Z0-9]{16}|\d{11})$/i;
8
9
  const SECTION = /^(?:\d+\s+)(?:soci|amministratori|sindaci|titolari|altre cariche|attivit[aà]'?|sede|capitale|storia|informazioni|trasferimenti|scioglimento|protocollo)\b/i;
9
10
  const PEOPLE_SECTION = /^\d+\s+(?:soci|amministratori|sindaci|titolari|altre cariche)\b/i;
10
11
  const OWNERSHIP_ROW_TOLERANCE = 5;
11
- export function isPersonRole(text) {
12
+ function classifyPersonRole(text) {
12
13
  const value = normalizeText(text);
13
- return OFFICER_ROLE.test(value) || SHAREHOLDER_ROLE.test(value);
14
+ const partnerGovernance = PARTNER_GOVERNANCE_ROLE.test(value);
15
+ const right = RIGHT.test(value);
16
+ return {
17
+ officer: OFFICER_ROLE.test(value) || partnerGovernance,
18
+ shareholder: SHAREHOLDER_ROLE.test(value) || partnerGovernance || right,
19
+ right,
20
+ soleShareholder: /^soci[oa] unic[oa]$/i.test(value),
21
+ };
22
+ }
23
+ export function isPersonRole(text) {
24
+ const role = classifyPersonRole(text);
25
+ return role.officer || role.shareholder;
14
26
  }
15
27
  function isName(text) {
16
28
  return (text.length >= 2 &&
@@ -19,12 +31,10 @@ function isName(text) {
19
31
  !/[:;]|^\d|^[a-z]{0,3}\d{5,}/i.test(text) &&
20
32
  !TAX_CODE.test(text) &&
21
33
  !/^(?:elenco|numero|codice|nato|nata|residente|domicilio|residenza|indirizzo|\(?in carica|dal\s+\d|durata|quota|valore|tipo diritto|rappresentante|informazioni|amministratori|soci\b|sindaci|titolari|data |carica\b|poteri\b|registro|camera|visura|via\b|viale\b|piazza\b|cittadinanza|proprieta|versato|euro\b|capitale)/i.test(text) &&
22
- !OFFICER_ROLE.test(text) &&
23
- !SHAREHOLDER_ROLE.test(text));
34
+ !isPersonRole(text));
24
35
  }
25
- function identities(page) {
36
+ function identities(page, spans) {
26
37
  const result = [];
27
- const spans = semanticSpans(page);
28
38
  for (const span of spans) {
29
39
  const match = TAX_CODE.exec(normalizeText(span.text));
30
40
  if (!match?.[1])
@@ -97,14 +107,13 @@ export function parsePeople(pdf, coverPage) {
97
107
  const result = { officers: [], shareholders: [] };
98
108
  const page = joinPages(pdf.pages);
99
109
  const spans = semanticSpans(page);
100
- const records = identities(page);
110
+ const records = identities(page, spans);
101
111
  const sections = spans
102
112
  .filter((span) => span.x < page.width * 0.15 && SECTION.test(normalizeText(span.text)))
103
113
  .sort((a, b) => a.y - b.y);
104
114
  // Longer reconstructed roles take precedence over a contained 'Presidente'.
105
115
  const roles = spans
106
- .filter((span) => OFFICER_ROLE.test(normalizeText(span.text)) ||
107
- SHAREHOLDER_ROLE.test(normalizeText(span.text)))
116
+ .filter((span) => isPersonRole(span.text))
108
117
  .filter((span) => {
109
118
  const section = sections.find((heading) => heading.y >= span.y);
110
119
  return (section === undefined ||
@@ -115,8 +124,7 @@ export function parsePeople(pdf, coverPage) {
115
124
  Math.abs(other.y - span.y) <= 2 &&
116
125
  other.width > span.width &&
117
126
  other.x + other.width >= span.x + span.width &&
118
- (OFFICER_ROLE.test(normalizeText(other.text)) ||
119
- SHAREHOLDER_ROLE.test(normalizeText(other.text)))))
127
+ isPersonRole(other.text)))
120
128
  .sort((a, b) => b.y - a.y || a.x - b.x);
121
129
  const roleFragments = new Set(page.spans.filter((span) => roles.some((role) => role !== span &&
122
130
  Math.abs(role.x - span.x) <= 3 &&
@@ -125,6 +133,7 @@ export function parsePeople(pdf, coverPage) {
125
133
  normalizeText(role.text).endsWith(` ${normalizeText(span.text)}`))));
126
134
  for (const role of roles) {
127
135
  const text = normalizeText(role.text);
136
+ const classification = classifyPersonRole(text);
128
137
  // A value beside 'carica' belongs to the preceding identity. The next
129
138
  // row can be another qualification, not a new person's name.
130
139
  const isDetailRole = page.spans.some((span) => span.x < role.x &&
@@ -155,7 +164,7 @@ export function parsePeople(pdf, coverPage) {
155
164
  name: fullName(page, name),
156
165
  ...(identity ? { taxCode: identity.taxCode } : {}),
157
166
  };
158
- if (OFFICER_ROLE.test(text)) {
167
+ if (classification.officer) {
159
168
  mergeOfficer(result.officers, { ...person, roles: [text] });
160
169
  if (role.page === coverPage &&
161
170
  adjacent !== undefined &&
@@ -165,11 +174,11 @@ export function parsePeople(pdf, coverPage) {
165
174
  result.primaryRepresentative = { name: person.name, role: text };
166
175
  }
167
176
  }
168
- else {
177
+ if (classification.shareholder) {
169
178
  const shareholder = { ...person };
170
- if (RIGHT.test(text))
179
+ if (classification.right)
171
180
  shareholder.rightType = text;
172
- if (/^soci[oa] unic[oa]$/i.test(text))
181
+ if (classification.soleShareholder)
173
182
  shareholder.isSoleShareholder = true;
174
183
  if (role.page === coverPage &&
175
184
  adjacent !== undefined &&